2021-10-12

go seelog 初级使用

直接上代码,撸起来

1.目录结构
2021-10-12
2.配置文件seelog.xml

<seelog levels="trace,debug,info,warn,error,critical">
    <outputs formatid="main">
        <!-- 对控制台输出的Log按级别分别用颜色显示。6种日志级别我仅分了三组颜色,如果想每个级别都用不同颜色则需要简单修改即可 -->
        <filter levels="trace,debug,info">
            <console formatid="colored-default"/>
            <!-- 将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件 -->
            <rollingfile formatid="main" type="size" filename="./log/Preliminary/info.log" maxsize="10485760"
                         maxrolls="99"/>
        </filter>
        <filter levels="warn">
            <console formatid="colored-warn"/>
            <!-- 将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件 -->
            <rollingfile formatid="main" type="size" filename="./log/Intermediate/warn.log" maxsize="10485760"
                         maxrolls="99"/>
        </filter>
        <filter levels="error,critical">
            <console formatid="colored-error"/>
            <!-- 将日志输出到磁盘文件,按文件大小进行切割日志,单个文件最大10M,最多99个日志文件 -->
            <rollingfile formatid="main" type="size" filename="./log/highLevel/error.log" maxsize="10485760"
                         maxrolls="99"/>
        </filter>

    </outputs>
    <formats>
        <format id="colored-default" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
        <format id="colored-warn" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
        <format id="colored-error" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />
        <format id="main" format="%UTCDate %UTCTime - [%LEV] - %RelFile - %Msg%n"/>
    </formats>
</seelog>

其中:
outputs——里面是日志的配置,其中formatid中的id指定的是标签中的id,也就是按照format标签中格式来输出日志
buffered——指的是缓冲设置,size表示缓冲区大小,单位为byte。flushperiod表示刷新时间间隔,单位为ms

rollingfile——指定日志设置,type指定回滚方式,data表示按时期回滚,maxrolls表示最大重命名文件数。

按上述文件进行配置,则可以保存30天内的日志数据。个人还是比较喜欢这种配置方式的。当然对于更高级的配置,请参考官方文档。链接如下:
https://github.com/cihub/seelog/wiki/Receiver-reference

3.mian程序

package main

import (
	"fmt"
	"github.com/cihub/seelog"
	"os"
	"path"
	"path/filepath"
	"time"
)

func main() {
	defer seelog.Flush()
	num := 0
	for {
		time.Sleep(time.Second*1)
		num++
		seelog.Info("日志消息",num)
		seelog.Error("错误消息",num)
		seelog.Warn("报警消息",num)
	}
}

//初始化,init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高
func init() {
	SetupLogger()
}
//日志设置
func SetupLogger() {
	defer func() {
		seelog.Flush()
	}()
	baseDir, err := filepath.Abs(filepath.Dir(os.Args[0]))//获取程序路径
	CurrentDir := baseDir
	logger, err := seelog.LoggerFromConfigAsFile(path.Join(CurrentDir, "seelog.xml"))//读取配置,创建记录器
	if err != nil {
		fmt.Println(err)
		return
	}

	if err != nil {
		panic("日志配置文件读取错误")
	}
	seelog.ReplaceLogger(logger)
}

4.运行结果

2021-10-12 18:42:10 [INF] [main.go:22] [main.main] 日志消息1
2021-10-12 18:42:10 [ERR] [main.go:23] [main.main] 错误消息1
2021-10-12 18:42:10 [WRN] [main.go:23] [main.main] 报警消息1
2021-10-12 18:42:11 [INF] [main.go:22] [main.main] 日志消息2
2021-10-12 18:42:11 [ERR] [main.go:23] [main.main] 错误消息2
2021-10-12 18:42:11 [WRN] [main.go:23] [main.main] 报警消息2
2021-10-12 18:42:12 [INF] [main.go:22] [main.main] 日志消息3
2021-10-12 18:42:12 [ERR] [main.go:23] [main.main] 错误消息3
2021-10-12 18:42:12 [WRN] [main.go:23] [main.main] 报警消息3

5.日志文件内容
warn.log

2021-10-12 10:42:10 - [WRN] - src/main/main.go - 报警消息1
2021-10-12 10:42:11 - [WRN] - src/main/main.go - 报警消息2
2021-10-12 10:42:12 - [WRN] - src/main/main.go - 报警消息3
2021-10-12 10:42:13 - [WRN] - src/main/main.go - 报警消息4
2021-10-12 10:42:14 - [WRN] - src/main/main.go - 报警消息5

info.log

2021-10-12 10:42:10 - [INF] - src/main/main.go - 日志消息1
2021-10-12 10:42:11 - [INF] - src/main/main.go - 日志消息2
2021-10-12 10:42:12 - [INF] - src/main/main.go - 日志消息3
2021-10-12 10:42:13 - [INF] - src/main/main.go - 日志消息4
2021-10-12 10:42:14 - [INF] - src/main/main.go - 日志消息5

error.log

2021-10-12 10:42:10 - [ERR] - src/main/main.go - 错误消息1
2021-10-12 10:42:11 - [ERR] - src/main/main.go - 错误消息2
2021-10-12 10:42:12 - [ERR] - src/main/main.go - 错误消息3
2021-10-12 10:42:13 - [ERR] - src/main/main.go - 错误消息4
2021-10-12 10:42:14 - [ERR] - src/main/main.go - 错误消息5
上一篇:卡特兰数(计算顺序进栈的出栈情况)


下一篇:42. 接雨水-动态规划,单调栈