|
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