golang logrus (1) 简单使用

本文详细介绍了Logrus——一款适用于Go语言的结构化日志框架。内容覆盖了从安装到使用的各个方面,包括如何设置日志级别、自定义日志格式及字段等高级特性。适合初学者和进阶开发者快速掌握并应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、简介
2、简单使用
3、基本使用
4、API 概览
5、参考文章

1、简介

logrus 是结构化的,与 golang 标准库完全兼容的 golang 日志打印框架。支持 Filed 和 HOOK 机制,自带 text 和 json 两种日志输出格式。

2、简单使用

最简单的方法就是直接使用包级暴露的打印方法。直接上代码:

package main

import "github.com/sirupsen/logrus"

func main() {
    logrus.WithFields(logrus.Fields{
        "animal": "walrus",
        "number": 1,
        "size":   10,
    }).Info("A walrus appears")
}
复制代码

输出:

time="2018-06-08T15:32:35+08:00" level=info msg="A walrus appears" animal=walrus number=1 size=10
复制代码

也可以将日志打印到文件:

log := logrus.New()
file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
if err == nil {
    log.Out = file
} else {
    log.Info("Failed to log to file, using default stderr")
}
log.Info("log-- log--")
复制代码

3、基本使用

3.1 设置日志输出格式

logrus 自带两种格式 logrus.JSONFormatter{} 和 logrus.TextFormatter{},设置方法如下:

logrus.SetFormatter(&logrus.JSONFormatter{})
logrus.Infoln("JSONFormatter")

logrus.SetFormatter(&logrus.TextFormatter{})
logrus.Infoln("TextFormatter not time")
复制代码

可以自己创建一个 logrus.Logger,并设置它的日志格式:

log := logrus.New()
log.Formatter= new(logrus.JSONFormatter)
log.Infoln("my logger")
复制代码
3.2 设置日志打印级别

logrus 提供 6 档日志级别,分别是:

PanicLevel
FatalLevel
ErrorLevel
WarnLevel
InfoLevel
DebugLevel
复制代码

附一条阮一峰老师关于日志级别的博客:
@ruanyf

日志的级别(来自@dylanbeattie)
- Fatal:网站挂了,或者极度不正常
- Error:跟遇到的用户说对不起,可能有bug
- Warn:记录一下,某事又发生了
- Info:提示一切正常
- debug:没问题,就看看堆栈
复制代码

使用 SetLevel() 方法设置:

logrus.SetLevel(logrus.DebugLevel)
logrus.Debug("DebugLevel")// 会打印出来
logrus.SetLevel(logrus.ErrorLevel)
logrus.Debug("ErrorLevel") // 不会打印出来
复制代码

可以自己创建一个 logrus.Logger,并设置它的日志级别:

log := logrus.New()
log.Level = logrus.DebugLevel
log.Debug("DebugLevel")// 会打印出来
log.Level = logrus.WarnLevel
log.Debug("WarnLevel")// 不会打印出来
复制代码
3.3 自定义 Field

logrus 默认的日志输出有 time、level 和 msg 3个 Field,其中 time 可以不显示,方法如下:

logrus.SetFormatter(&logrus.TextFormatter{DisableTimestamp: true})
复制代码

自定义 Field 的方法如下:

// 只用一次
logrus.WithFields(logrus.Fields{"key1": "11", "key2":22}).Infoln("info...")

// 可以多次使用
fields := logrus.WithFields(logrus.Fields{"key": "value"})
fields.Infoln("info...")
复制代码
3.4 自定义 Logger

golang 有一条约定俗成的规范,就是可以让使用者实例化的 struce 都会提供一个 New 方法,返回一个该 struce 的指针,logrus.Logger 结构体也一样,Logger 结构体的定义如下:

type Logger struct {
	Out io.Writer
	Hooks LevelHooks
	Formatter Formatter
	Level Level
	mu MutexWrap
	entryPool sync.Pool
}
复制代码

New() 方法的定义如下:

func New() *Logger {
	return &Logger{
		Out:       os.Stderr,
		Formatter: new(TextFormatter),
		Hooks:     make(LevelHooks),
		Level:     InfoLevel,
	}
}
复制代码

LevelHooks 类型的定义如下:

// Internal type for storing the hooks on a logger instance.
type LevelHooks map[Level][]Hook
复制代码

New 一个 Logger 来使用很简单:

log := logrus.New()
log.Debug("debug...")
复制代码

4、API 概览

4.1 包级暴露的各日志级别打印方法
func Print(args ...interface{})
func Printf(format string, args ...interface{})
func Println(args ...interface{})

func Debug(args ...interface{})
func Debugf(format string, args ...interface{})
func Debugln(args ...interface{})

func Info(args ...interface{})
func Infof(format string, args ...interface{})
func Infoln(args ...interface{})

func Warn(args ...interface{})
func Warnf(format string, args ...interface{})
func Warnln(args ...interface{})

func Warning(args ...interface{})
func Warningf(format string, args ...interface{})
func Warningln(args ...interface{})

func Error(args ...interface{})
func Errorf(format string, args ...interface{})
func Errorln(args ...interface{})

func Fatal(args ...interface{})
func Fatalf(format string, args ...interface{})
func Fatalln(args ...interface{})

func Panic(args ...interface{})
func Panicf(format string, args ...interface{})
func Panicln(args ...interface{})

func Exit(code int)
复制代码
4.2 其他包级暴露的方法
func AddHook(hook Hook)

func RegisterExitHandler(handler func())

func SetFormatter(formatter Formatter)

func SetLevel(level Level)

func SetOutput(out io.Writer)
复制代码

5、参考文章

golang 日志包logrus详解
Logrus的使用
golang日志框架logrus

logrus
logrus doc
lfshook
lfshook doc
file-rotatelogs
file-rotatelogs doc

转载于:https://juejin.im/post/5b20789f518825137478a697

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值