mirror of https://github.com/kone-net/go-chat.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.7 KiB
104 lines
2.7 KiB
package log |
|
|
|
import ( |
|
"os" |
|
|
|
"github.com/natefinch/lumberjack" |
|
"go.uber.org/zap" |
|
"go.uber.org/zap/zapcore" |
|
) |
|
|
|
type Field = zap.Field |
|
|
|
var ( |
|
log *zap.Logger |
|
String = zap.String |
|
Any = zap.Any |
|
Int = zap.Int |
|
Float32 = zap.Float32 |
|
) |
|
|
|
// func init() { |
|
// InitLogger("./logs/chat.log", "debug") |
|
// } |
|
|
|
func Debug(msg string, fields ...Field) { |
|
log.Debug(msg, fields...) |
|
} |
|
|
|
func Info(msg string, fields ...Field) { |
|
log.Info(msg, fields...) |
|
} |
|
|
|
func Error(msg string, fields ...Field) { |
|
log.Error(msg, fields...) |
|
} |
|
|
|
// logpath 日志文件路径 |
|
// loglevel 日志级别 |
|
func InitLogger(logpath string, loglevel string) { |
|
// 日志分割 |
|
hook := lumberjack.Logger{ |
|
Filename: logpath, // 日志文件路径,默认 os.TempDir() |
|
MaxSize: 100, // 每个日志文件保存100M,默认 100M |
|
MaxBackups: 30, // 保留30个备份,默认不限 |
|
MaxAge: 7, // 保留7天,默认不限 |
|
Compress: true, // 是否压缩,默认不压缩 |
|
} |
|
write := zapcore.AddSync(&hook) |
|
// 设置日志级别 |
|
// debug 可以打印出 info debug warn |
|
// info 级别可以打印 warn info |
|
// warn 只能打印 warn |
|
// debug->info->warn->error |
|
var level zapcore.Level |
|
switch loglevel { |
|
case "debug": |
|
level = zap.DebugLevel |
|
case "info": |
|
level = zap.InfoLevel |
|
case "error": |
|
level = zap.ErrorLevel |
|
default: |
|
level = zap.InfoLevel |
|
} |
|
encoderConfig := zapcore.EncoderConfig{ |
|
TimeKey: "time", |
|
LevelKey: "level", |
|
NameKey: "logger", |
|
CallerKey: "linenum", |
|
MessageKey: "msg", |
|
StacktraceKey: "stacktrace", |
|
LineEnding: zapcore.DefaultLineEnding, |
|
EncodeLevel: zapcore.LowercaseLevelEncoder, // 小写编码器 |
|
EncodeTime: zapcore.ISO8601TimeEncoder, // ISO8601 UTC 时间格式 |
|
EncodeDuration: zapcore.SecondsDurationEncoder, // |
|
EncodeCaller: zapcore.FullCallerEncoder, // 全路径编码器 |
|
EncodeName: zapcore.FullNameEncoder, |
|
} |
|
// 设置日志级别 |
|
atomicLevel := zap.NewAtomicLevel() |
|
atomicLevel.SetLevel(level) |
|
|
|
var writes = []zapcore.WriteSyncer{write} |
|
// 如果是开发环境,同时在控制台上也输出 |
|
if level == zap.DebugLevel { |
|
writes = append(writes, zapcore.AddSync(os.Stdout)) |
|
} |
|
core := zapcore.NewCore( |
|
zapcore.NewConsoleEncoder(encoderConfig), |
|
// zapcore.NewJSONEncoder(encoderConfig), |
|
zapcore.NewMultiWriteSyncer(writes...), // 打印到控制台和文件 |
|
// write, |
|
level, |
|
) |
|
// 开启开发模式,堆栈跟踪 |
|
caller := zap.AddCaller() |
|
// 开启文件及行号 |
|
development := zap.Development() |
|
// 设置初始化字段,如:添加一个服务器名称 |
|
filed := zap.Fields(zap.String("application", "chat-room")) |
|
// 构造日志 |
|
log = zap.New(core, caller, development, filed) |
|
log.Info("Logger init success") |
|
}
|
|
|