当前位置:网站首页>学 Go,最常用的技能是什么?打日志
学 Go,最常用的技能是什么?打日志
2022-08-04 15:17:00 【华为云】
️ 实战场景
在日常开发中,用到做最多的知识点除了字符串操作外,就数日志模块最常用了,毕竟有日志调试和修改 BUG 才方便,而且如果你是编程知识的初学者,更是建议先学习一下日志相关知识。
log 包 - 使用 Logger
在 Go 中,内置了 log 包实现简单日志的记录功能,如果你有 Python 中 logger 模块的使用经验,学习起来也是非常简单的。
log 包中定义了一个 Logger 类型,其中包含的函数有 Print 系列函数,Fatal 系列函数,Panic 系列。
接下来直接看一段 log 包基本使用的代码:
package mainimport ( "log")func main() { log.Println("输出普通日志") // 待换行 v := "xxxx" log.Printf("输出格式化 %s 日志 \n", v) log.Fatalln("输出fatal的日志") log.Panicln("输出panic的日志")}输出内容如下所示:
2022/07/31 16:47:01 输出普通日志2022/07/31 16:47:01 输出格式化 xxxx 日志2022/07/31 16:47:01 输出fatal的日志exit status 1可以发现其与标准输出有一个大的差异点,即每条输出信息都携带了当下时间。
在时间的时候,可以将 log.Fatalln 和 log.Panicln 信息对调,就能得到不同的输出,继而测试出 fatal 和 panic 的用法。
Logger 配置
在上文已经看到,默认的 log 日志会输出时间信息,我们可以在此基础上进行扩展,将日志的记录到文件中,输出错误的行号。
此时需要使用 SetFlags 函数,具体如下所示。
package mainimport ( "log")func main() { // 文件全路径名+行号,错误的时间(精确到微秒级别),错误信息 log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println("日志输出")}此时的日志输出内容如下所示:
2022/07/31 16:53:23.468018 G:/goProject/06_demo.go:10: 日志输出log 包还提供了其它选项,都是常量,即上述代码 SetFlags 的参数部分内容。
const ( Ldate = 1 << iota // 日期:2022/07/31 Ltime // 时间:16:53:23 Lmicroseconds // 微秒级别时间:16:53:23.468018 Llongfile // 文件全路径名+行号: G:/goProject/06_demo.go:10 Lshortfile // 文件名+行号:06_demo.go:10 LUTC // 使用UTC时间 LstdFlags = Ldate | Ltime // 标准logger的初始值)还可以对日志的前缀进行设置,使用 SetPrefix 函数即可。
func main() { log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println("日志输出1") log.SetPrefix("[橡皮擦专用]") log.Println("日志输出2")}此时的日志输出如下内容:
2022/07/31 16:57:19.350118 G:/goProject/06_demo.go:9: 日志输出1[橡皮擦专用]2022/07/31 16:57:19.358230 G:/goProject/06_demo.go:11: 日志输出2以上日志都是在控制台进行的输出,如果希望将日志记录到文件中,可以配置日志输出位置,此时用到的函数是 SetOutput,代码如下:
package mainimport ( "fmt" "log" "os")func main() { logFile, err := os.OpenFile("./error.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { fmt.Println("打开文件失败,错误信息:", err) return } // 设置输出文件 log.SetOutput(logFile) log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println("日志输出1") log.SetPrefix("[橡皮擦专用]") log.Println("日志输出2")}这是运行代码,就会发现会在项目根目录创建一个文件,其中包含所有日志输出。
在创建 logger 对象的时候,还可以使用其构造函数 New 实现。
使用 New 创建 logger
New 函数的的原型如下:
func New(out io.Writer, prefix string, flag int) *Logger接下来直接看示例代码学习即可。
package mainimport ( "log" "os")func main() { logger := log.New(os.Stdout, "[橡皮擦专用前缀]", log.Lshortfile|log.Ldate) logger.Println("普通日志")}可以看到比前文的代码要精简了许多,实战遇到简单日志,可以直接采用 New 相关写法即可。
你正在阅读 【梦想橡皮擦】 的博客
阅读完毕,可以点点小手赞一下
发现错误,直接评论区中指正吧
橡皮擦的第 621 篇原创博客
边栏推荐
猜你喜欢
随机推荐
16. Learn MySQL Regular Expressions
Online Excel based on Next.js
Basic Introduction for PLSQL
IP第十六天笔记
输入输出流总结
苏秋贵:揭秘绿联科技用5年时间从0做到6亿,如何一枝独秀?
我在羊毛和二手群里报复性消费
Byte、Short、Integer、Long内部缓存类的对比与源码分析
Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law
leetcode: 259. Smaller sum of three numbers
leetcode:212. 单词搜索 II
eNSP-小型网络拓扑(DNS、DHCP、网站服务器、无线路由器)
1403. Minimum Subsequence in Non-Increasing Order
QT笔记——QUuid了解
vim common operation commands
leetcode:215无序数组中找第k大的元素
如何优雅的消除系统重复代码?
郑轻新生校赛和中工选拔赛题解
leetcode:241. 为运算表达式设计优先级
PTA 6-2 多项式求值









