mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-10-14 00:59:33 +00:00
[NOD-410] Add log level CLI argument to API server (#503)
* [NOD-410] Add log level CLI argument to API server * [NOD-410] Add comments * [NOD-410] Remove pre-allocation of one item
This commit is contained in:
parent
3dcf8d88b8
commit
2402bae1ff
@ -30,6 +30,7 @@ func ActiveConfig() *Config {
|
|||||||
// Config defines the configuration options for the API server.
|
// Config defines the configuration options for the API server.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
LogDir string `long:"logdir" description:"Directory to log output."`
|
LogDir string `long:"logdir" description:"Directory to log output."`
|
||||||
|
DebugLevel string `short:"d" long:"debuglevel" description:"Set log level {trace, debug, info, warn, error, critical}"`
|
||||||
RPCUser string `short:"u" long:"rpcuser" description:"RPC username"`
|
RPCUser string `short:"u" long:"rpcuser" description:"RPC username"`
|
||||||
RPCPassword string `short:"P" long:"rpcpass" default-mask:"-" description:"RPC password"`
|
RPCPassword string `short:"P" long:"rpcpass" default-mask:"-" description:"RPC password"`
|
||||||
RPCServer string `short:"s" long:"rpcserver" description:"RPC server to connect to"`
|
RPCServer string `short:"s" long:"rpcserver" description:"RPC server to connect to"`
|
||||||
@ -48,7 +49,7 @@ type Config struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parse parses the CLI arguments and returns a config struct.
|
// Parse parses the CLI arguments and returns a config struct.
|
||||||
func Parse() (*Config, error) {
|
func Parse() error {
|
||||||
activeConfig = &Config{
|
activeConfig = &Config{
|
||||||
LogDir: defaultLogDir,
|
LogDir: defaultLogDir,
|
||||||
DBAddress: defaultDBAddress,
|
DBAddress: defaultDBAddress,
|
||||||
@ -57,42 +58,49 @@ func Parse() (*Config, error) {
|
|||||||
parser := flags.NewParser(activeConfig, flags.PrintErrors|flags.HelpFlag)
|
parser := flags.NewParser(activeConfig, flags.PrintErrors|flags.HelpFlag)
|
||||||
_, err := parser.Parse()
|
_, err := parser.Parse()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !activeConfig.Migrate {
|
if !activeConfig.Migrate {
|
||||||
if activeConfig.RPCUser == "" {
|
if activeConfig.RPCUser == "" {
|
||||||
return nil, errors.New("--rpcuser is required if --migrate flag is not used")
|
return errors.New("--rpcuser is required if --migrate flag is not used")
|
||||||
}
|
}
|
||||||
if activeConfig.RPCPassword == "" {
|
if activeConfig.RPCPassword == "" {
|
||||||
return nil, errors.New("--rpcpass is required if --migrate flag is not used")
|
return errors.New("--rpcpass is required if --migrate flag is not used")
|
||||||
}
|
}
|
||||||
if activeConfig.RPCServer == "" {
|
if activeConfig.RPCServer == "" {
|
||||||
return nil, errors.New("--rpcserver is required if --migrate flag is not used")
|
return errors.New("--rpcserver is required if --migrate flag is not used")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if activeConfig.RPCCert == "" && !activeConfig.DisableTLS {
|
if activeConfig.RPCCert == "" && !activeConfig.DisableTLS {
|
||||||
return nil, errors.New("--notls has to be disabled if --cert is used")
|
return errors.New("--notls has to be disabled if --cert is used")
|
||||||
}
|
}
|
||||||
|
|
||||||
if activeConfig.RPCCert != "" && activeConfig.DisableTLS {
|
if activeConfig.RPCCert != "" && activeConfig.DisableTLS {
|
||||||
return nil, errors.New("--cert should be omitted if --notls is used")
|
return errors.New("--cert should be omitted if --notls is used")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeConfig.MQTTBrokerAddress != "" || activeConfig.MQTTUser != "" || activeConfig.MQTTPassword != "") &&
|
if (activeConfig.MQTTBrokerAddress != "" || activeConfig.MQTTUser != "" || activeConfig.MQTTPassword != "") &&
|
||||||
(activeConfig.MQTTBrokerAddress == "" || activeConfig.MQTTUser == "" || activeConfig.MQTTPassword == "") {
|
(activeConfig.MQTTBrokerAddress == "" || activeConfig.MQTTUser == "" || activeConfig.MQTTPassword == "") {
|
||||||
return nil, errors.New("--mqttaddress, --mqttuser, and --mqttpass must be passed all together")
|
return errors.New("--mqttaddress, --mqttuser, and --mqttpass must be passed all together")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = activeConfig.ResolveNetwork(parser)
|
err = activeConfig.ResolveNetwork(parser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
logFile := filepath.Join(activeConfig.LogDir, defaultLogFilename)
|
logFile := filepath.Join(activeConfig.LogDir, defaultLogFilename)
|
||||||
errLogFile := filepath.Join(activeConfig.LogDir, defaultErrLogFilename)
|
errLogFile := filepath.Join(activeConfig.LogDir, defaultErrLogFilename)
|
||||||
logger.InitLog(logFile, errLogFile)
|
logger.InitLog(logFile, errLogFile)
|
||||||
|
|
||||||
return activeConfig, nil
|
if activeConfig.DebugLevel != "" {
|
||||||
|
err := logger.SetLogLevels(activeConfig.DebugLevel)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,6 @@ import "github.com/daglabs/btcd/util/panics"
|
|||||||
import "github.com/daglabs/btcd/apiserver/logger"
|
import "github.com/daglabs/btcd/apiserver/logger"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
log = logger.BackendLog.Logger("DTBS")
|
log = logger.Logger("DTBS")
|
||||||
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
||||||
)
|
)
|
||||||
|
@ -6,6 +6,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
log = logger.BackendLog.Logger("APIS")
|
log = logger.Logger("APIS")
|
||||||
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
||||||
)
|
)
|
||||||
|
@ -3,11 +3,13 @@ package logger
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/daglabs/btcd/logs"
|
"github.com/daglabs/btcd/logs"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BackendLog is the logging backend used to create all subsystem loggers.
|
// BackendLog is the logging backend used to create all subsystem loggers.
|
||||||
var BackendLog = logs.NewBackend()
|
var BackendLog = logs.NewBackend()
|
||||||
|
var loggers []logs.Logger
|
||||||
|
|
||||||
// InitLog attaches log file and error log file to the backend log.
|
// InitLog attaches log file and error log file to the backend log.
|
||||||
func InitLog(logFile, errLogFile string) {
|
func InitLog(logFile, errLogFile string) {
|
||||||
@ -22,3 +24,24 @@ func InitLog(logFile, errLogFile string) {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Logger returns a new logger for a particular subsystem that writes to
|
||||||
|
// BackendLog, and add it to a slice so it will be possible to access it
|
||||||
|
// later and change its log level
|
||||||
|
func Logger(subsystemTag string) logs.Logger {
|
||||||
|
logger := BackendLog.Logger(subsystemTag)
|
||||||
|
loggers = append(loggers, logger)
|
||||||
|
return logger
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLogLevels sets the logging level for all of the subsystems in the API server.
|
||||||
|
func SetLogLevels(level string) error {
|
||||||
|
lvl, ok := logs.LevelFromString(level)
|
||||||
|
if !ok {
|
||||||
|
return errors.Errorf("Invalid log level %s", level)
|
||||||
|
}
|
||||||
|
for _, logger := range loggers {
|
||||||
|
logger.SetLevel(lvl)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
func main() {
|
func main() {
|
||||||
defer panics.HandlePanic(log, logger.BackendLog, nil)
|
defer panics.HandlePanic(log, logger.BackendLog, nil)
|
||||||
|
|
||||||
cfg, err := config.Parse()
|
err := config.Parse()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errString := fmt.Sprintf("Error parsing command-line arguments: %s", err)
|
errString := fmt.Sprintf("Error parsing command-line arguments: %s", err)
|
||||||
_, fErr := fmt.Fprintf(os.Stderr, errString)
|
_, fErr := fmt.Fprintf(os.Stderr, errString)
|
||||||
@ -31,7 +31,7 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Migrate {
|
if config.ActiveConfig().Migrate {
|
||||||
err := database.Migrate()
|
err := database.Migrate()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(errors.Errorf("Error migrating database: %s", err))
|
panic(errors.Errorf("Error migrating database: %s", err))
|
||||||
|
@ -4,6 +4,6 @@ import "github.com/daglabs/btcd/util/panics"
|
|||||||
import "github.com/daglabs/btcd/apiserver/logger"
|
import "github.com/daglabs/btcd/apiserver/logger"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
log = logger.BackendLog.Logger("MQTT")
|
log = logger.Logger("MQTT")
|
||||||
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
||||||
)
|
)
|
||||||
|
@ -4,6 +4,6 @@ import "github.com/daglabs/btcd/util/panics"
|
|||||||
import "github.com/daglabs/btcd/apiserver/logger"
|
import "github.com/daglabs/btcd/apiserver/logger"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
log = logger.BackendLog.Logger("REST")
|
log = logger.Logger("REST")
|
||||||
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
spawn = panics.GoroutineWrapperFunc(log, logger.BackendLog)
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user