parent
3d3c2109ae
commit
624394f6d4
@ -1,5 +1,5 @@
|
||||
package go_library
|
||||
|
||||
func Version() string {
|
||||
return "1.0.162"
|
||||
return "1.0.163"
|
||||
}
|
||||
|
@ -1,385 +0,0 @@
|
||||
package golog
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/dtapps/go-library"
|
||||
"github.com/dtapps/go-library/utils/dorm"
|
||||
"github.com/dtapps/go-library/utils/goip"
|
||||
"github.com/dtapps/go-library/utils/gorequest"
|
||||
"github.com/dtapps/go-library/utils/gostring"
|
||||
"github.com/dtapps/go-library/utils/gotime"
|
||||
"github.com/dtapps/go-library/utils/gotrace_id"
|
||||
"github.com/dtapps/go-library/utils/gourl"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
"runtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ApiZapLogFun *ApiClient 驱动
|
||||
type ApiZapLogFun func() *ApiZapLog
|
||||
|
||||
type ApiZapLogConfig struct {
|
||||
LogPath string // 日志文件路径
|
||||
LogName string // 日志文件名
|
||||
MaxSize int // 单位为MB,默认为512MB
|
||||
MaxBackups int // 保留旧文件的最大个数
|
||||
MaxAge int // 文件最多保存多少天 0=不删除
|
||||
LocalTime bool // 采用本地时间
|
||||
Compress bool // 是否压缩日志
|
||||
ShowLine bool // 显示代码行
|
||||
}
|
||||
|
||||
type ApiZapLog struct {
|
||||
config *ApiZapLogConfig
|
||||
logger *zap.Logger
|
||||
zapCore zapcore.Core
|
||||
systemConfig struct {
|
||||
systemHostname string // 主机名
|
||||
systemOs string // 系统类型
|
||||
systemKernel string // 系统内核
|
||||
systemInsideIp string // 内网ip
|
||||
systemOutsideIp string // 外网ip
|
||||
goVersion string // go版本
|
||||
sdkVersion string // sdk版本
|
||||
}
|
||||
}
|
||||
|
||||
func NewApiZapLog(ctx context.Context, config *ApiZapLogConfig) *ApiZapLog {
|
||||
|
||||
zl := &ApiZapLog{config: config}
|
||||
|
||||
var syncer zapcore.WriteSyncer
|
||||
|
||||
// 定义日志切割配置
|
||||
hook := lumberjack.Logger{
|
||||
Filename: zl.config.LogPath + zl.config.LogName, // ⽇志⽂件路径
|
||||
MaxSize: zl.config.MaxSize, // 单位为MB,默认为512MB
|
||||
MaxAge: zl.config.MaxAge, // 文件最多保存多少天
|
||||
MaxBackups: zl.config.MaxBackups, // 保留旧文件的最大个数
|
||||
LocalTime: zl.config.LocalTime, // 采用本地时间
|
||||
Compress: zl.config.Compress, // 是否压缩日志
|
||||
}
|
||||
// 在文件输出日志
|
||||
syncer = zapcore.AddSync(&hook)
|
||||
|
||||
// 自定义时间输出格式
|
||||
customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format(gotime.DateTimeFormat))
|
||||
}
|
||||
|
||||
// 自定义日志级别显示
|
||||
customLevelEncoder := func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(level.CapitalString())
|
||||
}
|
||||
|
||||
// 定义zap配置信息
|
||||
encoderConf := zapcore.EncoderConfig{
|
||||
CallerKey: "caller_line", // 打印文件名和行数
|
||||
LevelKey: "level_type",
|
||||
MessageKey: "msg",
|
||||
TimeKey: "zap_time",
|
||||
NameKey: "logger",
|
||||
StacktraceKey: "stacktrace",
|
||||
LineEnding: zapcore.DefaultLineEnding,
|
||||
EncodeTime: customTimeEncoder, // 自定义时间格式
|
||||
EncodeLevel: customLevelEncoder, // 小写编码器
|
||||
EncodeCaller: zapcore.ShortCallerEncoder, // 全路径编码器
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeName: zapcore.FullNameEncoder,
|
||||
}
|
||||
|
||||
// json格式输出
|
||||
zl.zapCore = zapcore.NewCore(zapcore.NewJSONEncoder(encoderConf),
|
||||
syncer, zap.NewAtomicLevelAt(zapcore.InfoLevel))
|
||||
|
||||
zl.logger = zl.withShowLine(zap.New(zl.zapCore))
|
||||
|
||||
zl.setConfig(ctx)
|
||||
|
||||
return zl
|
||||
}
|
||||
|
||||
// 判断是否显示代码行号
|
||||
func (zl *ApiZapLog) withShowLine(logger *zap.Logger) *zap.Logger {
|
||||
if zl.config.ShowLine {
|
||||
logger = logger.WithOptions(zap.AddCaller())
|
||||
}
|
||||
return logger
|
||||
}
|
||||
|
||||
// Middleware 中间件
|
||||
func (zl *ApiZapLog) Middleware(ctx context.Context, request gorequest.Response) {
|
||||
zl.logger.With(
|
||||
zapcore.Field{
|
||||
Key: "trace_id",
|
||||
Type: zapcore.StringType,
|
||||
String: gotrace_id.GetTraceIdContext(ctx),
|
||||
}, zapcore.Field{
|
||||
Key: "request_time",
|
||||
Type: zapcore.StringType,
|
||||
String: gotime.SetCurrent(request.RequestTime).Format(),
|
||||
}, zapcore.Field{
|
||||
Key: "request_uri",
|
||||
Type: zapcore.StringType,
|
||||
String: request.RequestUri,
|
||||
}, zapcore.Field{
|
||||
Key: "request_url",
|
||||
Type: zapcore.StringType,
|
||||
String: gourl.UriParse(request.RequestUri).Url,
|
||||
}, zapcore.Field{
|
||||
Key: "request_api",
|
||||
Type: zapcore.StringType,
|
||||
String: gourl.UriParse(request.RequestUri).Path,
|
||||
}, zapcore.Field{
|
||||
Key: "request_method",
|
||||
Type: zapcore.StringType,
|
||||
String: request.RequestMethod,
|
||||
}, zapcore.Field{
|
||||
Key: "request_params",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.RequestParams), //
|
||||
}, zapcore.Field{
|
||||
Key: "request_header",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.RequestHeader), //
|
||||
}, zapcore.Field{
|
||||
Key: "request_ip",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemOutsideIp,
|
||||
}, zapcore.Field{
|
||||
Key: "response_header",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.ResponseHeader), //
|
||||
}, zapcore.Field{
|
||||
Key: "response_status_code",
|
||||
Type: zapcore.Int64Type,
|
||||
Interface: request.ResponseStatusCode,
|
||||
}, zapcore.Field{
|
||||
Key: "response_body",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(dorm.JsonDecodeNoError(request.ResponseBody)), //
|
||||
}, zapcore.Field{
|
||||
Key: "response_content_length",
|
||||
Type: zapcore.Int64Type,
|
||||
Interface: request.ResponseContentLength,
|
||||
}, zapcore.Field{
|
||||
Key: "response_time",
|
||||
Type: zapcore.StringType,
|
||||
String: gotime.SetCurrent(request.ResponseTime).Format(),
|
||||
}, zapcore.Field{
|
||||
Key: "system_host_name",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemHostname,
|
||||
}, zapcore.Field{
|
||||
Key: "system_inside_ip",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemInsideIp,
|
||||
}, zapcore.Field{
|
||||
Key: "system_os",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemOs,
|
||||
}, zapcore.Field{
|
||||
Key: "system_arch",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemKernel,
|
||||
}, zapcore.Field{
|
||||
Key: "go_version",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.goVersion,
|
||||
}, zapcore.Field{
|
||||
Key: "sdk_version",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.sdkVersion,
|
||||
}).
|
||||
Info("Middleware")
|
||||
}
|
||||
|
||||
// MiddlewareXml 中间件
|
||||
func (zl *ApiZapLog) MiddlewareXml(ctx context.Context, request gorequest.Response) {
|
||||
zl.logger.With(
|
||||
zapcore.Field{
|
||||
Key: "trace_id",
|
||||
Type: zapcore.StringType,
|
||||
String: gotrace_id.GetTraceIdContext(ctx),
|
||||
}, zapcore.Field{
|
||||
Key: "request_time",
|
||||
Type: zapcore.StringType,
|
||||
String: gotime.SetCurrent(request.RequestTime).Format(),
|
||||
}, zapcore.Field{
|
||||
Key: "request_uri",
|
||||
Type: zapcore.StringType,
|
||||
String: request.RequestUri,
|
||||
}, zapcore.Field{
|
||||
Key: "request_url",
|
||||
Type: zapcore.StringType,
|
||||
String: gourl.UriParse(request.RequestUri).Url,
|
||||
}, zapcore.Field{
|
||||
Key: "request_api",
|
||||
Type: zapcore.StringType,
|
||||
String: gourl.UriParse(request.RequestUri).Path,
|
||||
}, zapcore.Field{
|
||||
Key: "request_method",
|
||||
Type: zapcore.StringType,
|
||||
String: request.RequestMethod,
|
||||
}, zapcore.Field{
|
||||
Key: "request_params",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.RequestParams), //
|
||||
}, zapcore.Field{
|
||||
Key: "request_header",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.RequestHeader), //
|
||||
}, zapcore.Field{
|
||||
Key: "request_ip",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemOutsideIp,
|
||||
}, zapcore.Field{
|
||||
Key: "response_header",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.ResponseHeader), //
|
||||
}, zapcore.Field{
|
||||
Key: "response_status_code",
|
||||
Type: zapcore.Int64Type,
|
||||
Interface: request.ResponseStatusCode,
|
||||
}, zapcore.Field{
|
||||
Key: "response_body",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(dorm.XmlDecodeNoError(request.ResponseBody)), //
|
||||
}, zapcore.Field{
|
||||
Key: "response_content_length",
|
||||
Type: zapcore.Int64Type,
|
||||
Interface: request.ResponseContentLength,
|
||||
}, zapcore.Field{
|
||||
Key: "response_time",
|
||||
Type: zapcore.StringType,
|
||||
String: gotime.SetCurrent(request.ResponseTime).Format(),
|
||||
}, zapcore.Field{
|
||||
Key: "system_host_name",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemHostname,
|
||||
}, zapcore.Field{
|
||||
Key: "system_inside_ip",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemInsideIp,
|
||||
}, zapcore.Field{
|
||||
Key: "system_os",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemOs,
|
||||
}, zapcore.Field{
|
||||
Key: "system_arch",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemKernel,
|
||||
}, zapcore.Field{
|
||||
Key: "go_version",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.goVersion,
|
||||
}, zapcore.Field{
|
||||
Key: "sdk_version",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.sdkVersion,
|
||||
}).
|
||||
Info("MiddlewareXml")
|
||||
}
|
||||
|
||||
// MiddlewareCustom 中间件
|
||||
func (zl *ApiZapLog) MiddlewareCustom(ctx context.Context, api string, request gorequest.Response) {
|
||||
zl.logger.With(
|
||||
zapcore.Field{
|
||||
Key: "trace_id",
|
||||
Type: zapcore.StringType,
|
||||
String: gotrace_id.GetTraceIdContext(ctx),
|
||||
}, zapcore.Field{
|
||||
Key: "request_time",
|
||||
Type: zapcore.StringType,
|
||||
String: gotime.SetCurrent(request.RequestTime).Format(),
|
||||
}, zapcore.Field{
|
||||
Key: "request_uri",
|
||||
Type: zapcore.StringType,
|
||||
String: request.RequestUri,
|
||||
}, zapcore.Field{
|
||||
Key: "request_url",
|
||||
Type: zapcore.StringType,
|
||||
String: gourl.UriParse(request.RequestUri).Url,
|
||||
}, zapcore.Field{
|
||||
Key: "request_api",
|
||||
Type: zapcore.StringType,
|
||||
String: api,
|
||||
}, zapcore.Field{
|
||||
Key: "request_method",
|
||||
Type: zapcore.StringType,
|
||||
String: request.RequestMethod,
|
||||
}, zapcore.Field{
|
||||
Key: "request_params",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.RequestParams), //
|
||||
}, zapcore.Field{
|
||||
Key: "request_header",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.RequestHeader), //
|
||||
}, zapcore.Field{
|
||||
Key: "request_ip",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemOutsideIp,
|
||||
}, zapcore.Field{
|
||||
Key: "response_header",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(request.ResponseHeader), //
|
||||
}, zapcore.Field{
|
||||
Key: "response_status_code",
|
||||
Type: zapcore.Int64Type,
|
||||
Interface: request.ResponseStatusCode,
|
||||
}, zapcore.Field{
|
||||
Key: "response_body",
|
||||
Type: zapcore.StringType,
|
||||
String: gostring.ToString(dorm.JsonDecodeNoError(request.ResponseBody)), //
|
||||
}, zapcore.Field{
|
||||
Key: "response_content_length",
|
||||
Type: zapcore.Int64Type,
|
||||
Interface: request.ResponseContentLength,
|
||||
}, zapcore.Field{
|
||||
Key: "response_time",
|
||||
Type: zapcore.StringType,
|
||||
String: gotime.SetCurrent(request.ResponseTime).Format(),
|
||||
}, zapcore.Field{
|
||||
Key: "system_host_name",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemHostname,
|
||||
}, zapcore.Field{
|
||||
Key: "system_inside_ip",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemInsideIp,
|
||||
}, zapcore.Field{
|
||||
Key: "system_os",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemOs,
|
||||
}, zapcore.Field{
|
||||
Key: "system_arch",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.systemKernel,
|
||||
}, zapcore.Field{
|
||||
Key: "go_version",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.goVersion,
|
||||
}, zapcore.Field{
|
||||
Key: "sdk_version",
|
||||
Type: zapcore.StringType,
|
||||
String: zl.systemConfig.sdkVersion,
|
||||
}).
|
||||
Info("MiddlewareCustom")
|
||||
}
|
||||
|
||||
func (zl *ApiZapLog) setConfig(ctx context.Context) {
|
||||
|
||||
info := getSystem()
|
||||
|
||||
zl.systemConfig.systemHostname = info.SystemHostname
|
||||
zl.systemConfig.systemOs = info.SystemOs
|
||||
zl.systemConfig.systemKernel = info.SystemKernel
|
||||
|
||||
zl.systemConfig.systemInsideIp = goip.GetInsideIp(ctx)
|
||||
|
||||
zl.systemConfig.sdkVersion = go_library.Version()
|
||||
zl.systemConfig.goVersion = runtime.Version()
|
||||
}
|
@ -1,137 +0,0 @@
|
||||
package golog
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/dtapps/go-library/utils/gotime"
|
||||
"github.com/dtapps/go-library/utils/gotrace_id"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ZapLogFun *ApiClient 驱动
|
||||
type ZapLogFun func() *ZapLog
|
||||
|
||||
type ZapLogConfig struct {
|
||||
LogPath string // 日志文件路径
|
||||
LogName string // 日志文件名
|
||||
MaxSize int // 单位为MB,默认为512MB
|
||||
MaxBackups int // 保留旧文件的最大个数
|
||||
MaxAge int // 文件最多保存多少天 0=不删除
|
||||
LocalTime bool // 采用本地时间
|
||||
Compress bool // 是否压缩日志
|
||||
JsonFormat bool // 是否输出为json格式
|
||||
ShowLine bool // 显示代码行
|
||||
LogInConsole bool // 是否同时输出到控制台
|
||||
}
|
||||
|
||||
type ZapLog struct {
|
||||
config *ZapLogConfig
|
||||
logger *zap.Logger
|
||||
zapCore zapcore.Core
|
||||
}
|
||||
|
||||
func NewZapLog(config *ZapLogConfig) *ZapLog {
|
||||
|
||||
zl := &ZapLog{config: config}
|
||||
|
||||
var syncer zapcore.WriteSyncer
|
||||
|
||||
if zl.config.LogPath != "" && zl.config.LogName != "" {
|
||||
// 定义日志切割配置
|
||||
hook := lumberjack.Logger{
|
||||
Filename: zl.config.LogPath + zl.config.LogName, // ⽇志⽂件路径
|
||||
MaxSize: zl.config.MaxSize, // 单位为MB,默认为512MB
|
||||
MaxAge: zl.config.MaxAge, // 文件最多保存多少天
|
||||
MaxBackups: zl.config.MaxBackups, // 保留旧文件的最大个数
|
||||
LocalTime: zl.config.LocalTime, // 采用本地时间
|
||||
Compress: zl.config.Compress, // 是否压缩日志
|
||||
}
|
||||
if zl.config.LogInConsole {
|
||||
// 在控制台和文件输出日志
|
||||
syncer = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&hook))
|
||||
} else {
|
||||
// 在文件输出日志
|
||||
syncer = zapcore.AddSync(&hook)
|
||||
}
|
||||
} else {
|
||||
// 在控制台输出日志
|
||||
syncer = zapcore.NewMultiWriteSyncer()
|
||||
}
|
||||
|
||||
// 自定义时间输出格式
|
||||
customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format(gotime.DateTimeFormat))
|
||||
}
|
||||
|
||||
// 自定义日志级别显示
|
||||
customLevelEncoder := func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(level.CapitalString())
|
||||
}
|
||||
|
||||
// 定义zap配置信息
|
||||
encoderConf := zapcore.EncoderConfig{
|
||||
CallerKey: "caller_line", // 打印文件名和行数
|
||||
LevelKey: "level_name",
|
||||
MessageKey: "msg",
|
||||
TimeKey: "time",
|
||||
NameKey: "logger",
|
||||
StacktraceKey: "stacktrace",
|
||||
LineEnding: zapcore.DefaultLineEnding,
|
||||
EncodeTime: customTimeEncoder, // 自定义时间格式
|
||||
EncodeLevel: customLevelEncoder, // 小写编码器
|
||||
EncodeCaller: zapcore.ShortCallerEncoder, // 全路径编码器
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeName: zapcore.FullNameEncoder,
|
||||
}
|
||||
|
||||
// 判断是否json格式输出
|
||||
if zl.config.JsonFormat {
|
||||
zl.zapCore = zapcore.NewCore(zapcore.NewJSONEncoder(encoderConf),
|
||||
syncer, zap.NewAtomicLevelAt(zapcore.InfoLevel))
|
||||
} else {
|
||||
zl.zapCore = zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConf),
|
||||
syncer, zap.NewAtomicLevelAt(zapcore.InfoLevel))
|
||||
}
|
||||
|
||||
zl.logger = zl.withShowLine(zap.New(zl.zapCore))
|
||||
|
||||
return zl
|
||||
}
|
||||
|
||||
// 判断是否显示代码行号
|
||||
func (zl *ZapLog) withShowLine(logger *zap.Logger) *zap.Logger {
|
||||
if zl.config.ShowLine {
|
||||
logger = logger.WithOptions(zap.AddCaller())
|
||||
}
|
||||
return logger
|
||||
}
|
||||
|
||||
// WithLogger 跟踪编号
|
||||
func (zl *ZapLog) WithLogger() *zap.Logger {
|
||||
return zl.logger
|
||||
}
|
||||
|
||||
// WithTraceId 跟踪编号
|
||||
func (zl *ZapLog) WithTraceId(ctx context.Context) *zap.Logger {
|
||||
logger := zl.logger
|
||||
logger = logger.With(zapcore.Field{
|
||||
Key: "trace_id",
|
||||
Type: zapcore.StringType,
|
||||
String: gotrace_id.GetTraceIdContext(ctx),
|
||||
})
|
||||
return logger
|
||||
}
|
||||
|
||||
// WithTraceIdStr 跟踪编号
|
||||
func (zl *ZapLog) WithTraceIdStr(traceId string) *zap.Logger {
|
||||
logger := zl.logger
|
||||
logger = logger.With(zapcore.Field{
|
||||
Key: "trace_id",
|
||||
Type: zapcore.StringType,
|
||||
String: traceId,
|
||||
})
|
||||
return logger
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
package rocron
|
||||
|
||||
import (
|
||||
"github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
// https://github.com/robfig/cron/
|
||||
|
||||
var (
|
||||
Cron *cron.Cron
|
||||
)
|
Loading…
Reference in new issue