feat: 优化升级日志组织
This commit is contained in:
126
config.go
126
config.go
@@ -14,7 +14,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/consts"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
@@ -27,43 +26,27 @@ const (
|
||||
)
|
||||
|
||||
// RotateLogConfig 日志切割的配置
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:08 下午 2021/1/2
|
||||
type RotateLogConfig struct {
|
||||
TimeIntervalType consts.LogSplit `json:"time_interval_type" yaml:"time_interval_type"` // 日志切割的时间间隔类型 0 - 小时 1 - 天 2 - 月 3 - 年
|
||||
TimeInterval time.Duration `json:"time_interval" yaml:"time_interval"` // 日志切割的时间间隔
|
||||
LogPath string `json:"log_path" yaml:"log_path"` // 存储日志的路径
|
||||
LogFileName string `json:"log_file_name" yaml:"log_file_name"` // 日志文件名
|
||||
DivisionChar string `json:"division_char" yaml:"division_char"` // 日志文件拼时间分隔符
|
||||
FullLogFormat string `json:"full_log_format" yaml:"full_log_format"` // 完整的日志格式
|
||||
MaxAge time.Duration `json:"max_age" yaml:"max_age"` // 日志最长保存时间
|
||||
TimeIntervalType LogSplit `json:"time_interval_type" yaml:"time_interval_type"` // 日志切割的时间间隔类型 0 - 小时 1 - 天 2 - 月 3 - 年
|
||||
TimeInterval time.Duration `json:"time_interval" yaml:"time_interval"` // 日志切割的时间间隔
|
||||
LogPath string `json:"log_path" yaml:"log_path"` // 存储日志的路径
|
||||
LogFileName string `json:"log_file_name" yaml:"log_file_name"` // 日志文件名
|
||||
DivisionChar string `json:"division_char" yaml:"division_char"` // 日志文件拼时间分隔符
|
||||
FullLogFormat string `json:"full_log_format" yaml:"full_log_format"` // 完整的日志格式
|
||||
MaxAge int64 `json:"max_age" yaml:"max_age"` // 日志最长保存时间, 单位: s
|
||||
}
|
||||
|
||||
// SetRotateLogConfigFunc 设置日志切割的选项
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:13 下午 2021/1/2
|
||||
type SetRotateLogConfigFunc func(rlc *RotateLogConfig)
|
||||
|
||||
// WithTimeIntervalType 设置日志切割时间间隔
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:34 下午 2021/1/2
|
||||
func WithTimeIntervalType(timeIntervalType consts.LogSplit) SetRotateLogConfigFunc {
|
||||
func WithTimeIntervalType(timeIntervalType LogSplit) SetRotateLogConfigFunc {
|
||||
return func(rlc *RotateLogConfig) {
|
||||
rlc.TimeIntervalType = timeIntervalType
|
||||
}
|
||||
}
|
||||
|
||||
// WithDivisionChar 设置分隔符
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:49 下午 2021/1/2
|
||||
func WithDivisionChar(divisionChar string) SetRotateLogConfigFunc {
|
||||
return func(rlc *RotateLogConfig) {
|
||||
rlc.DivisionChar = divisionChar
|
||||
@@ -71,27 +54,22 @@ func WithDivisionChar(divisionChar string) SetRotateLogConfigFunc {
|
||||
}
|
||||
|
||||
// WithMaxAge 设置日志保存时间
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 5:03 下午 2021/1/2
|
||||
func WithMaxAge(maxAge time.Duration) SetRotateLogConfigFunc {
|
||||
func WithMaxAge(maxAge int64) SetRotateLogConfigFunc {
|
||||
return func(rlc *RotateLogConfig) {
|
||||
if maxAge <= 0 {
|
||||
maxAge = 3 * 24 * 3600 // 默认3天
|
||||
}
|
||||
rlc.MaxAge = maxAge
|
||||
}
|
||||
}
|
||||
|
||||
// NewRotateLogConfig 生成日志切割的配置
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 3:53 下午 2021/1/2
|
||||
func NewRotateLogConfig(logPath string, logFile string, option ...SetRotateLogConfigFunc) (*RotateLogConfig, error) {
|
||||
if len(logPath) == 0 || len(logFile) == 0 {
|
||||
return nil, LogPathEmptyError()
|
||||
}
|
||||
c := &RotateLogConfig{
|
||||
TimeIntervalType: consts.LogSplitHour,
|
||||
TimeIntervalType: LogSplitHour,
|
||||
LogPath: logPath,
|
||||
LogFileName: logFile,
|
||||
DivisionChar: "",
|
||||
@@ -109,10 +87,6 @@ func NewRotateLogConfig(logPath string, logFile string, option ...SetRotateLogCo
|
||||
}
|
||||
|
||||
// formatConfig 格式化配置
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 4:23 下午 2021/1/2
|
||||
func formatConfig(c *RotateLogConfig) error {
|
||||
|
||||
if len(c.DivisionChar) == 0 {
|
||||
@@ -132,23 +106,23 @@ func formatConfig(c *RotateLogConfig) error {
|
||||
}
|
||||
}
|
||||
|
||||
c.TimeIntervalType = consts.LogSplit(strings.ToUpper(c.TimeIntervalType.String()))
|
||||
c.TimeIntervalType = LogSplit(strings.ToUpper(c.TimeIntervalType.String()))
|
||||
if !c.TimeIntervalType.IsValid() {
|
||||
// 非法的日志切割规则,默认按天切
|
||||
c.TimeIntervalType = consts.LogSplitDay
|
||||
c.TimeIntervalType = LogSplitDay
|
||||
}
|
||||
// 生成格式化日志全路径
|
||||
switch c.TimeIntervalType {
|
||||
case consts.LogSplitHour:
|
||||
case LogSplitHour:
|
||||
c.TimeInterval = time.Hour
|
||||
c.FullLogFormat = c.LogPath + "%Y" + c.DivisionChar + "%m" + c.DivisionChar + "%d" + c.DivisionChar + "%H" + c.DivisionChar + c.LogFileName
|
||||
case consts.LogSplitDay:
|
||||
case LogSplitDay:
|
||||
c.TimeInterval = time.Hour * 24
|
||||
c.FullLogFormat = c.LogPath + "%Y" + c.DivisionChar + "%m" + c.DivisionChar + "%d" + c.DivisionChar + c.LogFileName
|
||||
case consts.LogSplitMonth:
|
||||
case LogSplitMonth:
|
||||
c.TimeInterval = time.Hour * 24 * 30
|
||||
c.FullLogFormat = c.LogPath + "%Y" + c.DivisionChar + "%m" + c.DivisionChar + c.LogFileName
|
||||
case consts.LogSplitYear:
|
||||
case LogSplitYear:
|
||||
c.TimeInterval = time.Hour * 24 * 365
|
||||
c.FullLogFormat = c.LogPath + "%Y" + c.DivisionChar + c.LogFileName
|
||||
default:
|
||||
@@ -176,51 +150,31 @@ const (
|
||||
)
|
||||
|
||||
// defaultTimeEncoder 默认的时间处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:53 下午 2021/1/2
|
||||
func defaultTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
sec := t.UnixNano() / 1e9
|
||||
ms := t.UnixNano() / 1e6 % 1e3
|
||||
ns := t.UnixNano() % 1e6
|
||||
enc.AppendString(time.Unix(sec, ns).Format("2006-01-02 15:04:05") + "." + fmt.Sprintf("%v", ms) + "+" + fmt.Sprintf("%v", ns))
|
||||
enc.AppendString(time.Unix(sec, ns).Format(time.DateTime) + "." + fmt.Sprintf("%v", ms) + "+" + fmt.Sprintf("%v", ns))
|
||||
}
|
||||
|
||||
// SecondTimeEncoder 秒级时间戳格式化
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:34 下午 2021/1/3
|
||||
func SecondTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format("2006-01-02 15:04:05"))
|
||||
enc.AppendString(t.Format(time.DateTime))
|
||||
}
|
||||
|
||||
// MsTimeEncoder 毫秒时间格式化方法
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 8:35 下午 2021/1/3
|
||||
func MsTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
sec := t.UnixNano() / 1e9
|
||||
ms := t.UnixNano() / 1e6 % 1e3
|
||||
enc.AppendString(time.Unix(sec, 0).Format("2006-01-02 15:04:05") + "." + fmt.Sprintf("%v", ms))
|
||||
enc.AppendString(time.Unix(sec, 0).Format(time.DateTime) + "." + fmt.Sprintf("%v", ms))
|
||||
}
|
||||
|
||||
// defaultEncodeDuration 默认的原始时间处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:56 下午 2021/1/2
|
||||
func defaultEncodeDuration(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendInt64(int64(d) / 1000000)
|
||||
}
|
||||
|
||||
// OptionLogger 日志配置的选项
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:41 下午 2021/1/2
|
||||
type OptionLogger struct {
|
||||
UseJsonFormat bool // 日志使用json格式
|
||||
MessageKey string // message 字段
|
||||
@@ -269,10 +223,6 @@ func WithEncoder(encoder zapcore.Encoder) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithUseJsonFormat 日志是否使用json格式数据
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:30 上午 2021/1/3
|
||||
func WithUseJsonFormat(isJsonFormat bool) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
o.UseJsonFormat = isJsonFormat
|
||||
@@ -280,10 +230,6 @@ func WithUseJsonFormat(isJsonFormat bool) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithMessageKey 使用message key
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:32 上午 2021/1/3
|
||||
func WithMessageKey(messageKey string) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
messageKey = strings.Trim(messageKey, " ")
|
||||
@@ -295,10 +241,6 @@ func WithMessageKey(messageKey string) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithLevelKey 设置level key
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:33 上午 2021/1/3
|
||||
func WithLevelKey(levelKey string) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
levelKey = strings.Trim(levelKey, " ")
|
||||
@@ -310,10 +252,6 @@ func WithLevelKey(levelKey string) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithTimeKey 设置time key ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:34 上午 2021/1/3
|
||||
func WithTimeKey(timeKey string) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
timeKey = strings.Trim(timeKey, " ")
|
||||
@@ -325,10 +263,6 @@ func WithTimeKey(timeKey string) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithCallerKey 设置caller key
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:37 上午 2021/1/3
|
||||
func WithCallerKey(callerKey string) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
callerKey = strings.Trim(callerKey, " ")
|
||||
@@ -340,10 +274,6 @@ func WithCallerKey(callerKey string) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithShortCaller 是否使用短caller格式
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:39 上午 2021/1/3
|
||||
func WithShortCaller(useShortCaller bool) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
o.UseShortCaller = useShortCaller
|
||||
@@ -351,10 +281,6 @@ func WithShortCaller(useShortCaller bool) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithTimeEncoder 设置格式化时间方法
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:41 上午 2021/1/3
|
||||
func WithTimeEncoder(encoder zapcore.TimeEncoder) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
if nil == encoder {
|
||||
@@ -365,10 +291,6 @@ func WithTimeEncoder(encoder zapcore.TimeEncoder) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// WithEncodeDuration 原始时间
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 12:42 上午 2021/1/3
|
||||
func WithEncodeDuration(encoder zapcore.DurationEncoder) SetLoggerOptionFunc {
|
||||
return func(o *OptionLogger) {
|
||||
if nil == encoder {
|
||||
@@ -386,10 +308,6 @@ func WithZincLogCollect(zincCfg *ZincConfig) SetLoggerOptionFunc {
|
||||
}
|
||||
|
||||
// GetEncoder 获取空中台输出的encoder
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 6:24 下午 2021/1/2
|
||||
func GetEncoder(option ...SetLoggerOptionFunc) zapcore.Encoder {
|
||||
ol := &OptionLogger{
|
||||
UseJsonFormat: defaultUseJsonFormat,
|
||||
|
||||
Reference in New Issue
Block a user