4
4
package cmd
5
5
6
6
import (
7
- "errors"
8
7
"fmt"
9
8
golog "log"
10
9
"os"
10
+ "path/filepath"
11
11
"strings"
12
12
"text/tabwriter"
13
13
@@ -82,23 +82,25 @@ You should back-up your database before doing this and ensure that your database
82
82
}
83
83
84
84
func runRecreateTable (ctx * cli.Context ) error {
85
+ stdCtx , cancel := installSignals ()
86
+ defer cancel ()
87
+
85
88
// Redirect the default golog to here
86
89
golog .SetFlags (0 )
87
90
golog .SetPrefix ("" )
88
- golog .SetOutput (log .NewLoggerAsWriter ( "INFO" , log .GetLogger (log .DEFAULT )))
91
+ golog .SetOutput (log .LoggerToWriter ( log .GetLogger (log .DEFAULT ). Info ))
89
92
93
+ debug := ctx .Bool ("debug" )
90
94
setting .Init (& setting.Options {})
91
95
setting .LoadDBSetting ()
92
96
93
- setting .Log .EnableXORMLog = ctx .Bool ("debug" )
94
- setting .Database .LogSQL = ctx .Bool ("debug" )
95
- // FIXME: don't use CfgProvider directly
96
- setting .CfgProvider .Section ("log" ).Key ("XORM" ).SetValue ("," )
97
-
98
- setting .InitSQLLog (! ctx .Bool ("debug" ))
99
- stdCtx , cancel := installSignals ()
100
- defer cancel ()
97
+ if debug {
98
+ setting .InitSQLLoggersForCli (log .DEBUG )
99
+ } else {
100
+ setting .InitSQLLoggersForCli (log .INFO )
101
+ }
101
102
103
+ setting .Database .LogSQL = debug
102
104
if err := db .InitEngine (stdCtx ); err != nil {
103
105
fmt .Println (err )
104
106
fmt .Println ("Check if you are using the right config file. You can use a --config directive to specify one." )
@@ -125,67 +127,49 @@ func runRecreateTable(ctx *cli.Context) error {
125
127
})
126
128
}
127
129
128
- func setDoctorLogger (ctx * cli.Context ) {
130
+ func setupDoctorDefaultLogger (ctx * cli.Context , colorize bool ) {
131
+ // Silence the default loggers
132
+ setupConsoleLogger (log .FATAL , log .CanColorStderr , os .Stderr )
133
+
129
134
logFile := ctx .String ("log-file" )
130
135
if ! ctx .IsSet ("log-file" ) {
131
136
logFile = "doctor.log"
132
137
}
133
- colorize := log .CanColorStdout
134
- if ctx .IsSet ("color" ) {
135
- colorize = ctx .Bool ("color" )
136
- }
137
138
138
139
if len (logFile ) == 0 {
139
- log . NewLogger ( 1000 , " doctor" , "console" , fmt . Sprintf ( `{"level":"NONE","stacktracelevel":"NONE","colorize":%t}` , colorize ))
140
+ // if no doctor log-file is set, do not show any log from default logger
140
141
return
141
142
}
142
143
143
- defer func () {
144
- recovered := recover ()
145
- if recovered == nil {
146
- return
147
- }
148
-
149
- err , ok := recovered .(error )
150
- if ! ok {
151
- panic (recovered )
152
- }
153
- if errors .Is (err , os .ErrPermission ) {
154
- fmt .Fprintf (os .Stderr , "ERROR: Unable to write logs to provided file due to permissions error: %s\n %v\n " , logFile , err )
155
- } else {
156
- fmt .Fprintf (os .Stderr , "ERROR: Unable to write logs to provided file: %s\n %v\n " , logFile , err )
157
- }
158
- fmt .Fprintf (os .Stderr , "WARN: Logging will be disabled\n Use `--log-file` to configure log file location\n " )
159
- log .NewLogger (1000 , "doctor" , "console" , fmt .Sprintf (`{"level":"NONE","stacktracelevel":"NONE","colorize":%t}` , colorize ))
160
- }()
161
-
162
144
if logFile == "-" {
163
- log .NewLogger ( 1000 , "doctor" , "console" , fmt . Sprintf ( `{"level":"trace","stacktracelevel":"NONE"," colorize":%t}` , colorize ) )
145
+ setupConsoleLogger ( log .TRACE , colorize , os . Stdout )
164
146
} else {
165
- log .NewLogger (1000 , "doctor" , "file" , fmt .Sprintf (`{"filename":%q,"level":"trace","stacktracelevel":"NONE"}` , logFile ))
147
+ logFile , _ = filepath .Abs (logFile )
148
+ writeMode := log.WriterMode {Level : log .TRACE , WriterOption : log.WriterFileOption {FileName : logFile }}
149
+ writer , err := log .NewEventWriter ("console-to-file" , "file" , writeMode )
150
+ if err != nil {
151
+ log .FallbackErrorf ("unable to create file log writer: %v" , err )
152
+ return
153
+ }
154
+ log .GetManager ().GetLogger (log .DEFAULT ).RemoveAllWriters ().AddWriters (writer )
166
155
}
167
156
}
168
157
169
158
func runDoctor (ctx * cli.Context ) error {
170
159
stdCtx , cancel := installSignals ()
171
160
defer cancel ()
172
161
173
- // Silence the default loggers
174
- log .DelNamedLogger ("console" )
175
- log .DelNamedLogger (log .DEFAULT )
176
-
177
- // Now setup our own
178
- setDoctorLogger (ctx )
179
-
180
162
colorize := log .CanColorStdout
181
163
if ctx .IsSet ("color" ) {
182
164
colorize = ctx .Bool ("color" )
183
165
}
184
166
185
- // Finally redirect the default golog to here
167
+ setupDoctorDefaultLogger (ctx , colorize )
168
+
169
+ // Finally redirect the default golang's log to here
186
170
golog .SetFlags (0 )
187
171
golog .SetPrefix ("" )
188
- golog .SetOutput (log .NewLoggerAsWriter ( "INFO" , log .GetLogger (log .DEFAULT )))
172
+ golog .SetOutput (log .LoggerToWriter ( log .GetLogger (log .DEFAULT ). Info ))
189
173
190
174
if ctx .IsSet ("list" ) {
191
175
w := tabwriter .NewWriter (os .Stdout , 0 , 8 , 1 , '\t' , 0 )
@@ -233,17 +217,5 @@ func runDoctor(ctx *cli.Context) error {
233
217
}
234
218
}
235
219
236
- // Now we can set up our own logger to return information about what the doctor is doing
237
- if err := log .NewNamedLogger ("doctorouter" ,
238
- 0 ,
239
- "console" ,
240
- "console" ,
241
- fmt .Sprintf (`{"level":"INFO","stacktracelevel":"NONE","colorize":%t,"flags":-1}` , colorize )); err != nil {
242
- fmt .Println (err )
243
- return err
244
- }
245
-
246
- logger := log .GetLogger ("doctorouter" )
247
- defer logger .Close ()
248
- return doctor .RunChecks (stdCtx , logger , ctx .Bool ("fix" ), checks )
220
+ return doctor .RunChecks (stdCtx , colorize , ctx .Bool ("fix" ), checks )
249
221
}
0 commit comments