首页 > 其他分享 >go之logrus自定义日志样式

go之logrus自定义日志样式

时间:2023-04-26 10:45:16浏览次数:35  
标签:自定义 mLog logrus global levelColor go entry

日志功能配置:logrus.go

package core

import (
    "bytes"
    "fmt"
    "github.com/sirupsen/logrus"
    "io"
    "os"
    "path"
)

const (
    red    = 31
    yellow = 33
    blue   = 36
    gray   = 37
)

type LogFormatter struct {
}

func (t LogFormatter) Format(entry *logrus.Entry) ([]byte, error) {
    //根据不同的level展示颜色
    var levelColor int
    switch entry.Level {
    case logrus.DebugLevel, logrus.TraceLevel:
        levelColor = gray
    case logrus.WarnLevel:
        levelColor = yellow
    case logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel:
        levelColor = red
    default:
        levelColor = blue
    }
    //字节缓冲区
    var b *bytes.Buffer
    if entry.Buffer != nil {
        b = entry.Buffer
    } else {
        b = &bytes.Buffer{}
    }
    //自定义日期格式
    timestamp := entry.Time.Format("2006-01-02 15:04:06")
    if entry.HasCaller() {
        //自定义文件路径
        funcVal := entry.Caller.Function
        fileVal := fmt.Sprintf("%s:%d", path.Base(entry.Caller.File), entry.Caller.Line)
        //自定义输出格式
        fmt.Fprintf(b,"[%s] \033[%dm[%s]\033[0m %s %s %s \n",timestamp,levelColor,entry.Level,fileVal,funcVal,entry.Message)
    }else {
        fmt.Fprintf(b,"[%s] \033[%dm[%s]\033[0m %s %s %s \n",timestamp,levelColor,entry.Level,entry.Message)
    }
    return b.Bytes(),nil
}
func InitLogger() *logrus.Logger {
    mLog := logrus.New()//新建一个实例
    file, _ := os.OpenFile("gin.log", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0755)
    mLog.SetOutput(io.MultiWriter(os.Stdout,file))//设置输出类型
    mLog.SetReportCaller(true)//开启返回函数名和行号
    //mLog.SetFormatter(&logrus.JSONFormatter{})//设置自定义的Formatter
    mLog.SetFormatter(&LogFormatter{})//设置自定义的Formatter
    mLog.SetLevel(logrus.DebugLevel)//设置最低等级
    return mLog
}

全局变量:global.go

package global

import (
    "github.com/sirupsen/logrus"
    "gorm.io/gorm"
    "server/config"
)

var (
    Config *config.Config
    DB *gorm.DB
    Log *logrus.Logger
)

程序入口:main.go

package main

import (
    "server/core"
    "server/global"
)

//入口
func main() {
    //读取配置文件
    core.InitConf()
    //初始化日志
    global.Log = core.InitLogger()
    global.Log.Infoln("测试日志输出!")
    //fmt.Println(global.Config)
    global.DB = core.InitGorm() //返回值是db ,所以global.DB=db

}

日志最终输出结果:

 

标签:自定义,mLog,logrus,global,levelColor,go,entry
From: https://www.cnblogs.com/fuyuteng/p/17354948.html

相关文章

  • golang 使用 net包实现 tcp server 示例
    之前用到golang进行网络编程时,主要就是使用net/http和web框架gin,这些网络库的底层其实也还是用的标准库自带的net包,很多是对路由或者其他做封装,而且golang本身的长处之一也是网络IO的处理,这也得益于其底层的IO模型,今天我们分享的是基于TCPserver/client的简单实现,后......
  • django简易网页开发
    参考资料:https://www.bilibili.com/video/BV1NL41157ph?p=4&vd_source=3c855be289bdbda1054fac775ad1423ahttps://www.bilibili.com/video/BV1rT4y1v7uQ/?spm_id_from=trigger_reload&vd_source=3c855be289bdbda1054fac775ad1423a 数据库作业要搞这个…… ......
  • Golang - time包获取当前日期/时间戳并格式化输出
    获取时间对象packagemainimport("fmt""time")//24小时制constLAYOUT="2006-01-0215:04:05"//只能用这个日期,据说这是golang的诞生时间funcmain(){//获取当前日期now:=time.Now()fmt.Printf(now.Format(LAYOUT))//2022......
  • Go语言入门12(协程 goroutine)
    协程进程和线程进程​ 当运行一个应用程序的时候,操作系统会为这个应用程序启动一个进程。可以将这个进程看作一个包含了应用程序在运行中需要用到和维护的各种资源的容器。这些资源包括但不限于内存地址空间、文件和设备的句柄以及线程线程​ 一个线程是一个执行空间,这个空间......
  • django admin 中对自定义字段进行搜索
    我想在djangoadmin中使用investment字段进行搜索,但总是得到Cannotresolvekeyword'investment'intofield.选项是Model字段。有什么方法可以使用investment字段进行搜索?fromdjango.db.modelsimportCountclassReportsAdmin(admin.ModelAdmin):definvestmen......
  • go创建简单远程ssh连接
    packageutilimport("bytes""errors""fmt""github.com/sirupsen/logrus""golang.org/x/crypto/ssh""strings""time")funcpublicKeyAuthFunc(pemBytes,keyPassword[]byte)ss......
  • Django之视图函数层 (必会三板斧 JsonResponse对象 request对象获取文件 FBV与CBV
    目录视图层之必会三板斧用来处理请求的视图函数都必须返回HttpResponse对象情况一:啥也不返回这里会报一个没有返回HttpResponse对象的错误,由此可见必须要返回一个HttpResponse对象情况二:返回HttpResponse对象点击Ctrl键查看源码可见是HttpResponse类,所以会返回一个值情......
  • Unity】一步跳过Unity启动屏/Logo, 全平台适用,Unity官方API支持
    Unity启动Logo让人非常不爽,因为展示unitylogo非常拖沓,延缓了打开游戏的时间,用0元购版本又怕收到律师函。终于....刷github学习的时候意外发现一段有趣的代码,说是能跳过UnityLogo启动屏:https://github.com/psygames/UnitySkipSplash/blob/main/SkipSplash.cs翻了一下UnityA......
  • mogodb相关信息整理
    1,什么时候需要分片?MongoDB的分片很是火热,但是问题是,我们什么时候才真的需要使用分片呢?当你需要使用到如下的几个标志性的事件时,就意味着该考虑使用分片了!1、你用光了当前机器的磁盘空间2、单个的Mongod已经无法提供你要的写入性能了3、你想把大......
  • 编程实现可靠数据传输原理 Go-Back-N
    1.编写接收端代码接收端模拟网络环境较差时情况,每次生成一个随机数,小于0.8时不丢包,大于0.8时丢包。接收数据格式:编号+空格+内容返回数据格式:丢包:Loss+空格+编号未丢包:ACK+空格+编号接收包非累计计数时不做处理。2.编写发送端代码发送端较为复杂,分为两个线程:发送线程:设......