diff options
author | zeripath <art27@cantab.net> | 2022-08-19 02:27:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-18 21:27:27 -0400 |
commit | 3aa5749d538d058c26fe79043612ff8191d1a247 (patch) | |
tree | 427f1bdb792363a204b379191f6af7da42b2c118 /cmd/doctor.go | |
parent | 68f3aaee809eb1c6a99045a608a10d3707ce2557 (diff) | |
download | gitea-3aa5749d538d058c26fe79043612ff8191d1a247.tar.gz gitea-3aa5749d538d058c26fe79043612ff8191d1a247.zip |
Disable doctor logging on panic (#20847)
* Disable doctor logging on panic
If permissions are incorrect for writing to the doctor log simply disable the log file
instead of panicing.
Related #20570
Signed-off-by: Andrew Thornton <art27@cantab.net>
* Update cmd/doctor.go
* Update cmd/doctor.go
Co-authored-by: delvh <dev.lh@web.de>
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'cmd/doctor.go')
-rw-r--r-- | cmd/doctor.go | 53 |
1 files changed, 42 insertions, 11 deletions
diff --git a/cmd/doctor.go b/cmd/doctor.go index 67a4ecc9c8..a118484052 100644 --- a/cmd/doctor.go +++ b/cmd/doctor.go @@ -5,6 +5,7 @@ package cmd import ( + "errors" "fmt" golog "log" "os" @@ -123,20 +124,11 @@ func runRecreateTable(ctx *cli.Context) error { }) } -func runDoctor(ctx *cli.Context) error { - stdCtx, cancel := installSignals() - defer cancel() - - // Silence the default loggers - log.DelNamedLogger("console") - log.DelNamedLogger(log.DEFAULT) - - // Now setup our own +func setDoctorLogger(ctx *cli.Context) { logFile := ctx.String("log-file") if !ctx.IsSet("log-file") { logFile = "doctor.log" } - colorize := log.CanColorStdout if ctx.IsSet("color") { colorize = ctx.Bool("color") @@ -144,11 +136,50 @@ func runDoctor(ctx *cli.Context) error { if len(logFile) == 0 { log.NewLogger(1000, "doctor", "console", fmt.Sprintf(`{"level":"NONE","stacktracelevel":"NONE","colorize":%t}`, colorize)) - } else if logFile == "-" { + return + } + + defer func() { + recovered := recover() + if recovered == nil { + return + } + + err, ok := recovered.(error) + if !ok { + panic(recovered) + } + if errors.Is(err, os.ErrPermission) { + fmt.Fprintf(os.Stderr, "ERROR: Unable to write logs to provided file due to permissions error: %s\n %v\n", logFile, err) + } else { + fmt.Fprintf(os.Stderr, "ERROR: Unable to write logs to provided file: %s\n %v\n", logFile, err) + } + fmt.Fprintf(os.Stderr, "WARN: Logging will be disabled\n Use `--log-file` to configure log file location\n") + log.NewLogger(1000, "doctor", "console", fmt.Sprintf(`{"level":"NONE","stacktracelevel":"NONE","colorize":%t}`, colorize)) + }() + + if logFile == "-" { log.NewLogger(1000, "doctor", "console", fmt.Sprintf(`{"level":"trace","stacktracelevel":"NONE","colorize":%t}`, colorize)) } else { log.NewLogger(1000, "doctor", "file", fmt.Sprintf(`{"filename":%q,"level":"trace","stacktracelevel":"NONE"}`, logFile)) } +} + +func runDoctor(ctx *cli.Context) error { + stdCtx, cancel := installSignals() + defer cancel() + + // Silence the default loggers + log.DelNamedLogger("console") + log.DelNamedLogger(log.DEFAULT) + + // Now setup our own + setDoctorLogger(ctx) + + colorize := log.CanColorStdout + if ctx.IsSet("color") { + colorize = ctx.Bool("color") + } // Finally redirect the default golog to here golog.SetFlags(0) |