应用程序的日志管理
程序中记录日志的首要目的:Troubleshooting。通过记录程序中对外部系统与模块的依赖调用、重要状态信息的变化、关键变量、关键逻辑等,显示基于时间轴的程序运行轨迹,显示业务是否正常、是否存在非预期执行,在出问题时方便还原现场,推断程序运行过程、理清问题的方向。
本文将讨论在实现日志功能过程中常见的一些问题,包括基础API、格式化、日志转发及可视化等方面,代码采用Go语言描述。
一、Basic
1、后台输出
package main
import (
"fmt"
)
func main(){
fmt.Println("------hello world-----")
}2、There are no exceptions in Golang, only errors.
Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常,替代方案是使用多值返回来返回错误。当然Go并不是全面否定异常的存在,或者用recover+panic语法实现,只是极力不鼓励多用异常。
package main
import (
"log"
"errors"
"fmt"
)
func main() {
/* local variable definition */
...
/* function for division which return an error if divide by 0 */
ret,err = div(a, b)
if err != nil {
log.Fatal(err)
}
fmt.Println(ret)
}3、写入日志文件:
二、格式化
推荐日志工具库:logrus
1、JSON format
日志输出样式:
三、附加上下文
通过logrus库可以加入一些上下文信息,例如:主机名称,程序名称或者会话参数等。
日志输出样式:
四、Hooks
我们还可以利用Hook机制实现日志功能扩展,例如Syslog hook,将输出的日志发送到指定的Syslog服务。
验证是否发送Syslog:
五、可视化
在真实场景中日志数据体量非常庞大,日志存储只是第一步,更多的情况是需要查看特定指标或者能够快速检索信息,此时日志分析平台就发挥作用了。以logmatic为例,可以在它的官网注册https://logmatic.io/,免费体验。
在使用logmatic之前,需要下载它的hook支持:
效果如下: 

Last updated