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. JZOJ 3494. 【NOIP2013模拟联考13】线段(segment)

    题目 数轴上有很多单位线段,一开始时所有单位线段的权值都是 \(1\).有两种操作,第一种操作将某一区间内的单位线段权值乘以 \(w\),第二种操作将某一区间内的单位线段权值取 \(w\) 次幂.并且 ...

  2. Python中的魔术方法大全

    魔术方法 一种特殊的方法而已 特点 不需要人工调用,在特定时刻自动触发执行 魔术方法种类 1.__init__初始化方法******* 触发时机:实例化对象之后触发作用:为对象添加对象的所属成员参数: ...

  3. Tomcat修改端口号问题

    今日面试问到如何修改Tomcat的问题 懵了 1.第一种就是我们常用的编辑器中 如:Idea中 一键式修改端口号(我只知道这个) 在下面的图 Http port后处修改即可,默认为8080端口 2.第 ...

  4. CCRD_TOC_2007_EULAR专辑_2

    中信国健临床通讯 EULAR 2007专辑II 目录 类风湿关节炎 1 Etanercept联合MTX治疗RA导致炎症与骨破坏进展之间的失关联也见于单关节水平:来自TEMPO的研究数据 Landewe ...

  5. Mybatis 实体类驼峰命名与数据库字段之间映射

    数据库的命名规则和 Java 的命名规则不一致,导致实体类与数据库字段不能完美映射. 一.可以在 mapper.xml 中通过 resultMap 来解决: <resultMap id=&quo ...

  6. 基于Vue3的Leaflet基础

    1. 概述 Leaflet 是一个开源.轻量并且对移动端友好的交互式地图 JavaScript 库,大小仅仅只有 39 KB, 拥有绝大部分开发者所需要的所有地图特性 Leaflet 的官网为:Lea ...

  7. Linux命令使用时路径存在空格、特殊符号

    https://blog.csdn.net/Homewm/article/details/102935965 Linux命令使用时路径存在空格.特殊符号(如-.@等等)如何处理呢? 再如可以转义的字符 ...

  8. Corundum:100G NIC学习(二)——仿真

    前情提要:搭建corundum仿真环境(一)https://www.cnblogs.com/shroud404/articles/15364812.html 三.Running test 接上文,梳理 ...

  9. Day 24 24.1:逆向分析1 - Steam案例

    STEAM逆向分析 url:https://store.steampowered.com/login/?redir=&redir_ssl=1 分析思路: 输入用户名和密码后,点击登录按钮,通过 ...

  10. Mysql数据库基础第六章:变量、存储过程与函数

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...