diff --git a/build/config.go b/build/config.go index 6361bc1af4..b850b1b5cc 100644 --- a/build/config.go +++ b/build/config.go @@ -5,6 +5,12 @@ package build import "github.com/btcsuite/btclog/v2" +const ( + callSiteOff = "off" + callSiteShort = "short" + callSiteLong = "long" +) + // LogConfig holds logging configuration options. // //nolint:lll @@ -16,8 +22,12 @@ type LogConfig struct { // DefaultLogConfig returns the default logging config options. func DefaultLogConfig() *LogConfig { return &LogConfig{ - Console: &LoggerConfig{}, - File: &LoggerConfig{}, + Console: &LoggerConfig{ + CallSite: callSiteOff, + }, + File: &LoggerConfig{ + CallSite: callSiteOff, + }, } } @@ -25,17 +35,27 @@ func DefaultLogConfig() *LogConfig { // //nolint:lll type LoggerConfig struct { - Disable bool `long:"disable" description:"Disable this logger."` - NoTimestamps bool `long:"no-timestamps" description:"Omit timestamps from log lines."` + Disable bool `long:"disable" description:"Disable this logger."` + NoTimestamps bool `long:"no-timestamps" description:"Omit timestamps from log lines."` + CallSite string `long:"call-site" description:"Include the call-site of each log line." choice:"off" choice:"short" choice:"long"` } // HandlerOptions returns the set of btclog.HandlerOptions that the state of the // config struct translates to. func (cfg *LoggerConfig) HandlerOptions() []btclog.HandlerOption { - var opts []btclog.HandlerOption + opts := []btclog.HandlerOption{ + btclog.WithCallSiteSkipDepth(7), + } if cfg.NoTimestamps { opts = append(opts, btclog.WithNoTimestamp()) } + switch cfg.CallSite { + case callSiteShort: + opts = append(opts, btclog.WithCallerFlags(btclog.Lshortfile)) + case callSiteLong: + opts = append(opts, btclog.WithCallerFlags(btclog.Llongfile)) + } + return opts } diff --git a/build/config_dev.go b/build/config_dev.go index ff69bfe1ce..2ea6f40c2a 100644 --- a/build/config_dev.go +++ b/build/config_dev.go @@ -17,6 +17,10 @@ const ( faintSeq = "2" esc = '\x1b' csi = string(esc) + "[" + + callSiteOff = "off" + callSiteShort = "short" + callSiteLong = "long" ) // LogConfig holds logging configuration options. @@ -27,22 +31,47 @@ type LogConfig struct { File *LoggerConfig `group:"file" namespace:"file" description:"The logger writing to LND's standard log file."` } +// DefaultLogConfig returns the default logging config options. +func DefaultLogConfig() *LogConfig { + return &LogConfig{ + Console: &consoleLoggerCfg{ + LoggerConfig: LoggerConfig{ + CallSite: callSiteOff, + }, + }, + File: &LoggerConfig{ + CallSite: callSiteOff, + }, + } +} + // LoggerConfig holds options for a particular logger. // //nolint:lll type LoggerConfig struct { - Disable bool `long:"disable" description:"Disable this logger."` - NoTimestamps bool `long:"no-timestamps" description:"Omit timestamps from log lines."` + Disable bool `long:"disable" description:"Disable this logger."` + NoTimestamps bool `long:"no-timestamps" description:"Omit timestamps from log lines."` + CallSite string `long:"call-site" description:"Include the call-site of each log line." choice:"off" choice:"short" choice:"long"` } // HandlerOptions returns the set of btclog.HandlerOptions that the state of the // config struct translates to. func (cfg *LoggerConfig) HandlerOptions() []btclog.HandlerOption { - var opts []btclog.HandlerOption + opts := []btclog.HandlerOption{ + btclog.WithCallSiteSkipDepth(7), + } + if cfg.NoTimestamps { opts = append(opts, btclog.WithNoTimestamp()) } + switch cfg.CallSite { + case callSiteShort: + opts = append(opts, btclog.WithCallerFlags(btclog.Lshortfile)) + case callSiteLong: + opts = append(opts, btclog.WithCallerFlags(btclog.Llongfile)) + } + return opts } @@ -87,14 +116,6 @@ func (cfg *consoleLoggerCfg) HandlerOptions() []btclog.HandlerOption { ) } -// DefaultLogConfig returns the default logging config options. -func DefaultLogConfig() *LogConfig { - return &LogConfig{ - Console: &consoleLoggerCfg{}, - File: &LoggerConfig{}, - } -} - func styleString(s string, styles ...string) string { if len(styles) == 0 { return s diff --git a/docs/release-notes/release-notes-0.19.0.md b/docs/release-notes/release-notes-0.19.0.md index b11f479d2a..c615b4e823 100644 --- a/docs/release-notes/release-notes-0.19.0.md +++ b/docs/release-notes/release-notes-0.19.0.md @@ -77,9 +77,12 @@ written to stdout and a new `--logging.file.disable` option to disable writing logs to the standard log file. It also adds `--logging.console.no-timestamps` and `--logging.file.no-timestamps` which can be used to omit timestamps in - log messages for the respective loggers. Finally, the new - `--logging.console.style` option can be used under the `dev` build tag to add - styling to console logging. + log messages for the respective loggers. The new `--logging.console.call-site` + and `--logging.file.call-site` options can be used to include the call-site of + a log line. The options for this include "off" (default), "short" (source file + name and line number) and "long" (full path to source file and line number). + Finally, the new `--logging.console.style` option can be used under the `dev` + build tag to add styling to console logging. ## Breaking Changes ## Performance Improvements diff --git a/sample-lnd.conf b/sample-lnd.conf index 7e447e0956..004f3147b3 100644 --- a/sample-lnd.conf +++ b/sample-lnd.conf @@ -971,12 +971,26 @@ ; Don't add timestamps to logs written to stdout and stderr. ; logging.console.no-timestamps=false +; Include the log call-site in the log line written to stdout +; and stderr. Options include 'off', 'short' and 'long'. +; Default: +; logging.console.call-site=off +; Example: +; logging.console.call-site=short + ; Disable logging to the standard LND log file. ; logging.file.disable=false ; Don't add timestamps to logs written to the standard LND log file. ; logging.file.no-timestamps=false +; Include the log call-site in the log line written the standard LND +; log file. Options include 'off', 'short' and 'long'. +; Default: +; logging.file.call-site=off +; Example: +; logging.file.call-site=short + [watchtower] ; Enable integrated watchtower listening on :9911 by default.