当前位置:网站首页>go日志包 log的使用
go日志包 log的使用
2022-06-27 20:47:00 【云闲不收】
1、log简介
golang内置了log包,实现简单的日志服务。通过调用log包的函数,可以实现简单的日志打印功能。
2、log使用
log包中有3个系列的日志打印函数,分别print系列、panic系列、fatal系列。
函数系列 作用
print 单纯打印日志
panic 打印日志,抛出panic异常
fatal 打印日志,强制结束程序(os.Exit(1)),defer函数不会执行
2.1 简单示例
func main() {
defer fmt.Println(“panic退出前处理”)
log.Println(“println日志”)
log.Panic(“panic日志”)
log.Fatal(“程序退出日志”)
}
结果示例(实际结果不是这样的哦,因为panic,fatal会影响程序的执行):
2020/06/02 11:04:17 println日志
2020/06/02 11:04:17 panic日志
2020/06/02 11:04:17 panic退出前处理
2020/06/02 11:04:17 程序退出日志
3、log配置
3.1 标准log配置
默认情况下log只会打印出时间,但是实际情况下我们可能还需要获取文件名,行号等信息,log包提供给我们定制的接口。
log包提供两个标准log配置的相关方法:
func Flags() int // 返回标准log输出配置
func SetFlags(flag int) // 设置标准log输出配置
flag参数
const (
// 控制输出日志信息的细节,不能控制输出的顺序和格式。
// 输出的日志在每一项后会有一个冒号分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Ldate = 1 << iota // 日期:2009/01/23
Ltime // 时间:01:23:23
Lmicroseconds // 微秒级别的时间:01:23:23.123123(用于增强Ltime位)
Llongfile // 文件全路径名+行号: /a/b/c/d.go:23
Lshortfile // 文件名+行号:d.go:23(会覆盖掉Llongfile)
LUTC // 使用UTC时间
LstdFlags = Ldate | Ltime // 标准logger的初始值
)
标准日志配置示例
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
}
func main() {
log.Println(“println日志”)
}
输出结果:
image.png
3.2 日志前缀配置
log包提供两个日志前缀配置的相关函数:
func Prefix() string // 返回日志的前缀配置
func SetPrefix(prefix string) // 设置日志前缀
日志前缀配置实例
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.SetPrefix(“success”)
}
func main() {
log.Println(“println日志”)
}
输出结果:
image.png
3.3 日志输出位置配置
前面介绍的都是将日志输出到控制台上,golang的log包还支持将日志输出到文件中。log包提供了func SetOutput(w io.Writer)函数,将日志输出到文件中。
日志输出位置配置
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
logFile, err := os.OpenFile(“./c.log”, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Panic(“打开日志文件异常”)
}
log.SetOutput(logFile)
}
func main() {
log.Println(“println日志”)
}
结果:日志输出到当前目录下c.log文件中
image.png
4、自定义logger
log包为我们提供了内置函数,让我们能自定义logger。从效果上来看,就是将标题3中的标准日志配置、日志前缀配置、日志输出位置配置整合到一个函数中,使日志配置不在那么繁琐。
log包中提供了func New(out io.Writer, prefix string, flag int) *Logger函数来实现自定义logger。
示例
var logger *log.Logger
func init() {
logFile, err := os.OpenFile(“./c.log”, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Panic(“打开日志文件异常”)
}
logger = log.New(logFile, “success”, log.Ldate | log.Ltime | log.Lshortfile)
}
func main() {
logger.Println(“自定义logger”)
}
边栏推荐
- 实践torch.fx:基于Pytorch的模型优化量化神器
- Mysql database experiment report (I)
- 居家办公竟比去公司上班还累?
- 使用同花顺手机炒股安全吗?
- Liuleifeng, a "good man in Guangzhou" in the first quarter of 2022, has a strong sense of integrity and food safety
- [electron] basic learning
- Feign implements path escape through custom annotations
- 第一性原理(最优解理论)
- 批量处理-Excel导入模板1.1-支持多Sheet页
- 游戏手机平台简单介绍
猜你喜欢

How to set the enterprise wechat group robots to send messages regularly?

电子科大(申恒涛团队)&京东AI(梅涛团队)提出用于视频问答的结构化双流注意网络,性能SOTA!优于基于双视频表示的方法!

EasyCVR平台路由日志功能的技术实现过程【附代码】

Advertising is too "wild", Yoshino "surrenders"

STM32与RC522简单公交卡系统的设计

Stream + Nacos

First knowledge of the second bullet of C language

Death of 5 yuan youkuang in Yuanqi forest

Discuz淘宝客网站模板/迪恩淘宝客购物风格商业版模板

医美大刀,砍向00后
随机推荐
Personal tree ALV template - accelerate your development
Realization of kaggle cat dog recognition by pytorch
跟着存档教程动手学RNAseq分析(一)
[network] common request methods
Stunned! The original drawing function of markdown is so powerful!
广告太「野」,吉野家「渡劫」
Service gateway of microservices
The latest cloud development wechat balance charger special effect applet source code
最虚的华人首富更虚了
ABAP随笔-物料主数据界面增强-页签增强
批量处理-Excel导入模板1.1-支持多Sheet页
Summary of various loams (laser SLAM)
Using the cucumber automated test framework
This year's examinees are more "desperate" than the college entrance examination
Azure Kinect DK 实现三维重建 (jetson实时版)
[electron] 基础学习
Livox Lidar+APX15 实时高精度雷达建图复现整理
元气森林的5元有矿之死
The National University of Singapore 𞓜 uses model free reinforcement learning to evaluate the energy efficiency of the energy efficiency data center
Discuz small fish game wind shadow legend business gbk+utf8 version template /dz game website template