|
5 | 5 | package cmd
|
6 | 6 |
|
7 | 7 | import (
|
| 8 | + "errors" |
8 | 9 | "fmt"
|
9 | 10 | golog "log"
|
10 | 11 | "os"
|
@@ -123,32 +124,62 @@ func runRecreateTable(ctx *cli.Context) error {
|
123 | 124 | })
|
124 | 125 | }
|
125 | 126 |
|
126 |
| -func runDoctor(ctx *cli.Context) error { |
127 |
| - stdCtx, cancel := installSignals() |
128 |
| - defer cancel() |
129 |
| - |
130 |
| - // Silence the default loggers |
131 |
| - log.DelNamedLogger("console") |
132 |
| - log.DelNamedLogger(log.DEFAULT) |
133 |
| - |
134 |
| - // Now setup our own |
| 127 | +func setDoctorLogger(ctx *cli.Context) { |
135 | 128 | logFile := ctx.String("log-file")
|
136 | 129 | if !ctx.IsSet("log-file") {
|
137 | 130 | logFile = "doctor.log"
|
138 | 131 | }
|
139 |
| - |
140 | 132 | colorize := log.CanColorStdout
|
141 | 133 | if ctx.IsSet("color") {
|
142 | 134 | colorize = ctx.Bool("color")
|
143 | 135 | }
|
144 | 136 |
|
145 | 137 | if len(logFile) == 0 {
|
146 | 138 | log.NewLogger(1000, "doctor", "console", fmt.Sprintf(`{"level":"NONE","stacktracelevel":"NONE","colorize":%t}`, colorize))
|
147 |
| - } else if logFile == "-" { |
| 139 | + return |
| 140 | + } |
| 141 | + |
| 142 | + defer func() { |
| 143 | + recovered := recover() |
| 144 | + if recovered == nil { |
| 145 | + return |
| 146 | + } |
| 147 | + |
| 148 | + err, ok := recovered.(error) |
| 149 | + if !ok { |
| 150 | + panic(recovered) |
| 151 | + } |
| 152 | + if errors.Is(err, os.ErrPermission) { |
| 153 | + fmt.Fprintf(os.Stderr, "ERROR: Unable to write logs to provided file due to permissions error: %s\n %v\n", logFile, err) |
| 154 | + } else { |
| 155 | + fmt.Fprintf(os.Stderr, "ERROR: Unable to write logs to provided file: %s\n %v\n", logFile, err) |
| 156 | + } |
| 157 | + fmt.Fprintf(os.Stderr, "WARN: Logging will be disabled\n Use `--log-file` to configure log file location\n") |
| 158 | + log.NewLogger(1000, "doctor", "console", fmt.Sprintf(`{"level":"NONE","stacktracelevel":"NONE","colorize":%t}`, colorize)) |
| 159 | + }() |
| 160 | + |
| 161 | + if logFile == "-" { |
148 | 162 | log.NewLogger(1000, "doctor", "console", fmt.Sprintf(`{"level":"trace","stacktracelevel":"NONE","colorize":%t}`, colorize))
|
149 | 163 | } else {
|
150 | 164 | log.NewLogger(1000, "doctor", "file", fmt.Sprintf(`{"filename":%q,"level":"trace","stacktracelevel":"NONE"}`, logFile))
|
151 | 165 | }
|
| 166 | +} |
| 167 | + |
| 168 | +func runDoctor(ctx *cli.Context) error { |
| 169 | + stdCtx, cancel := installSignals() |
| 170 | + defer cancel() |
| 171 | + |
| 172 | + // Silence the default loggers |
| 173 | + log.DelNamedLogger("console") |
| 174 | + log.DelNamedLogger(log.DEFAULT) |
| 175 | + |
| 176 | + // Now setup our own |
| 177 | + setDoctorLogger(ctx) |
| 178 | + |
| 179 | + colorize := log.CanColorStdout |
| 180 | + if ctx.IsSet("color") { |
| 181 | + colorize = ctx.Bool("color") |
| 182 | + } |
152 | 183 |
|
153 | 184 | // Finally redirect the default golog to here
|
154 | 185 | golog.SetFlags(0)
|
|
0 commit comments