diff --git a/cmd/start/start.go b/cmd/start/start.go index de7aa02..015d867 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -56,22 +56,6 @@ var StartCmd = &cobra.Command{ } } - logger.Log.Info("进程列表:") - for i, p := range procs { - if i >= 10 { - logger.Log.Info("... (仅显示前10个进程)") - break - } - logger.Log.Info( - "进程信息", - zap.Int32("pid", p.PID), - zap.String("name", p.Name), - zap.String("path", p.Path), - zap.String("cmdline", p.Cmdline), - zap.Stringer("data", p), - ) - } - // ====== 文件扫描和存储 ====== logger.Log.Info("正在扫描文件系统...") diff --git a/config.yaml b/config.yaml index 43d90e0..51283b8 100644 --- a/config.yaml +++ b/config.yaml @@ -2,6 +2,10 @@ server: host: "127.0.0.1" port: 8080 +log: + level: "info" + # level: "debug" + audit: enabled: true server: "192.168.1.100" diff --git a/internal/config/config.go b/internal/config/config.go index e3f900f..ed2a306 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1,11 +1,16 @@ package config type Config struct { + Log LogConfig `yaml:"log"` Audit AuditConfig `yaml:"audit"` Scanner ScannerConfig `yaml:"scanner"` Storage StorageConfig `yaml:"storage"` } +type LogConfig struct { + Level string `yaml:"level"` +} + type AuditConfig struct { Enabled bool `yaml:"enabled"` Server string `yaml:"server"` diff --git a/main.go b/main.go index 6026231..9ca3782 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "os" "sysmonitord/cmd/start" "sysmonitord/cmd/version" + "sysmonitord/internal/config" "sysmonitord/pkg/logger" "github.com/spf13/cobra" @@ -14,6 +15,14 @@ func main() { logger.InitLogger() defer logger.Sync() + cfg, err := config.LoadConfig("./config.yaml") + if err != nil { + logger.Log.Error("加载配置文件失败", zap.Error(err)) + os.Exit(1) + } else { + logger.SetLogLevel(cfg.Log.Level) + } + var rootCmd = &cobra.Command{ Use: "sysmonitord", Short: "Sysmonitord 是一个 Linux 系统安全监控工具", diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index b0cfcc3..b9afada 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -7,9 +7,14 @@ import ( "go.uber.org/zap/zapcore" ) -var Log *zap.Logger +var ( + Log *zap.Logger + atom zap.AtomicLevel +) func InitLogger() { + atom = zap.NewAtomicLevelAt(zapcore.InfoLevel) + encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", @@ -18,22 +23,35 @@ func InitLogger() { MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, - EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeLevel: zapcore.LowercaseColorLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } - // Debug consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig) core := zapcore.NewTee( - zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), zap.DebugLevel), + zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), atom), ) - Log = zap.New(core, zap.AddCaller()) } +func SetLogLevel(levelStr string) { + if atom == (zap.AtomicLevel{}) { + return + } + + var level zapcore.Level + if err := level.UnmarshalText([]byte(levelStr)); err != nil { + Log.Warn("无效的日志级别,使用默认级别 info", zap.String("输入级别", levelStr)) + atom.SetLevel(zapcore.InfoLevel) + } else { + atom.SetLevel(level) + } + +} + func Sync() { if Log != nil { _ = Log.Sync()