摘要
本文部分内容来源于网络,个人收集整理,请勿传播
Go
中日志处理的一些包的用法
log
包
log模块主要提供了三类接口
Print
Panic
Fatal
Print
1 | package main |
Fatal
log.Fatal
接口会先将日志内容打印到标准输出,接着调用系统的 os.exit(1)
接口,退出程序并返回状态 1 。
但是有一点需要注意,由于是直接调用系统接口退出,defer函数不会被调用。
1 | package main |
Panic
log.Panic
接口会把日志内容刷到标准错误后调用panic
函数
1 | package main |
- 首先输出了
test for defer Panic
- 然后第一个
defer
函数被调用了并输出了--first--
- 但是第二个
defer
函数并没有输出
可见在Panic
之后声明的defer
是不会执行的。
自定义Logger
类型
log.Logger
提供了一个New方法用来创建对象
1 | //定义logger, 传入参数 文件,前缀字符串,flag标记 |
该函数一共有三个参数:
- 输出位置
out
,是一个io.Writer
对象,该对象可以是一个文件也可以是实现了该接口的对象。通常我们可以用这个来指定日志输出到哪个文件。 prefix
我们在前面已经看到,就是在日志内容前面的东西。我们可以将其置为[Info]
、[Warning]
等来帮助区分日志级别。flags
是一个选项,显示日志开头的东西,可选的值有:
1 | Ldate = 1 << iota // 形如 2009/01/23 的日期 |
1 | package main |
github.com/wonderivan/logger
1 |
|
日志等级
当前日志输出等级共8种,从0-7对应的等级由高到底,当配置为某个输出等级时,只有大于等于该等级的日志才会输出。不同的输出适配器支持不同的日志等级配置:
等级 | 配置 | 释义 | 控制台颜色 |
---|---|---|---|
0 | EMER | 系统级紧急,比如磁盘出错,内存异常,网络不可用等 | 红色底 |
1 | ALRT | 系统级警告,比如数据库访问异常,配置文件出错等 | 紫色 |
2 | CRIT | 系统级危险,比如权限出错,访问异常等 | 蓝色 |
3 | EROR | 用户级错误 | 红色 |
4 | WARN | 用户级警告 | 黄色 |
5 | INFO | 用户级重要 | 天蓝色 |
6 | DEBG | 用户级调试 | 绿色 |
7 | TRAC | 用户级基本输出 | 绿色 |
配置说明
logger当前支持控制台、文件、网络3种方式适配器输出,可以通过各自的参数进行设置,该logger支持多个方式同时输出,如果未配置某项适配器时,则不初始化也不会输出到该适配器。
通过调用logger.SetLogger(config string)方法设置参数,config支持json配置,也支持指定内容为json配置的文件路径,例如:
1 | // 通过配置参数直接配置 |
配置参数说明
默认配置为只控制台输出DEBG及其以上日志。
1 | { |
时间格式
时间类型 | 时间格式 |
---|---|
ANSIC | “Mon Jan _2 15:04:05 2006” |
UnixDate | “Mon Jan _2 15:04:05 MST 2006” |
RubyDate | “Mon Jan 02 15:04:05 -0700 2006” |
RFC822 | “02 Jan 06 15:04 MST” |
RFC822Z | “02 Jan 06 15:04 -0700” |
RFC850 | “Monday, 02-Jan-06 15:04:05 MST” |
RFC1123 | “Mon, 02 Jan 2006 15:04:05 MST” |
RFC1123Z | “Mon, 02 Jan 2006 15:04:05 -0700” |
RFC3339 | “2006-01-02T15:04:05Z07:00” |
RFC3339Nano | “2006-01-02T15:04:05.999999999Z07:00” |
Kitchen | “3:04PM” |
Stamp | “Jan _2 15:04:05” |
StampMilli | “Jan _2 15:04:05.000” |
StampMicro | “Jan _2 15:04:05.000000” |
StampNano | “Jan _2 15:04:05.000000000” |
RFC3339Nano1 | “2006-01-02 15:04:05.999999999 -0700 MST” |
DEFAULT | “2006-01-02 15:04:05” |
时间格式打印
1 | ========RFC1123Z time format======== |
其他
- 当日志文件配置项append为true时,如果当前写入的日志发生跨天(daily为true)或超过最大限制时,会创建一个新文件,原有文件格式被重命名为:
****.xxxx-xx-xx.xxx.xxx
格式,例如:- 当向
app.log
写入日志时,触发了创建新文件操作,则将app.log
重命名为app.2018-01-01.001.log
, 如果此时app.2018-01-01.001.log
已经存在,则将刚才的app.log
重命名为app.2018-01-01.002.log
,以此类推。
- 当向
logger package
默认初始化了全局的defaultLogger
,所以直接调用logger.SetLogger
的其实是给该对象设置输出参数,如果想要使用自定义的logger
对象,需要通过logger.NewLogger()
进行初始化。- 网络配置中的
reconnectOnMsg
为true
时,每条发送一条消息都会重连一次网络日志中心,适用于写日志频率极低的情况下的调用,可以减少长时间网络连接而占用资源。但强烈不建议平常使用时设置为true,这将会导致调用方反复的网络重连,极大增加资源消耗和延迟。 - conn网络输出适配器经过ELK集成环境的测试验证,通过该方式发送的日志,能够正常通过
Elecsearch
和Kibana
检索和分析
github.com/op/go-logging
1 | package main |
github.com/sirupsen/logrus
https://www.cnblogs.com/xuange306/p/9507760.html