文章

日志最佳实践

文章链接:My Logging Best Practices

在动作后打日志

// don't do that
log.info("Making request to REST API")
restClient.makeRequest()

// do that
restClient.makeRequest()
log.info("Made request to REST API")

第一个例子是一个反例,这种日志不知道下面的方法执行了没有。第二个例子在方法出错时会抛出异常,同时日志也不会打印。

分离参数和日志信息

// don't do that
restClient.makeRequest()
log.info("Made request to {} on REST API.", url)

// do that
restClient.makeRequest()
log.info("Made request to REST API. [url={}]", url)

日志中有两种信息,一种是人工写的帮助判断状态的信息,另一种是实际操作中的参数。第一个例子中,参数过长会让日志信息可读性降低,同时添加参数需要重写句子。第二种方式能使得日志结构清晰更好解析,可读性高,同时也更好扩展参数列表。

区别 WARNING 和 ERROR

简单来说,两者的区别为:

  • WARNING:做了某些操作,但是有问题
  • ERROR:没有进行操作

需要注意的是,WARNING 和 ERROR 在无需处理的时候,不应该记录。

业务使用 INFO,技术使用 DEBUG

DEBUG | Saved user to newsletter list. [user="Thomas", email="thomas@tuhrig.de"]
DEBUG | Send welcome mail. [user="Thomas", email="thomas@tuhrig.de"]
INFO  | User registered for newsletter. [user="Thomas", email="thomas@tuhrig.de"]
DEBUG | Started cron job to send newsletter of the day. [subscribers=24332]
INFO  | Newsletter send to user. [user="Thomas"]
INFO  | User unsubscribed from newsletter. [user="Thomas", email="thomas@tuhrig.de"]

简单来说,INFO 记录做了什么,但不关心具体怎么做的;技术有关的内容使用 DEBUG 记录。

这是阿猫精读技术文章的第1篇,本系列会不定期更新,主要内容为技术文章精读(翻译),同时发布在
竹白:猫兄的和谐号列车
博客:阿猫的博客-技术文章精读

License:  CC BY 4.0