cmd/serv: improve hookMode handling (#5960)

- Allow remove primary logger at better location
- Use more appropriate log.Error to replace log.Fatal
pull/5964/head
ᴜɴᴋɴᴡᴏɴ 2020-03-02 22:25:28 +08:00 committed by GitHub
parent 7efa946b02
commit 931da04dc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 9 deletions

View File

@ -35,14 +35,17 @@ var Serv = cli.Command{
}, },
} }
func fail(userMessage, logMessage string, args ...interface{}) { // fail prints user message to the Git client (i.e. os.Stderr) and
// logs error message on the server side. When not in "prod" mode,
// error message is also printed to the client for easier debugging.
func fail(userMessage, errMessage string, args ...interface{}) {
fmt.Fprintln(os.Stderr, "Gogs:", userMessage) fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
if len(logMessage) > 0 { if len(errMessage) > 0 {
if !conf.IsProdMode() { if !conf.IsProdMode() {
fmt.Fprintf(os.Stderr, logMessage+"\n", args...) fmt.Fprintf(os.Stderr, errMessage+"\n", args...)
} }
log.Fatal(logMessage, args...) log.Error(errMessage, args...)
} }
os.Exit(1) os.Exit(1)

View File

@ -126,17 +126,15 @@ func initLogConf(cfg *ini.File, hookMode bool) (_ *logConf, hasConsole bool, _ e
} }
// InitLogging initializes the logging service of the application. When the // InitLogging initializes the logging service of the application. When the
// argument "hookMode" is true, it only initializes the root path for log files // "hookMode" is true, it only initializes the root path for log files without
// without creating any logger. // creating any logger. It will also not remove the primary logger in "hookMode"
// and is up to the caller to decide when to remove it.
func InitLogging(hookMode bool) { func InitLogging(hookMode bool) {
logConf, hasConsole, err := initLogConf(File, hookMode) logConf, hasConsole, err := initLogConf(File, hookMode)
if err != nil { if err != nil {
log.Fatal("Failed to init logging configuration: %v", err) log.Fatal("Failed to init logging configuration: %v", err)
} }
defer func() { defer func() {
if !hasConsole {
log.Remove(log.DefaultConsoleName)
}
Log = logConf Log = logConf
}() }()
@ -177,4 +175,11 @@ func InitLogging(hookMode bool) {
} }
log.Trace("Log mode: %s (%s)", strings.Title(mode), strings.Title(strings.ToLower(level.String()))) log.Trace("Log mode: %s (%s)", strings.Title(mode), strings.Title(strings.ToLower(level.String())))
} }
// ⚠️ WARNING: It is only safe to remove the primary logger until
// there are other loggers that are initialized. Otherwise, the
// application will print errors to nowhere.
if !hasConsole {
log.Remove(log.DefaultConsoleName)
}
} }