Skip to content

用于logrus的多路输出器,每个Logger可以向多个Writer以不同的Fromatter和不同的Level输出日志

License

Notifications You must be signed in to change notification settings

Gedoy9793/logrus-multihandler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logrus-multihandler

用于logrus的多路输出器,每个Logger可以向多个Writer以不同的Fromatter和不同的Level输出日志

介绍

MultiHandler结构实现了Formatter接口,可使用SetFormatter配置进logrus.Logger

使用NewMultiHandler函数创建该接口时,传入任意使用NewHandler函数创建的Handler结构,这些结构相当于一个个logrus.Logger,当在原本的logrus.Logger上写入时,将会把同样的Entry分发到这些Handler,以配置的参数分别解析并写入。

在原本的logrus.Logger上写入时,MultiHandler作为一个Formatter,会返回空字节数组,即不再向本来的LoggerOut写入日志

示例

该示例得到一个logger,该logger可以同时向标准输出和文件写入日志,并且标准输出中的日志为彩色,文件中的日志没有彩色。

package main

import (
	nested "github.com/antonfisher/nested-logrus-formatter"
	"github.com/gedoy9793/logrus-multihandler"
	"github.com/lestrrat-go/file-rotatelogs"
	"github.com/sirupsen/logrus"
	"os"
	"time"
)

var logPath = "/var/log/examle"

func main() {
	stdLogFormatter := &nested.Formatter{
		TimestampFormat: time.RFC3339,
	}
	fileLogFormatter := &nested.Formatter{
		TimestampFormat: time.RFC3339,
		NoColors:        true,
	}

	logFile, err := rotatelogs.New(
		logPath+".%Y%m%d",
		rotatelogs.WithRotationTime(time.Hour*time.Duration(24)),
		rotatelogs.WithLinkName(logPath),
	)

	if err != nil {
		panic(err)
	}

	multiFormatter := multihandler.NewMultiHandler(multihandler.NewHandler(
		stdLogFormatter,
		logrus.DebugLevel,
		os.Stdout,
		&multihandler.HandlerConfig{},
	), multihandler.NewHandler(
		fileLogFormatter,
		logrus.DebugLevel,
		logFile,
		&multihandler.HandlerConfig{},
	))
	
	logger := logrus.New()
	logger.SetFormatter(multiFormatter)
}

About

用于logrus的多路输出器,每个Logger可以向多个Writer以不同的Fromatter和不同的Level输出日志

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages