代码拉取完成,页面将自动刷新
package configuration
import (
"fmt"
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
"github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable"
"github.com/rifflock/lfshook"
log "github.com/sirupsen/logrus"
"github.com/tietang/go-utils"
prefixed "github.com/x-cray/logrus-prefixed-formatter"
"io"
"os"
"path"
"path/filepath"
"runtime"
"strings"
"time"
)
var formatter *prefixed.TextFormatter
var lfh *utils.LineNumLogrusHook
func init() {
// 定义日志格式
//formatter:=&log.TextFormatter{} log是小包名后面是struct 要用&
formatter = &prefixed.TextFormatter{}
///
//设置高亮显示的色彩样式
formatter.ForceColors = true
formatter.DisableColors = false
formatter.ForceFormatting = true
formatter.SetColorScheme(&prefixed.ColorScheme{ /// 设置级别压缩
InfoLevelStyle: "green",
WarnLevelStyle: "yellow",
ErrorLevelStyle: "red",
FatalLevelStyle: "41",
PanicLevelStyle: "41",
DebugLevelStyle: "blue",
PrefixStyle: "cyan",
TimestampStyle: "37",
})
//开启完整时间戳输出和时间戳格式
formatter.FullTimestamp = true
//设置时间格式
formatter.TimestampFormat = "2006-01-02.15:04:05.000000"
//设置日志formatter
log.SetFormatter(formatter)
log.SetOutput(colorable.NewColorableStdout())
//日志级别,通过环境变量来设置
// 后期可以变更到配置中来设置
if os.Getenv("log.debug") == "true" { /// os 获取系统环境变量
log.SetLevel(log.DebugLevel)
}
//开启调用函数、文件、代码行信息的输出
log.SetReportCaller(true)
//设置函数、文件、代码行信息的输出的hook
SetLineNumLogrusHook()
}
func SetLineNumLogrusHook() {
lfh = utils.NewLineNumLogrusHook()
lfh.EnableFileNameLog = true
lfh.EnableFuncNameLog = true
log.AddHook(lfh)
}
//将滚动日志writer共享给iris glog output
var log_writer io.Writer
//初始化log配置,配置logrus日志文件滚动生成和
func InitLog(serviceName string) {
//设置日志输出级别
level := GetYamlValue([]string{"config", "log_level"}, 0, "debug").(string)
if level == "debug" {
log.SetLevel(log.DebugLevel)
} else {
log.SetLevel(log.InfoLevel)
}
lfh.EnableFileNameLog = true
lfh.EnableFuncNameLog = true
//配置日志输出目录
logDir := GetYamlValue([]string{"config", "log_path"}, 0, "/app/logs/").(string)
logName := GetYamlValue([]string{"config", "log_name_" + serviceName}, 0, "default").(string)
logPath := logDir //+ "/logs"
logFilePath, _ := filepath.Abs(logPath)
log.Infof("log dir: %s", logFilePath)
maxAge := time.Hour * 24
rotationTime := time.Hour * 4
os.MkdirAll(logPath, os.ModePerm)
baseLogPath := path.Join(logPath, logName)
//设置滚动日志输出writer
writer, err := rotatelogs.New(
strings.TrimSuffix(baseLogPath, ".log")+".%Y%m%d%H.log",
rotatelogs.WithLinkName(baseLogPath), // 生成软链,指向最新日志文件
rotatelogs.WithMaxAge(maxAge), // 文件最大保存时间
rotatelogs.WithRotationTime(rotationTime), // 日志切割时间间隔
)
if err != nil {
log.Errorf("config local file system logger error. %+v", err)
}
//设置日志文件输出的日志格式
formatter := &log.TextFormatter{}
formatter.CallerPrettyfier = func(frame *runtime.Frame) (function string, file string) {
function = frame.Function
dir, filename := path.Split(frame.File)
f := path.Base(dir)
return function, fmt.Sprintf("%s/%s:%d", f, filename, frame.Line)
}
lfHook := lfshook.NewHook(lfshook.WriterMap{
log.DebugLevel: writer, // 为不同级别设置不同的输出目的
log.InfoLevel: writer,
log.WarnLevel: writer,
log.ErrorLevel: writer,
log.FatalLevel: writer,
log.PanicLevel: writer,
}, formatter)
log.AddHook(lfHook)
//
log_writer = writer
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。