增加日志初始化
This commit is contained in:
parent
3c9b925d73
commit
43bb73a0f6
125
client.go
125
client.go
@ -13,6 +13,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.zhangdeman.cn/zhangdeman/util"
|
"git.zhangdeman.cn/zhangdeman/util"
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ func init() {
|
|||||||
type client struct {
|
type client struct {
|
||||||
lock *sync.RWMutex
|
lock *sync.RWMutex
|
||||||
clientTable map[string]*DBClient
|
clientTable map[string]*DBClient
|
||||||
|
logger *zap.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddWithConfigFile 使用文件生成新的客户端,文件名去掉后缀作为flag
|
// AddWithConfigFile 使用文件生成新的客户端,文件名去掉后缀作为flag
|
||||||
@ -209,22 +211,33 @@ func (c *client) GetSlaveClient(ctx *gin.Context, dbFlag string) (*gorm.DB, erro
|
|||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
//
|
//
|
||||||
// Date : 20:23 2022/6/5
|
// Date : 20:23 2022/6/5
|
||||||
func (c *client) getLogInstance(logConf *LogConfig, loggerInstance *zap.Logger) (*zap.Logger, error) {
|
func (c *client) getLogInstance(logConf *LogConfig) (*zap.Logger, error) {
|
||||||
if nil != loggerInstance {
|
|
||||||
return loggerInstance, nil
|
|
||||||
}
|
|
||||||
if nil == logConf {
|
if nil == logConf {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
logConfList := []logger.SetLoggerOptionFunc{logger.WithEncoder(logConf.Encoder), logger.WithCallerSkip(logConf.Skip), logger.WithCaller()}
|
logConfList := []logger.SetLoggerOptionFunc{
|
||||||
if logConf.ConsoleOutput {
|
logger.WithCallerSkip(logConf.CallerSkip),
|
||||||
|
logger.WithCaller(),
|
||||||
|
logger.WithUseJsonFormat(logConf.UseJson),
|
||||||
|
logger.WithShortCaller(logConf.UseShortFile),
|
||||||
|
}
|
||||||
|
if logConf.Console {
|
||||||
logConfList = append(logConfList, logger.WithConsoleOutput())
|
logConfList = append(logConfList, logger.WithConsoleOutput())
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
|
loggerInstance *zap.Logger
|
||||||
)
|
)
|
||||||
if loggerInstance, err = logger.NewLogger(logConf.Level, logConf.SplitConfig, logConfList...); nil != err {
|
splitConfig := &logger.RotateLogConfig{
|
||||||
|
TimeIntervalType: logConf.TimeIntervalType,
|
||||||
|
LogPath: logConf.Path,
|
||||||
|
LogFileName: logConf.Name,
|
||||||
|
DivisionChar: logConf.DivisionChar,
|
||||||
|
FullLogFormat: logConf.Format,
|
||||||
|
MaxAge: time.Duration(logConf.MaxAge) * time.Second,
|
||||||
|
}
|
||||||
|
if loggerInstance, err = logger.NewLogger(logConf.LogLevel, splitConfig, logConfList...); nil != err {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return loggerInstance, nil
|
return loggerInstance, nil
|
||||||
@ -256,7 +269,7 @@ func (c *client) GetDatabaseClient(conf *Mysql, logConf *LogConfig) (*gorm.DB, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
if nil != logConf {
|
if nil != logConf {
|
||||||
if loggerInstance, err = getLogInstance(logConf, nil); nil != err {
|
if loggerInstance, err = c.getLogInstance(logConf); nil != err {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
instance.Logger = wrapper.NewGormLoggerWithInstance(nil, instance, loggerInstance, "", nil)
|
instance.Logger = wrapper.NewGormLoggerWithInstance(nil, instance, loggerInstance, "", nil)
|
||||||
@ -283,31 +296,6 @@ func (c *client) buildConnectionDSN(conf *Mysql) string {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========================== 以下是老版本支持
|
|
||||||
|
|
||||||
// NewDBClient ...
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 3:09 PM 2021/12/24
|
|
||||||
func NewDBClient(masterConf *DBConfig, slaveConf *DBConfig, logConf *LogConfig, loggerInstance *zap.Logger, extraRequestFieldList []string) (*DBClient, error) {
|
|
||||||
client := &DBClient{
|
|
||||||
extraFieldList: extraRequestFieldList,
|
|
||||||
}
|
|
||||||
var err error
|
|
||||||
// 日志初始化失败
|
|
||||||
if client.loggerInstance, err = getLogInstance(logConf, loggerInstance); nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if client.master, err = GetDatabaseClient(masterConf, nil); nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if client.slave, err = GetDatabaseClient(slaveConf, nil); nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return client, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DBClient 包装日志实例
|
// DBClient 包装日志实例
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
@ -361,72 +349,3 @@ func (dc *DBClient) GetSlave(ctx *gin.Context) *gorm.DB {
|
|||||||
func (dc *DBClient) getLogger(ctx *gin.Context, dbClient *gorm.DB, node string) gormLogger.Interface {
|
func (dc *DBClient) getLogger(ctx *gin.Context, dbClient *gorm.DB, node string) gormLogger.Interface {
|
||||||
return wrapper.NewGormLoggerWithInstance(ctx, dbClient, dc.loggerInstance, node, dc.extraFieldList)
|
return wrapper.NewGormLoggerWithInstance(ctx, dbClient, dc.loggerInstance, node, dc.extraFieldList)
|
||||||
}
|
}
|
||||||
|
|
||||||
// getLogInstance 获取日志实例
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 3:20 PM 2021/12/24
|
|
||||||
func getLogInstance(logConf *LogConfig, loggerInstance *zap.Logger) (*zap.Logger, error) {
|
|
||||||
if nil != loggerInstance {
|
|
||||||
return loggerInstance, nil
|
|
||||||
}
|
|
||||||
if nil == logConf {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
logConfList := []logger.SetLoggerOptionFunc{logger.WithEncoder(logConf.Encoder), logger.WithCallerSkip(logConf.Skip), logger.WithCaller()}
|
|
||||||
if logConf.ConsoleOutput {
|
|
||||||
logConfList = append(logConfList, logger.WithConsoleOutput())
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
if loggerInstance, err = logger.NewLogger(logConf.Level, logConf.SplitConfig, logConfList...); nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return loggerInstance, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetDatabaseClient 获取日志实例
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 10:49 下午 2021/3/1
|
|
||||||
func GetDatabaseClient(conf *DBConfig, logConf *LogConfig) (*gorm.DB, error) {
|
|
||||||
var (
|
|
||||||
instance *gorm.DB
|
|
||||||
err error
|
|
||||||
loggerInstance *zap.Logger
|
|
||||||
)
|
|
||||||
|
|
||||||
if instance, err = gorm.Open(mysql.Open(buildConnectionDSN(conf)), &gorm.Config{}); nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if nil != logConf {
|
|
||||||
if loggerInstance, err = getLogInstance(logConf, nil); nil != err {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
instance.Logger = wrapper.NewGormLoggerWithInstance(nil, instance, loggerInstance, "", nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
return instance, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// buildConnectionDSN 构建建立连接的DSN
|
|
||||||
//
|
|
||||||
// Author : go_developer@163.com<白茶清欢>
|
|
||||||
//
|
|
||||||
// Date : 9:34 下午 2021/3/1
|
|
||||||
func buildConnectionDSN(conf *DBConfig) string {
|
|
||||||
return fmt.Sprintf(
|
|
||||||
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
|
|
||||||
conf.Username,
|
|
||||||
conf.Password,
|
|
||||||
conf.Host,
|
|
||||||
conf.Port,
|
|
||||||
conf.Database,
|
|
||||||
conf.Charset,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
28
define.go
28
define.go
@ -33,13 +33,22 @@ type DBConfig struct {
|
|||||||
//
|
//
|
||||||
// Date : 10:51 下午 2021/3/1
|
// Date : 10:51 下午 2021/3/1
|
||||||
type LogConfig struct {
|
type LogConfig struct {
|
||||||
Level zapcore.Level
|
Name string `json:"name" yaml:"name"` // 日志文件名
|
||||||
ConsoleOutput bool
|
Path string `json:"path" yaml:"path"` // 日志文件路径
|
||||||
Encoder zapcore.Encoder
|
Format string `json:"format" yaml:"format"` // 文件格式
|
||||||
SplitConfig *logger.RotateLogConfig
|
TimeIntervalType logger.TimeIntervalType `json:"time_interval_type" yaml:"time_interval_type"` // 日志切割规则
|
||||||
ExtractFieldList []string
|
DivisionChar string `json:"division_char" yaml:"division_char"` // 文件名分隔符
|
||||||
TraceFieldName string
|
LogLevel zapcore.Level `json:"log_level" yaml:"log_level"` // 日志等级
|
||||||
Skip int
|
Console bool `json:"console" yaml:"console"` // 是否进行控制台日志输出
|
||||||
|
UseJson bool `json:"use_json" yaml:"use_json"` // 日志是否使用JSON格式
|
||||||
|
FileLine bool `json:"file_line" yaml:"file_line"` // 日志是否打印行号
|
||||||
|
MessageKey string `json:"message_key" yaml:"message_key"` // message 字段
|
||||||
|
LevelKey string `json:"level_key" yaml:"level_key"` // level 字段
|
||||||
|
TimeKey string `json:"time_key" yaml:"time_key"` // 时间字段
|
||||||
|
CallerKey string `json:"caller_key" yaml:"caller_key"` // 记录日志的文件的代码行数
|
||||||
|
UseShortFile bool `json:"use_short_file" yaml:"use_short_file"` // 是否使用短文件格式
|
||||||
|
CallerSkip int `json:"caller_skip" yaml:"caller_skip"` // 日志记录的文件跳过多少层
|
||||||
|
MaxAge int `json:"max_age" yaml:"max_age"` // 日志最长保存时间, 单位 : 秒
|
||||||
}
|
}
|
||||||
|
|
||||||
// cfgFile 配置文件定义
|
// cfgFile 配置文件定义
|
||||||
@ -69,8 +78,9 @@ const (
|
|||||||
//
|
//
|
||||||
// Date : 15:19 2022/6/9
|
// Date : 15:19 2022/6/9
|
||||||
type Database struct {
|
type Database struct {
|
||||||
Master *Mysql `json:"master" yaml:"master"`
|
Logger *LogConfig `json:"logger" yaml:"logger"` // 日志配置
|
||||||
Slave *Mysql `json:"slave" yaml:"slave"`
|
Master *Mysql `json:"master" yaml:"master"` // 主库配置
|
||||||
|
Slave *Mysql `json:"slave" yaml:"slave"` // 从库配置
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mysql ...
|
// Mysql ...
|
||||||
|
Loading…
Reference in New Issue
Block a user