mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 01:43:16 +01:00
3adbdbb39a
This is not a breaking change since the logcompressor config option has not been released yet.
113 lines
2.9 KiB
Go
113 lines
2.9 KiB
Go
package build
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/btcsuite/btclog/v2"
|
|
)
|
|
|
|
// LogType is an indicating the type of logging specified by the build flag.
|
|
type LogType byte
|
|
|
|
const (
|
|
// LogTypeNone indicates no logging.
|
|
LogTypeNone LogType = iota
|
|
|
|
// LogTypeStdOut all logging is written directly to stdout.
|
|
LogTypeStdOut
|
|
|
|
// LogTypeDefault logs to both stdout and a given io.PipeWriter.
|
|
LogTypeDefault
|
|
)
|
|
|
|
// String returns a human readable identifier for the logging type.
|
|
func (t LogType) String() string {
|
|
switch t {
|
|
case LogTypeNone:
|
|
return "none"
|
|
case LogTypeStdOut:
|
|
return "stdout"
|
|
case LogTypeDefault:
|
|
return "default"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
// Declare the supported log file compressors as exported consts for easier use
|
|
// from other projects.
|
|
const (
|
|
// Gzip is the default compressor.
|
|
Gzip = "gzip"
|
|
|
|
// Zstd is a modern compressor that compresses better than Gzip, in less
|
|
// time.
|
|
Zstd = "zstd"
|
|
)
|
|
|
|
// logCompressors maps the identifier for each supported compression algorithm
|
|
// to the extension used for the compressed log files.
|
|
var logCompressors = map[string]string{
|
|
Gzip: "gz",
|
|
Zstd: "zst",
|
|
}
|
|
|
|
// SupportedLogCompressor returns whether or not logCompressor is a supported
|
|
// compression algorithm for log files.
|
|
func SupportedLogCompressor(logCompressor string) bool {
|
|
_, ok := logCompressors[logCompressor]
|
|
|
|
return ok
|
|
}
|
|
|
|
// NewSubLogger constructs a new subsystem log from the current LogWriter
|
|
// implementation. This is primarily intended for use with stdlog, as the actual
|
|
// writer is shared amongst all instantiations.
|
|
func NewSubLogger(subsystem string,
|
|
genSubLogger func(string) btclog.Logger) btclog.Logger {
|
|
|
|
switch Deployment {
|
|
|
|
// For production builds, generate a new subsystem logger from the
|
|
// primary log backend. If no function is provided, logging will be
|
|
// disabled.
|
|
case Production:
|
|
if genSubLogger != nil {
|
|
return genSubLogger(subsystem)
|
|
}
|
|
|
|
// For development builds, we must handle two distinct types of logging:
|
|
// unit tests and running the live daemon, e.g. for integration testing.
|
|
case Development:
|
|
switch LoggingType {
|
|
|
|
// Default logging is used when running the standalone daemon.
|
|
// We'll use the optional sublogger constructor to mimic the
|
|
// production behavior.
|
|
case LogTypeDefault:
|
|
if genSubLogger != nil {
|
|
return genSubLogger(subsystem)
|
|
}
|
|
|
|
// Logging to stdout is used in unit tests. It is not important
|
|
// that they share the same backend, since all output is written
|
|
// to std out.
|
|
case LogTypeStdOut:
|
|
backend := btclog.NewDefaultHandler(os.Stdout)
|
|
logger := btclog.NewSLogger(
|
|
backend.SubSystem(subsystem),
|
|
)
|
|
|
|
// Set the logging level of the stdout logger to use the
|
|
// configured logging level specified by build flags.
|
|
level, _ := btclog.LevelFromString(LogLevel)
|
|
logger.SetLevel(level)
|
|
|
|
return logger
|
|
}
|
|
}
|
|
|
|
// For any other configurations, we'll disable logging.
|
|
return btclog.Disabled
|
|
}
|