From e097acaa8edf39ed2cc84349d44e20525c1b9e9b Mon Sep 17 00:00:00 2001 From: mzz2017 <2017@duck.com> Date: Sun, 5 Feb 2023 14:03:34 +0800 Subject: [PATCH] feat: support to set log level in config file --- cmd/run.go | 21 +++++++++++---------- config/config.go | 1 + example.dae | 5 ++++- pkg/logger/logger.go | 13 +++---------- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/cmd/run.go b/cmd/run.go index ae377bc..2195901 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -25,9 +25,16 @@ var ( if cfgFile == "" { logrus.Fatalln("Argument \"--config\" or \"-c\" is required but not provided.") } - logrus.SetLevel(logrus.DebugLevel) - log := logger.NewLogger(2, disableTimestamp) - if err := Run(log); err != nil { + + // Read config from --config cfgFile. + param, err := readConfig(cfgFile) + if err != nil { + logrus.Fatalln("readConfig: %w", err) + } + + log := logger.NewLogger(param.Global.LogLevel, disableTimestamp) + logrus.SetLevel(log.Level) + if err := Run(log, param); err != nil { logrus.Fatalln(err) } }, @@ -39,17 +46,11 @@ func init() { runCmd.PersistentFlags().BoolVarP(&disableTimestamp, "disable-timestamp", "", false, "disable timestamp") } -func Run(log *logrus.Logger) (err error) { +func Run(log *logrus.Logger, param *config.Params) (err error) { // Require "sudo" if necessary. internal.AutoSu() - // Read config from --config cfgFile. - param, err := readConfig(cfgFile) - if err != nil { - return fmt.Errorf("readConfig: %w", err) - } - // Resolve subscriptions to nodes. nodeList := make([]string, len(param.Node)) copy(nodeList, param.Node) diff --git a/config/config.go b/config/config.go index b8c332c..9513992 100644 --- a/config/config.go +++ b/config/config.go @@ -14,6 +14,7 @@ import ( type Global struct { TproxyPort uint16 `mapstructure:"tproxy_port" default:"12345"` + LogLevel string `mapstructure:"log_level" default:"info"` CheckUrl string `mapstructure:"check_url" default:"https://connectivitycheck.gstatic.com/generate_204"` CheckInterval time.Duration `mapstructure:"check_interval" default:"15s"` DnsUpstream string `mapstructure:"dns_upstream" default:"1.1.1.1:53"` diff --git a/example.dae b/example.dae index 22a3704..c726752 100644 --- a/example.dae +++ b/example.dae @@ -2,6 +2,9 @@ global { # tproxy port to listen. tproxy_port: 12345 + # Log level: error, warn, info, debug, trace + log_level: info + # Node connectivity check. check_url: 'https://connectivitycheck.gstatic.com/generate_204' check_interval: 30s @@ -63,7 +66,7 @@ group { # See routing.md for full examples. routing { - ip(geoip:private, 240.0.0.0/4, 'ff00::/8') -> direct # Put me at the first place. Or you know what you're doing. + ip(geoip:private, 224.0.0.0/3, 'ff00::/8') -> direct # Put it first unless you know what you're doing. # Write your rules below. # dae arms DNS rush-answer filter so we can use 8.8.8.8 regardless of DNS pollution. diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index 329ff04..cc10191 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -10,19 +10,12 @@ import ( prefixed "github.com/x-cray/logrus-prefixed-formatter" ) -func NewLogger(verbose int, disableTimestamp bool) *logrus.Logger { +func NewLogger(logLevel string, disableTimestamp bool) *logrus.Logger { log := logrus.New() - var level logrus.Level - switch verbose { - case 0: - level = logrus.WarnLevel - case 1: + level, err := logrus.ParseLevel(logLevel) + if err != nil { level = logrus.InfoLevel - case 2: - level = logrus.DebugLevel - default: - level = logrus.TraceLevel } log.SetLevel(level)