Skip to content

Commit 87aae7d

Browse files
committed
cmd/geth: make log rotation option explicit, combine log.file flag
internal: post-rebase fixups internal: fix cli-param redeclaration sq
1 parent bd92941 commit 87aae7d

File tree

1 file changed

+50
-47
lines changed

1 file changed

+50
-47
lines changed

internal/debug/flags.go

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"net/http"
2323
_ "net/http/pprof"
2424
"os"
25-
"path"
2625
"path/filepath"
2726
"runtime"
2827

@@ -79,11 +78,9 @@ var (
7978
Usage: "Prepends log messages with call-site location (file and line number)",
8079
Category: flags.LoggingCategory,
8180
}
82-
logLocationFlag = &flags.DirectoryFlag{
83-
Name: "log.folder",
84-
Usage: "Location where the log files should be placed",
85-
Value: flags.DirectoryString("./logs/"),
86-
Category: flags.LoggingCategory,
81+
logRotateFlag = &cli.BoolFlag{
82+
Name: "log.rotate",
83+
Usage: "Enables log file rotation",
8784
}
8885
logMaxSizeMBsFlag = &cli.IntFlag{
8986
Name: "log.maxsize",
@@ -153,12 +150,12 @@ var (
153150
var Flags = []cli.Flag{
154151
verbosityFlag,
155152
vmoduleFlag,
153+
backtraceAtFlag,
154+
debugFlag,
156155
logjsonFlag,
157156
logFormatFlag,
158157
logFileFlag,
159-
backtraceAtFlag,
160-
debugFlag,
161-
logLocationFlag,
158+
logRotateFlag,
162159
logMaxSizeMBsFlag,
163160
logMaxBackupsFlag,
164161
logMaxAgeFlag,
@@ -186,59 +183,65 @@ func init() {
186183
// Setup initializes profiling and logging based on the CLI flags.
187184
// It should be called as early as possible in the program.
188185
func Setup(ctx *cli.Context) error {
189-
output := io.Writer(os.Stderr)
190-
var logfmt log.Format
191-
ttyHasColor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb"
192-
193-
switch ctx.String(logFormatFlag.Name) {
194-
case "json":
186+
var (
187+
logfmt log.Format
188+
output = io.Writer(os.Stderr)
189+
logFmtFlag = ctx.String(logFormatFlag.Name)
190+
)
191+
switch {
192+
case ctx.Bool(logjsonFlag.Name):
193+
// Retain backwards compatibility with `--log.json` flag if `--log.format` not set
194+
defer log.Warn("The flag '--log.json' is deprecated, please use '--log.format=json' instead")
195+
logfmt = log.JSONFormat()
196+
case logFmtFlag == "json":
195197
logfmt = log.JSONFormat()
196-
case "logfmt":
198+
case logFmtFlag == "logfmt":
197199
logfmt = log.LogfmtFormat()
198-
case "terminal":
199-
logfmt = log.TerminalFormat(ttyHasColor)
200-
case "":
201-
// Retain backwards compatibility with `--log.json` flag if `--log.format` not set
202-
if ctx.Bool(logjsonFlag.Name) {
203-
defer log.Warn("The flag '--log.json' is deprecated, please use '--log.format=json' instead")
204-
logfmt = log.JSONFormat()
205-
} else {
206-
logfmt = log.TerminalFormat(ttyHasColor)
200+
case logFmtFlag == "", logFmtFlag == "terminal":
201+
useColor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb"
202+
if useColor {
203+
output = colorable.NewColorableStderr()
207204
}
205+
logfmt = log.TerminalFormat(useColor)
208206
default:
209207
// Unknown log format specified
210208
return fmt.Errorf("unknown log format: %v", ctx.String(logFormatFlag.Name))
211209
}
212-
213-
if logFile != "" {
214-
var err error
215-
logOutputStream, err = log.FileHandler(logFile, logfmt)
216-
if err != nil {
217-
return err
218-
}
219-
} else {
220-
if ttyHasColor {
221-
output = colorable.NewColorableStderr()
210+
var (
211+
stdHandler = log.StreamHandler(output, logfmt)
212+
ostream = stdHandler
213+
logFile = ctx.String(logFileFlag.Name)
214+
rotation = ctx.Bool(logRotateFlag.Name)
215+
)
216+
if len(logFile) > 0 {
217+
if err := validateLogLocation(filepath.Dir(logFile)); err != nil {
218+
return fmt.Errorf("failed to initiatilize file logger: %v", err)
222219
}
223-
logfmt = log.TerminalFormat(ttyHasColor)
224220
}
225-
226-
stdHandler := log.StreamHandler(output, logfmt)
227-
ostream := stdHandler
228-
if folder := ctx.String(logLocationFlag.Name); folder != "" {
229-
if err := validateLogLocation(folder); err != nil {
230-
return fmt.Errorf("failed to initiatilize file logger: %v", err)
221+
if rotation {
222+
// Lumberjack uses <processname>-lumberjack.log in is.TempDir() if empty.
223+
// so typically /tmp/geth-lumberjack.log on linux
224+
if len(logFile) > 0 {
225+
log.Info("Rotating file logging configured", "location", logFile)
226+
} else {
227+
log.Info("Rotating file logging configured", "location",
228+
filepath.Join(os.TempDir(), "geth-lumberjack.log"))
231229
}
232-
lumberjackHandler := log.StreamHandler(&lumberjack.Logger{
233-
Filename: path.Join(folder, "log.log"),
230+
ostream = log.MultiHandler(log.StreamHandler(&lumberjack.Logger{
231+
Filename: logFile,
234232
MaxSize: ctx.Int(logMaxSizeMBsFlag.Name),
235233
MaxBackups: ctx.Int(logMaxBackupsFlag.Name),
236234
MaxAge: ctx.Int(logMaxAgeFlag.Name),
237235
Compress: ctx.Bool(logCompressFlag.Name),
238-
}, logfmt)
239-
ostream = log.MultiHandler(lumberjackHandler, stdHandler)
236+
}, logfmt), stdHandler)
237+
} else if logFile != "" {
238+
if logOutputStream, err := log.FileHandler(logFile, logfmt); err != nil {
239+
return err
240+
} else {
241+
ostream = log.MultiHandler(logOutputStream, stdHandler)
242+
log.Info("File logging configured", "location", logFile)
243+
}
240244
}
241-
242245
glogger.SetHandler(ostream)
243246

244247
// logging

0 commit comments

Comments
 (0)