gookit / slog

📑 Lightweight, configurable, extensible logging library written in Go. Support multi level, multi outputs and built-in multi file logger, buffers, clean, rotate-file handling.一个易于使用的,轻量级、可配置、可扩展的日志库。支持多个级别,输出到多文件;内置文件日志处理、自动切割、清理、压缩等增强功能
https://pkg.go.dev/github.com/gookit/slog
MIT License
383 stars 24 forks source link

需要一个动态设置日志级别的接口 #130

Open konglinglong opened 9 months ago

konglinglong commented 9 months ago

在程序运行过程,有时候为了定位问题,有动态设置日志级别的需求,但没有找到方便友好的设置接口。 slog.SetLogLevel(lvl)只在std logger上生效。 请问有没有方便友好的动态设置日志级别接口?

package logger

import (
    "github.com/gookit/slog"
    "github.com/gookit/slog/handler"
    "github.com/gookit/slog/rotatefile"
)

var (
    Log1   *slog.Logger
    Log2   *slog.Logger
    AppLog *slog.Record
    CfgLog *slog.Record
)

func init() {
    logTemplate := "[{{datetime}}] [{{level}}] {{message}}\n"

    formatter := slog.NewTextFormatter()
    formatter.TimeFormat = "2006-01-02 15:04:05.000"
    formatter.SetTemplate(logTemplate)
    slog.SetFormatter(formatter)

    h1, _ := handler.NewEmptyConfig(
        handler.WithLogfile("/var/log/rnxt/nas/nas.log"),
        handler.WithRotateTime(rotatefile.EveryDay),
        handler.WithBackupNum(10),
        handler.WithMaxSize(1024*1024*20),
        handler.WithLogLevels(slog.NormalLevels),
    ).CreateHandler()
    h1.SetFormatter(formatter)

    h2 := handler.NewConsoleHandler(slog.AllLevels)
    h2.SetFormatter(formatter)

    Log1 = slog.NewWithHandlers(h1, h2)

    AppLog = Log1.WithFields(slog.M{
        "component": "APP",
    })
    CfgLog = Log1.WithFields(slog.M{
        "component": "CFG",
    })
}

func SetLogLevel(level string) {
    lvl, err := slog.Name2Level(level)
    if err != nil {
        AppLog.Fatalln("Failed to parse log level:", err)
    }
    slog.SetLogLevel(lvl)
}