我们开发go程序的过程中,发现记录程序日志已经不是fmt.print这么简单,我们想到的是打印输出能够明确指定当时运行时间、运行代码段,当然我们可以引入go官方自带包 import “log”,然后通过log.Printf、log.Println等方式输出,而且默认是日志输出时只带时间的,想要同时输出所运行代码段位置,还需要通过执行一下指定进行相关简单的设置
-
log.SetFlags(log.LstdFlags | log.Lshortfile)
-
log.SetPrefix(xxx)
logger支持自定义时间格式
logger支持不同的日志等级输出,能够有效提高日志输出性能和检索;
logger支持控制台+文件+网络的三种方式输出,并且可以任意组合。
logger支持控制台输出颜色区分;
logger支持文本输出的自定制;
logger支持网络日志传输,例如直连logstash发送。
go mod init
package main
import (
"fmt"
"github.com/wonderivan/logger"
)
func main() {
fmt.Println("hello world")
logger.SetLogger("log.json")
logger.Trace("this is Trace")
logger.Debug("this is Debug")
logger.Info("this is Info")
logger.Warn("this is Warn")
logger.Error("this is Error")
logger.Crit("this is Critical")
logger.Alert("this is Alert")
logger.Emer("this is Emergency")
}
go mod tidy
自动下载logger库
json文件内容
{
"TimeFormat":"2006-01-02 15:04:05",
"Console": {
"level": "TRAC",
"color": true
},
"File": {
"filename": "app.log",
"level": "TRAC",
"daily": true,
"maxlines": 1000000,
"maxsize": 1,
"maxdays": -1,
"append": true,
"permit": "0660"
},
"Conn": {
"net":"tcp",
"addr":"192.168.1.57:1024",
"level": "Warn",
"reconnect":true,
"reconnectOnMsg":false
}
}
go run main.go
此时在终端即可输出(如果是非windows终端,支持日志等级颜色区分):
logger日志等级列表
等级 配置 释义 控制台颜色
0 EMER 系统级紧急,比如磁盘出错,内存异常,网络不可用等 红色底
1 ALRT 系统级警告,比如数据库访问异常,配置文件出错等 紫色
2 CRIT 系统级危险,比如权限出错,访问异常等 蓝色
3 EROR 用户级错误 红色
4 WARN 用户级警告 黄色
5 INFO 用户级重要 天蓝色
6 DEBG 用户级调试 绿色
7 TRAC 用户级基本输出,比如成员信息,结构体值等 绿色
json 参数说明
{
"TimeFormat":"2006-01-02 15:04:05", // 输出日志开头时间格式
"Console": { // 控制台日志配置
"level": "TRAC", // 控制台日志输出等级
"color": true // 控制台日志颜色开关
},
"File": { // 文件日志配置
"filename": "app.log", // 初始日志文件名
"level": "TRAC", // 日志文件日志输出等级
"daily": true, // 跨天后是否创建新日志文件,当append=true时有效
"maxlines": 1000000, // 日志文件最大行数,当append=true时有效
"maxsize": 1, // 日志文件最大大小,当append=true时有效
"maxdays": -1, // 日志文件有效期
"append": true, // 是否支持日志追加
"permit": "0660" // 新创建的日志文件权限属性
},
"Conn": { // 网络日志配置
"net":"tcp", // 日志传输模式
"addr":"10.1.55.10:1024", // 日志接收服务器
"level": "Warn", // 网络日志输出等级
"reconnect":true, // 网络断开后是否重连
"reconnectOnMsg":false, // 发送完每条消息后是否断开网络
}
}