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)
}

golang 日志的更多相关文章

  1. 设计自用的golang日志模块

    设计自用的golang日志模块 golang的原生日志模块不能满足需求,而开源的第三方包,也不完全够用.用户较多的logrus,却没有rotate功能,这已经是众所周知的.对于运维来说,当然是希望日志 ...

  2. golang日志框架--logrus学习笔记

    golang日志框架--logrus学习笔记 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供 ...

  3. 从0写一个Golang日志处理包

    WHY 日志概述 日志几乎是每个实际的软件项目从开发到最后实际运行过程中都必不可少的东西.它对于查看代码运行流程,记录发生的事情等方面都是很重要的. 一个好的日志系统应当能准确地记录需要记录的信息,同 ...

  4. 记-Golang日志文件读取及写入操作

    Golang语言的 os 包中OpenFile 函数,如下所示: func OpenFile(name string, flag int, perm FileMode) (*File, error) ...

  5. golang日志收集方案之ELK

    每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常也会涉及到 ...

  6. golang日志库之glog使用问题总结

    1. 日志默认输出路径为临时路径,可通过执行命令时带上 -log_dir="路径",指定输出,但路径必须已存在,源码如下,日志文件会生成两个 .INFO等后缀是符号链接文件,另一个 ...

  7. golang 日志模块(log)

    log 日志 log 模块可以自定义log 对象, 也可以使用log默认对象的日志方法 func New 创建log对象 func New(out io.Writer, prefix string, ...

  8. golang 日志框架(zap)完整配置和使用

    目录结构: logger.go文件: package log import ( rotatelogs "github.com/lestrrat-go/file-rotatelogs" ...

  9. golang基础学习---log

    package main import ( "log" ) func init() { log.SetPrefix("TRACE: ") log.SetFlag ...

  10. 【Golang】嗅探抓包,解决线上偶现问题来不及抓包的情况

    背景 测试群里经常看到客户端的同学反馈发现了偶现Bug,但是来不及抓包,最后不了了之,最近出现得比较频繁,所以写个小脚本解决这个问题. 实现思路 实现的思路比较简单: 抓包 存日志 做日志管理 具体实 ...

随机推荐

  1. CTF之WEB学习路线规划

    前言 受大佬Lzer0Kx(公众号:LK安全)启发,打算整一篇关于CTF-web的学习路线的分享.当然也算是给一些刚入门的小白的一些学习方向,不至于不知道学啥.废话少说,开整! 以下的所有内容属于我个 ...

  2. Windows常用指令与常见问题

    关键目录 启动目录:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup hosts:C:\Windows\System32\dri ...

  3. 「SHOI2015」脑洞治疗仪

    \(\text{Naive Solition}\) 当然是 \(ODT\) 暴力啦 \(Luogu\) 煞费苦心加强了数据,于是就过不了了... 不过 \(LibreOJ\) 上可以过 #includ ...

  4. 【模板】AC自动机(二次加强版)

    模板 \(Problem:\) 求 \(n\) 个模式串在文本串中出现的次数 \(templete:\) \(Luogu5357\) \(Code\) #include<cstdio> # ...

  5. Linux centos 代替方案: Rocky Linux (centos作者)

    官网: Rocky Linux

  6. [EULAR文摘] 在总人群中监测ACPA能否预测早期关节炎

    标签: 类风湿关节炎; 抗CCP抗体; 预测因子; 病程演变 在总人群中监测ACPA能否预测早期关节炎 Verstappen SM, et al. EULAR 2015. Present ID: OP ...

  7. 设备区分判断IPAD,H5,PC

        HTML: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  8. PostgreSQL 谁堵塞了谁(锁等待检测)- pg_blocking_pids

    一.背景 当一个进程处于等待(被堵塞)状态时,是谁干的?可以使用如下函数,快速得到捣蛋(堵塞别人)的PID. 二.案例 1.会话1 postgres=# begin; BEGIN postgres=# ...

  9. Vs出现调试问题

    当前不会命中断点还未为文档加载任何符号--问题探究 项目运行后断点位置出现以下问题: 原因: 对项目点击进行了发布,导致这里自动切换成了release 切换成debug就正常了

  10. python去重的几种方法

    from collections import OrderedDict list1 = [1,5,2,1,10] print(list(set(list1))) #[1, 2, 10, 5] 这种方式 ...