diff --git a/.gitignore b/.gitignore index 6559d61a06..3e550c3fc7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ gogs *.db *.log custom/ -.vendor/ +.vendor/ \ No newline at end of file diff --git a/conf/app.ini b/conf/app.ini index 5dc21a676e..debfcf93bd 100644 --- a/conf/app.ini +++ b/conf/app.ini @@ -2,7 +2,7 @@ APP_NAME = Gogs: Go Git Service ; !!MUST CHANGE TO YOUR USER NAME!! RUN_USER = lunny -; Either "dev", "prod" or "test", based on martini +; Either "dev", "prod" or "test", default is "dev" RUN_MODE = dev [repository] @@ -32,9 +32,61 @@ USER_PASSWD_SALT = !#@FDEWREWR&*( [mailer] ENABLED = false ; Name displayed in mail title -NAME = %(APP_NAME)s +SUBJECT = %(APP_NAME)s ; Mail server HOST = ; Mailer user name and password USER = -PASSWD = \ No newline at end of file +PASSWD = + +[log] +; Either "console", "file", "conn" or "smtp", default is "console" +MODE = console +; Buffer length of channel, keep it as it is if you don't know what it is. +BUFFER_LEN = 10000 +; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace" +LEVEL = Trace + +; For "console" mode only +[log.console] +LEVEL = + +; For "file" mode only +[log.file] +LEVEL = +FILE_NAME = log/gogs.log +; This enables automated log rotate(switch of following options), default is true +LOG_ROTATE = true +; Max line number of single file, default is 1000000 +MAX_LINES = 1000000 +; Max size shift of single file, default is 28 means 1 << 28, 256MB +MAX_SIZE_SHIFT = 28 +; Segment log daily, default is true +DAILY_ROTATE = true +; Expired days of log file(delete after max days), default is 7 +MAX_DAYS = 7 + +; For "conn" mode only +[log.conn] +LEVEL = +; Reconnect host for every single message, default is false +RECONNECT_ON_MSG = false +; Try to reconnect when connection is lost, default is false +RECONNECT = false +; Either "tcp", "unix" or "udp", default is "tcp" +PROTOCOL = tcp +; Host address +ADDR = + +; For "smtp" mode only +[log.smtp] +LEVEL = +; Name displayed in mail title, default is "Diagnostic message from serve" +SUBJECT = Diagnostic message from serve +; Mail server +HOST = +; Mailer user name and password +USER = +PASSWD = +; Receivers, can be one or more, e.g. ["1@example.com","2@example.com"] +RECEIVERS = \ No newline at end of file diff --git a/gogs.go b/gogs.go index 2757fbc115..106e8b1d93 100644 --- a/gogs.go +++ b/gogs.go @@ -20,7 +20,7 @@ import ( // Test that go1.1 tag above is included in builds. main.go refers to this definition. const go11tag = true -const APP_VER = "0.1.0.0318.1" +const APP_VER = "0.1.0.0319.1" func init() { base.AppVer = APP_VER diff --git a/modules/base/conf.go b/modules/base/conf.go index 83c7f8872d..6610bce1ab 100644 --- a/modules/base/conf.go +++ b/modules/base/conf.go @@ -44,6 +44,76 @@ func exeDir() (string, error) { return path.Dir(p), nil } +var logLevels = map[string]string{ + "Trace": "0", + "Debug": "1", + "Info": "2", + "Warn": "3", + "Error": "4", + "Critical": "5", +} + +func newLogService() { + // Get and check log mode. + mode := Cfg.MustValue("log", "MODE", "console") + modeSec := "log." + mode + if _, err := Cfg.GetSection(modeSec); err != nil { + fmt.Printf("Unknown log mode: %s\n", mode) + os.Exit(2) + } + + // Log level. + level, ok := logLevels[Cfg.MustValue("log."+mode, "LEVEL", "Trace")] + if !ok { + fmt.Printf("Unknown log level: %s\n", Cfg.MustValue("log."+mode, "LEVEL", "Trace")) + os.Exit(2) + } + + // Generate log configuration. + var config string + switch mode { + case "console": + config = fmt.Sprintf(`{"level":%s}`, level) + case "file": + config = fmt.Sprintf( + `{"level":%s,"filename":%s,"rotate":%v,"maxlines":%d,"maxsize",%d,"daily":%v,"maxdays":%d}`, level, + Cfg.MustValue(modeSec, "FILE_NAME", "log/gogs.log"), + Cfg.MustBool(modeSec, "LOG_ROTATE", true), + Cfg.MustInt(modeSec, "MAX_LINES", 1000000), + 1<