From 5eed171187310e822380045e24632c50c8e784d5 Mon Sep 17 00:00:00 2001 From: vegardengen Date: Sat, 7 Apr 2018 00:11:42 +0200 Subject: [PATCH] config: make log rotation configurable --- config.go | 43 ++++++++++++++++++++++++------------------- log.go | 4 ++-- sample-lnd.conf | 6 ++++++ 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/config.go b/config.go index 9f620ac005..15ba4f291f 100644 --- a/config.go +++ b/config.go @@ -46,6 +46,8 @@ const ( defaultMaxPendingChannels = 1 defaultNoEncryptWallet = false defaultTrickleDelay = 30 * 1000 + defaultMaxLogFiles = 3 + defaultMaxLogFileSize = 10 defaultBroadcastDelta = 10 @@ -145,24 +147,25 @@ type torConfig struct { type config struct { ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` - LndDir string `long:"lnddir" description:"The base directory that contains lnd's data, logs, configuration file, etc."` - ConfigFile string `long:"C" long:"configfile" description:"Path to configuration file"` - DataDir string `short:"b" long:"datadir" description:"The directory to store lnd's data within"` - TLSCertPath string `long:"tlscertpath" description:"Path to write the TLS certificate for lnd's RPC and REST services"` - TLSKeyPath string `long:"tlskeypath" description:"Path to write the TLS private key for lnd's RPC and REST services"` - TLSExtraIP string `long:"tlsextraip" description:"Adds an extra ip to the generated certificate"` - TLSExtraDomain string `long:"tlsextradomain" description:"Adds an extra domain to the generated certificate"` - NoMacaroons bool `long:"no-macaroons" description:"Disable macaroon authentication"` - AdminMacPath string `long:"adminmacaroonpath" description:"Path to write the admin macaroon for lnd's RPC and REST services if it doesn't exist"` - ReadMacPath string `long:"readonlymacaroonpath" description:"Path to write the read-only macaroon for lnd's RPC and REST services if it doesn't exist"` - InvoiceMacPath string `long:"invoicemacaroonpath" description:"Path to the invoice-only macaroon for lnd's RPC and REST services if it doesn't exist"` - LogDir string `long:"logdir" description:"Directory to log output."` - - RPCListeners []string `long:"rpclisten" description:"Add an interface/port to listen for RPC connections"` - RESTListeners []string `long:"restlisten" description:"Add an interface/port to listen for REST connections"` - Listeners []string `long:"listen" description:"Add an interface/port to listen for peer connections"` - DisableListen bool `long:"nolisten" description:"Disable listening for incoming peer connections"` - ExternalIPs []string `long:"externalip" description:"Add an ip:port to the list of local addresses we claim to listen on to peers. If a port is not specified, the default (9735) will be used regardless of other parameters"` + LndDir string `long:"lnddir" description:"The base directory that contains lnd's data, logs, configuration file, etc."` + ConfigFile string `long:"C" long:"configfile" description:"Path to configuration file"` + DataDir string `short:"b" long:"datadir" description:"The directory to store lnd's data within"` + TLSCertPath string `long:"tlscertpath" description:"Path to write the TLS certificate for lnd's RPC and REST services"` + TLSKeyPath string `long:"tlskeypath" description:"Path to write the TLS private key for lnd's RPC and REST services"` + TLSExtraIP string `long:"tlsextraip" description:"Adds an extra ip to the generated certificate"` + TLSExtraDomain string `long:"tlsextradomain" description:"Adds an extra domain to the generated certificate"` + NoMacaroons bool `long:"no-macaroons" description:"Disable macaroon authentication"` + AdminMacPath string `long:"adminmacaroonpath" description:"Path to write the admin macaroon for lnd's RPC and REST services if it doesn't exist"` + ReadMacPath string `long:"readonlymacaroonpath" description:"Path to write the read-only macaroon for lnd's RPC and REST services if it doesn't exist"` + InvoiceMacPath string `long:"invoicemacaroonpath" description:"Path to the invoice-only macaroon for lnd's RPC and REST services if it doesn't exist"` + LogDir string `long:"logdir" description:"Directory to log output."` + MaxLogFiles int `long:"maxlogfiles" description:"Maximum logfiles to keep (0 for no rotation)"` + MaxLogFileSize int `long:"maxlogfilesize" description:"Maximum logfile size in MB"` + RPCListeners []string `long:"rpclisten" description:"Add an interface/port to listen for RPC connections"` + RESTListeners []string `long:"restlisten" description:"Add an interface/port to listen for REST connections"` + Listeners []string `long:"listen" description:"Add an interface/port to listen for peer connections"` + DisableListen bool `long:"nolisten" description:"Disable listening for incoming peer connections"` + ExternalIPs []string `long:"externalip" description:"Add an ip:port to the list of local addresses we claim to listen on to peers. If a port is not specified, the default (9735) will be used regardless of other parameters"` DebugLevel string `short:"d" long:"debuglevel" description:"Logging level for all subsystems {trace, debug, info, warn, error, critical} -- You may also specify =,=,... to set the log level for individual subsystems -- Use show to list available subsystems"` @@ -222,6 +225,8 @@ func loadConfig() (*config, error) { InvoiceMacPath: defaultInvoiceMacPath, ReadMacPath: defaultReadMacPath, LogDir: defaultLogDir, + MaxLogFiles: defaultMaxLogFiles, + MaxLogFileSize: defaultMaxLogFileSize, Bitcoin: &chainConfig{ MinHTLC: defaultBitcoinMinHTLCMSat, BaseFee: defaultBitcoinBaseFeeMSat, @@ -662,7 +667,7 @@ func loadConfig() (*config, error) { normalizeNetwork(activeNetParams.Name)) // Initialize logging at the default logging level. - initLogRotator(filepath.Join(cfg.LogDir, defaultLogFilename)) + initLogRotator(filepath.Join(cfg.LogDir, defaultLogFilename), cfg.MaxLogFileSize, cfg.MaxLogFiles) // Parse, validate, and set debug log level(s). if err := parseAndSetDebugLevels(cfg.DebugLevel); err != nil { diff --git a/log.go b/log.go index 1a6bb871ea..6dca390762 100644 --- a/log.go +++ b/log.go @@ -116,14 +116,14 @@ var subsystemLoggers = map[string]btclog.Logger{ // initLogRotator initializes the logging rotator to write logs to logFile and // create roll files in the same directory. It must be called before the // package-global log rotator variables are used. -func initLogRotator(logFile string) { +func initLogRotator(logFile string, MaxLogFileSize int, MaxLogFiles int) { logDir, _ := filepath.Split(logFile) err := os.MkdirAll(logDir, 0700) if err != nil { fmt.Fprintf(os.Stderr, "failed to create log directory: %v\n", err) os.Exit(1) } - r, err := rotator.New(logFile, 10*1024, false, 3) + r, err := rotator.New(logFile, int64(MaxLogFileSize*1024), false, MaxLogFiles) if err != nil { fmt.Fprintf(os.Stderr, "failed to create file rotator: %v\n", err) os.Exit(1) diff --git a/sample-lnd.conf b/sample-lnd.conf index 569e1050f6..21122fe6cd 100644 --- a/sample-lnd.conf +++ b/sample-lnd.conf @@ -12,6 +12,12 @@ ; Rotated logs are compressed in place. ; logdir=~/.lnd/logs +; Number of logfiles that the log rotation should keep. Setting it to 0 disables deletion of old log files. +; maxlogfiles=3 +; +; Max log file size in MB before it is rotated. +; maxlogfilesize=10 + ; Path to TLS certificate for lnd's RPC and REST services. ; tlscertpath=~/.lnd/tls.cert