1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- * @Author: LinkLeong link@icewhale.com
- * @Date: 2022-06-02 15:09:38
- * @LastEditors: LinkLeong
- * @LastEditTime: 2022-06-27 15:47:49
- * @FilePath: /CasaOS/pkg/utils/loger/log.go
- * @Description:
- * @Website: https://www.casaos.io
- * Copyright (c) 2022 by icewhale, All Rights Reserved.
- */
- package loger
- import (
- "fmt"
- "os"
- "path"
- "path/filepath"
- "runtime"
- "github.com/IceWhaleTech/CasaOS/pkg/config"
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- "gopkg.in/natefinch/lumberjack.v2"
- )
- var loggers *zap.Logger
- func getFileLogWriter() (writeSyncer zapcore.WriteSyncer) {
- // 使用 lumberjack 实现 log rotate
- lumberJackLogger := &lumberjack.Logger{
- Filename: filepath.Join(config.AppInfo.LogPath, fmt.Sprintf("%s.%s",
- config.AppInfo.LogSaveName,
- config.AppInfo.LogFileExt,
- )),
- MaxSize: 10,
- MaxBackups: 60,
- MaxAge: 1,
- Compress: true,
- }
- return zapcore.AddSync(lumberJackLogger)
- }
- func LogInit() {
- encoderConfig := zap.NewProductionEncoderConfig()
- encoderConfig.EncodeTime = zapcore.EpochTimeEncoder
- encoder := zapcore.NewJSONEncoder(encoderConfig)
- fileWriteSyncer := getFileLogWriter()
- core := zapcore.NewTee(
- zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.InfoLevel),
- zapcore.NewCore(encoder, fileWriteSyncer, zapcore.InfoLevel),
- )
- loggers = zap.New(core)
- }
- func Info(message string, fields ...zap.Field) {
- callerFields := getCallerInfoForLog()
- fields = append(fields, callerFields...)
- loggers.Info(message, fields...)
- }
- func Debug(message string, fields ...zap.Field) {
- callerFields := getCallerInfoForLog()
- fields = append(fields, callerFields...)
- loggers.Debug(message, fields...)
- }
- func Error(message string, fields ...zap.Field) {
- callerFields := getCallerInfoForLog()
- fields = append(fields, callerFields...)
- loggers.Error(message, fields...)
- }
- func Warn(message string, fields ...zap.Field) {
- callerFields := getCallerInfoForLog()
- fields = append(fields, callerFields...)
- loggers.Warn(message, fields...)
- }
- func getCallerInfoForLog() (callerFields []zap.Field) {
- pc, file, line, ok := runtime.Caller(2) // 回溯两层,拿到写日志的调用方的函数信息
- if !ok {
- return
- }
- funcName := runtime.FuncForPC(pc).Name()
- funcName = path.Base(funcName) //Base函数返回路径的最后一个元素,只保留函数名
- callerFields = append(callerFields, zap.String("func", funcName), zap.String("file", file), zap.Int("line", line))
- return
- }
|