代码拉取完成,页面将自动刷新
//go:build !windows
// +build !windows
/*
* @Author: 杨小灿jian308@qq.com
* @Date: 2023-05-12 16:24:48
* @LastEditors: 杨小灿jian308@qq.com
* @LastEditTime: 2023-08-30 09:16:32
*/
package clog
import (
"io"
"os"
"strconv"
"gitee.com/jieyang/go/cjson"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"
)
//日志需求
//开发模式全部打印
//发布模式可选不同等级输出文件跟控制台输出
// 默认直接可用
var logger zerolog.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "2006-01-02 15:04:05.000", NoColor: true}).With().Caller().Logger()
var lumberJackLogger *lumberjack.Logger
// 开发模式直接用默认的logger即可
func NewDevelopment() {
logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "2006-01-02 15:04:05.000", NoColor: true}).With().Caller().Logger()
}
type clogLevelWriter struct {
io.Writer
Level zerolog.Level
}
func (w clogLevelWriter) WriteLevel(level zerolog.Level, p []byte) (int, error) {
if level >= w.Level {
return w.Write(p)
}
return len(p), nil
}
// 发布模式混合显示
// filename 日志文件地址
// 控制台输出日志等级
// 日志文件输出日志等级
// config按顺序看代码
func NewRelease(filename string, consoleLvInt, logfileLvInt int, config ...int) {
zerolog.InterfaceMarshalFunc = cjson.Marshal
zerolog.TimeFieldFormat = "2006-01-02 15:04:05.000" //精确到微秒
zerolog.CallerMarshalFunc = func(pc uintptr, file string, line int) string {
short := file
for i := len(file) - 1; i > 0; i-- {
if file[i] == '/' {
short = file[i+1:]
break
}
}
file = short
return file + ":" + strconv.Itoa(line)
}
consoleLv := zerolog.Level(consoleLvInt)
logfileLv := zerolog.Level(logfileLvInt)
// 使用 lumberjack 实现 log rotate
MaxSize := 5
MaxBackups := 30
MaxAge := 1
LocalTime := false
Compress := false
if config != nil {
if len(config) > 0 {
MaxSize = config[0]
}
if len(config) > 1 {
MaxBackups = config[1]
}
if len(config) > 2 {
MaxAge = config[2]
}
if len(config) > 3 {
if config[3] > 0 {
LocalTime = true
}
}
if len(config) > 4 {
if config[4] > 0 {
Compress = true
}
}
}
consoleWriter := clogLevelWriter{
Writer: zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "01-02 15:04:05", NoColor: true},
Level: consoleLv,
}
if lumberJackLogger != nil {
lumberJackLogger.Close()
}
lumberJackLogger = &lumberjack.Logger{
Filename: filename,
MaxSize: MaxSize, // 单个文件最大M
MaxBackups: MaxBackups, // 多于 x 个日志文件后,清理较旧的日志
MaxAge: MaxAge, // 一天一切割
LocalTime: LocalTime,
Compress: Compress,
}
fileWriteSyncer := clogLevelWriter{
Writer: lumberJackLogger,
Level: logfileLv,
}
multi := zerolog.MultiLevelWriter(fileWriteSyncer, consoleWriter)
logger = zerolog.New(multi).With().Timestamp().Caller().Logger()
}
func Info() *zerolog.Event {
return logger.Info()
}
func Debug() *zerolog.Event {
return logger.Debug()
}
func Error() *zerolog.Event {
return logger.Error()
}
func Warn() *zerolog.Event {
return logger.Warn()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。