[logger] 支持从配置中读取日志等级

This commit is contained in:
wuko233 2026-04-02 19:21:55 +08:00
parent 3b105251bb
commit e3093c1b73
5 changed files with 41 additions and 21 deletions

View File

@ -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("正在扫描文件系统...")

View File

@ -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"

View File

@ -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"`

View File

@ -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 系统安全监控工具",

View File

@ -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()