前置说明
go默认使用logrus,但是提供了接口,可以自定义日志实现,官网说明如下:
Set Logger
Go Client define the
Logger
interface for log output, user can specify implementation of private. in default, client uselogrus
.rlog.SetLogger(Logger)
适用场景
自定义日志格式、日志输出目录(采集、监控、统计分析等场景下使用)
示例
自定义日志实现
type myLogger struct {
flag string
}
func (l *myLogger) Info(msg string, fields map[string]interface{}) {
if msg == "" && len(fields) == 0 {
return
}
log.Println(l.flag, "[info]", msg)
}
func (l *myLogger) Warning(msg string, fields map[string]interface{}) {
if msg == "" && len(fields) == 0 {
return
}
log.Println(l.flag, "[warn]", msg)
}
func (l *myLogger) Error(msg string, fields map[string]interface{}) {
if msg == "" && len(fields) == 0 {
return
}
log.Println(l.flag, "[error]", msg)
}
func (l *myLogger) Fatal(msg string, fields map[string]interface{}) {
if msg == "" && len(fields) == 0 {
return
}
log.Fatal(l.flag, "[fatal]", msg)
}
启动的时候设置日志实现
func main() {
// 设置日志,默认使用logrus
rlog.SetLogger(&myLogger{flag: "xuxd"})
// 其它逻辑
...
}
运行结果如下:
设置日志级别
go client 默认打印info级别日志,我上图打印的有debug,是因为我设置日志级别为debug,只用设置环境变量:ROCKETMQ_GO_LOG_LEVEL=debug
我用的goland,示例如下:
日志源码文件
源码文件名:log.go
type Logger interface {
Debug(msg string, fields map[string]interface{})
Info(msg string, fields map[string]interface{})
Warning(msg string, fields map[string]interface{})
Error(msg string, fields map[string]interface{})
Fatal(msg string, fields map[string]interface{})
}
func init() {
r := &defaultLogger{
logger: logrus.New(),
}
level := os.Getenv("ROCKETMQ_GO_LOG_LEVEL")
switch strings.ToLower(level) {
case "debug":
r.logger.SetLevel(logrus.DebugLevel)
case "warn":
r.logger.SetLevel(logrus.WarnLevel)
case "error":
r.logger.SetLevel(logrus.ErrorLevel)
default:
r.logger.SetLevel(logrus.InfoLevel)
}
rLog = r
}