首页 > 其他分享 >golang 使用 zap logger 加入Lumberjack 写日志

golang 使用 zap logger 加入Lumberjack 写日志

时间:2024-06-04 19:00:35浏览次数:22  
标签:zapcore Lumberjack golang func go logger sugarLogger zap

golang 使用 zap logger 加入Lumberjack 写日志

Cd 进入项目目录

go get go.uber.org/zap/zapcore

go get -u github.com/natefinch/lumberjack

关于下面代码说明:

 

func getLogWriter() zapcore.WriteSyncer {
    lumberJackLogger := &lumberjack.Logger{
        Filename:   "../logs/log.log",  // 日志文件的位置
        MaxSize:    1,                  // 在进行切割之前,日志文件的最大大小(以MB为单位)
        MaxBackups: 5,                  // 保留旧文件的最大个数
        MaxAge:     30,                 // 保留旧文件的最大天数
        Compress:   false,              // 是否压缩/归档旧文件
    }
    return zapcore.AddSync(lumberJackLogger)
}

 

 

 

 

具体实现代码

 

package main

import (
    "net/http"

    "github.com/natefinch/lumberjack"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
)

var sugarLogger *zap.SugaredLogger

func main() {
    InitLogger()
    defer sugarLogger.Sync()
    simpleHttpGet("www.topgoer.com")
    simpleHttpGet("http://www.topgoer.com")
}

func InitLogger() {
    writeSyncer := getLogWriter()
    encoder := getEncoder()
    core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)

    logger := zap.New(core, zap.AddCaller())
    sugarLogger = logger.Sugar()
}

func getEncoder() zapcore.Encoder {
    encoderConfig := zap.NewProductionEncoderConfig()
    encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
    encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
    return zapcore.NewConsoleEncoder(encoderConfig)
}

func getLogWriter() zapcore.WriteSyncer {
    lumberJackLogger := &lumberjack.Logger{
        Filename:   "./test.log",
        MaxSize:    1,
        MaxBackups: 5,
        MaxAge:     30,
        Compress:   false,
    }
    return zapcore.AddSync(lumberJackLogger)
}

func simpleHttpGet(url string) {
    sugarLogger.Debugf("Trying to hit GET request for %s", url)
    resp, err := http.Get(url)
    if err != nil {
        sugarLogger.Errorf("Error fetching URL %s : Error = %s", url, err)
    } else {
        sugarLogger.Infof("Success! statusCode = %s for URL %s", resp.Status, url)
        resp.Body.Close()
    }
}

 

标签:zapcore,Lumberjack,golang,func,go,logger,sugarLogger,zap
From: https://www.cnblogs.com/yingger/p/18231525

相关文章

  • Golang(Go语言)封装一个简单的控制台输出包
    //定义6个常量,每个常量代表一个布尔值为true的位置const( LEVEL_DEBUG=1<<iota LEVEL_INFO LEVEL_WARN LEVEL_ERROR LEVEL_FATAL PRINT_SRC_FILE)typeconsoleFuncfunc(formatstring,a...any)varprintSrcFileEmptyFunc=func(){}typeConsolestruct{......
  • golang使用阿里MQTT的通信记录
    背景:我们有业务场景就是手机App可以操作物连网设备,一年之中总会有一两次,手机无法操作设备,于是我们就需要将服务器重新启动就正常了,使用的是阿里MQTT服务。猜测:我一直怀疑,这个通信系统中的可能有BUG,消息丢失无法送达或者在传递过中发生了错乱无法正确收到消息。分析:仔细研究发现......
  • golang使用geoip2获取ip归属地
    gogetgithub.com/oschwald/geoip2-golang下载GeoIP2-City.mmdbhttps://dev.maxmind.com/geoip/geolite2-free-geolocation-datamain.gopackagemainimport( "fmt" "log" "net" "github.com/oschwald/geoip2-golang")......
  • golang中基于kevent的IO多路复用实践
    https://github.com/zongzw-learn/learn-go/tree/master/basics/tcp-pollerkqueue在golang语言下的使用实践将kqueue的操作细节封装在NetPoller接口中,实现KqueuePoller的三个API:Start启动基于kqueue的IO多路复用事件监听Close停止kqueueSetHandler设置可插入式的数据处理......
  • golang json 性能分析
    Json作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖json解析的应用里,往往会成为性能瓶颈,从下面的火焰图中可以发现在业务逻辑处理......
  • spdlog日志库源码:日志记录器logger类
    特性一个logger类对象代表一个日志记录器,为用户提供日志记录接口。每个logger对象都有一个唯一的名称,用于标识该logger。logger对象维护一个日志等级(如DEBUG、INFO、WARN、ERROR等)。只有当日志消息的等级高于或等于logger的当前等级时,消息才会被记录下来。logger......
  • golang GMP机制
    GMP是Golang底层实现的一种调度协程的方案,目的是提高并发处理且降低切换成本。GMP分别是底层实现中的三个数据结构。g代表goroutine,指被调度的协程对象。m代表线程,它是操作系统级别的线程,用来执行程序中的协程。p代表processer,是CPU的抽象。默认情况下,go程序会为每个CPU创......
  • 10.Golang中的数组
    1、Array(数组)的介绍数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如int、string等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在Golang中数组是一个长度固定的数据类型,数组的长......
  • 11.Golang中的切片
    1、为什么要使用切片因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。例如:packagemainfuncarraySum(x[4]int)int{sum:=0for_,v:=rangex{ sum=sum+v}returnsum}funcmain(){a:=[4]int{1,......
  • golang: 一个闭包的有趣使用
    来源https://colobu.com/gotips/001.html示例packagemainimport"time"funcTimeTrack()func(){ pre:=time.Now() returnfunc(){ println(time.Since(pre).Milliseconds()) }}funcmain(){ deferTimeTrack()() time.Sleep(1024*time.Millis......