Golang中如何让Logrus与Viper协同工作
Golang中如何让Logrus与Viper协同工作 我正在尝试让 logrus 从 viper 读取配置。
使用 logrus 中推荐的库如下。
heirko/go-contrib
用于日志配置的助手,带有 fangs 的属性的 Mixin - heirko/go-contrib
我尝试以分组的方式设置我的配置。 例如在 yml 格式中,将 logging 及其所有属性放在一起。
我不确定如何使其工作,因为示例看起来似乎不可能实现。
heirko/go-contrib/blob/master/logrusHelper_test/logrusHelper_test.go
package logrusHelper_Test
// there is a bug in go < 1.9 with test only package and name, bug on namespace, we need to break recognition...
import (
"testing"
"fmt"
"os"
"github.com/heirko/go-contrib/logrusHelper"
_ "github.com/heralight/logrus_mate/hooks/file"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
"time"
. "github.com/smartystreets/goconvey/convey"
)
func initLogger() {
此文件已被截断。显示原文
我的属性文件: app: port: 80 name: testappsvcliv db: enable: “N” driver: pgx url: postgres://postgres:postpass@localhost/pqgotest max-open: 5 max-idle: 0 max-timeout: 100ms logging:
- level: debug*
更多关于Golang中如何让Logrus与Viper协同工作的实战教程也可以访问 https://www.itying.com/category-94-b0.html
heirko/go-contrib
日志配置助手,带尖牙属性的Mixin - heirko/go-contrib
由于该仓库没有分支创建权限,我添加了一个包含解决方案的议题追踪器。 或者,你也可以在自己的代码库中编写这个函数,而无需等待它被库吸收。
更多关于Golang中如何让Logrus与Viper协同工作的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用 logrusHelper 可以让 Logrus 与 Viper 协同工作。以下是具体实现方式:
首先安装依赖:
go get github.com/heirko/go-contrib/logrusHelper
创建配置文件 config.yaml:
app:
port: 80
name: testappsvcliv
logging:
level: debug
formatter:
name: text
options:
force-colors: true
full-timestamp: true
hooks:
- name: file
options:
filename: app.log
maxsize: 10485760
maxbackups: 3
maxage: 28
主程序实现:
package main
import (
"fmt"
"os"
"github.com/heirko/go-contrib/logrusHelper"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
_ "github.com/heralight/logrus_mate/hooks/file"
)
func main() {
// 初始化 Viper
v := viper.New()
v.SetConfigName("config")
v.AddConfigPath(".")
v.SetConfigType("yaml")
// 读取配置
if err := v.ReadInConfig(); err != nil {
fmt.Printf("Error reading config: %v\n", err)
os.Exit(1)
}
// 创建 Logrus 实例
log := logrus.New()
// 使用 logrusHelper 从 Viper 配置 Logrus
config := v.Sub("logging")
if config == nil {
fmt.Println("logging configuration not found")
os.Exit(1)
}
err := logrusHelper.SetConfig(log, config)
if err != nil {
fmt.Printf("Error setting logrus config: %v\n", err)
os.Exit(1)
}
// 测试日志输出
log.Debug("Debug level message")
log.Info("Info level message")
log.Warn("Warn level message")
log.Error("Error level message")
// 验证配置
fmt.Printf("Current log level: %v\n", log.GetLevel())
}
使用环境变量覆盖配置:
// 支持环境变量
v.AutomaticEnv()
v.SetEnvPrefix("APP")
v.BindEnv("logging.level")
// 从环境变量读取日志级别
if envLevel := v.GetString("logging.level"); envLevel != "" {
level, err := logrus.ParseLevel(envLevel)
if err == nil {
log.SetLevel(level)
}
}
程序化配置示例:
// 如果需要程序化配置
v.SetDefault("logging.level", "info")
v.SetDefault("logging.formatter.name", "json")
v.SetDefault("logging.formatter.options.timestampFormat", "2006-01-02 15:04:05")
// 重新应用配置
err = logrusHelper.SetConfig(log, v.Sub("logging"))
if err != nil {
log.WithError(err).Fatal("Failed to reload logrus config")
}
这样配置后,Logrus 会从 Viper 读取 logging 部分的配置,包括日志级别、格式化和钩子设置。

