首页 > 其他分享 >golang 日志

golang 日志

时间:2023-02-25 14:33:06浏览次数:38  
标签:zapcore writes logPath golang 日志 Logger zap

package log

import (
	"NOONASN/global"
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
	"path"
	"path/filepath"
)

func GetLogger(name string) *zap.Logger {
	logPath := global.Cfg.Logger.LogPath
	if !path.IsAbs(logPath) {
		if absLogPath, err := filepath.Abs(logPath); err == nil {
			logPath = absLogPath
		}
	}
	debug := global.Cfg.Logger.Debug
	hook := lumberjack.Logger{
		Filename:   logPath, // 日志文件路径
		MaxSize:    128,     // 每个日志文件保存的大小 单位:M
		MaxAge:     7,       // 文件最多保存多少天
		MaxBackups: 30,      // 日志文件最多保存多少个备份
		Compress:   false,   // 是否压缩
	}
	encoderConfig := zapcore.EncoderConfig{
		MessageKey:     "msg",
		LevelKey:       "level",
		TimeKey:        "time",
		NameKey:        "logger",
		CallerKey:      "file",
		StacktraceKey:  "stacktrace",
		LineEnding:     zapcore.DefaultLineEnding,
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05"),
		EncodeDuration: zapcore.SecondsDurationEncoder,
		EncodeCaller:   zapcore.ShortCallerEncoder, // 短路径编码器
		EncodeName:     zapcore.FullNameEncoder,
	}

	// 设置日志级别
	atomicLevel := zap.NewAtomicLevel()
	atomicLevel.SetLevel(zap.DebugLevel)
	var writes = []zapcore.WriteSyncer{zapcore.AddSync(&hook)}
	// 如果是开发环境,同时在控制台上也输出
	if debug {
		writes = append(writes, zapcore.AddSync(os.Stdout))
	}
	core := zapcore.NewCore(
		zapcore.NewJSONEncoder(encoderConfig), // json格式的日志
		//zapcore.NewConsoleEncoder(encoderConfig), // 文子形式的日志
		zapcore.NewMultiWriteSyncer(writes...),
		atomicLevel,
	)

	// 开启开发模式,堆栈跟踪
	caller := zap.AddCaller()
	// 开启文件及行号
	development := zap.Development()

	// 设置初始化字段
	field := zap.Fields(zap.String("appName", name))

	// 构造日志
	return zap.New(core, caller, development, field)
}

标签:zapcore,writes,logPath,golang,日志,Logger,zap
From: https://www.cnblogs.com/wtil/p/17154358.html

相关文章

  • 收集日志方式1:k8s集群通过ELK收集容器控制台输出日志(logstash方式)
    集群架构:控制台日志,相当于容器的1号进程。或者容器内的日志正确和错误日志重定向到了如下/var/log/nginx/access.log->/dev/stdout /var/log/nginx/error.log->/dev/st......
  • iOS日志记录和异常捕获
    日志记录iOS日志记录当前文件的堆栈、类名、函数名、行号及文件路径等信息NSArray*array=[NSThreadcallStackSymbols];NSLog(@"堆栈信息:%@",array);NSLog(@"当......
  • Golang Slice
    Golang—SliceSlice是Go语言中的一种数据类型,又称动态数组,依托数组实现,可以方便的进行扩容、传递等,实际使用中比数组更灵活。实现原理Slice依托数组实现,底层数组对......
  • 安卓学习日志一:页面显示和逻辑处理
    我系统看了一个比较班上非常厉害的人的博客园,向她学习一下书写博客园的经验,希望自己也能系统学习一下,故有了这次的第一篇安卓学习日志。App开发主要有两大技术路线,分别是......
  • FE日志出现Error happened when receiving packet
    问题现象FE节点挂掉,在FE的日志里面有发现如下的异常,暂时不确定该异常是否会导致FE挂掉。starrocks版本:2.2.82023-02-2511:07:29,742WARN(starrocks-mysql-nio-poo......
  • Android 观察App运行日志和面对安装工程中需要在
    Android采用Log工具打印日志,它将各类日志划分为五个等级;log.e表示错误信息,比如可能导致程序崩溃的异常log.w表示警告信息log.i表示一般消息log.d表示调试信息。可把程......
  • springboot+logback日志配置
    <?xmlversion="1.0"encoding="UTF-8"?><!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否......
  • golang-小技巧:struct嵌套
    gostruct1typeastruct{2namestring3agestring4}56typebstruct{7a//匿名嵌套结构体8na......
  • golang 映射(map)
    1.映射的定义map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化(make)才能使用。map定义:map[KeyType]ValueType其中,KeyType表示键的类型,ValueTyp......
  • windows安装syslog日志转发客户端
    一、安装nxlog下载地址 https://nxlog.co/products/nxlog-community-edition/download二、配置windwos的日志客户端,客户端主要做的是配置监听端口,决定采用TCP还是UDP方......