专业的JAVA编程教程与资源

网站首页 > java教程 正文

关于java日志打印的一些小技巧(java 打日志)

temp10 2024-10-31 15:04:30 java教程 20 ℃ 0 评论

打印日志是日常开发工作及程序上线运行过程中常用的定位问题的一种手段,Java中常用的日志框架有以下几种:Log4j、Logback、SLF4J、JUL、Log4j2、Log4j3、LogIt、Apache Commons Logging。在这里不聊具体的日志框架,只说一些常见的技巧与问题。


关于java日志打印的一些小技巧(java 打日志)

首先,日志是有级别的,例如error、warn、info、debug等等,打印日志时要有选择的打印,不能一股脑的选择某一种级别。例如,异常时打印error日志,定位问题时打印一些info日志。其次,日志保存的时间也要做限制,既不能太长,也不能太短。时间太长,意味着日志文件可能很大,会占用大量磁盘空间。时间太短的话,则不利于定位问题。再者,打印日志时,要使用占位符。使用占位符的好处是,节省内存,提升性能。反之,如果是使用字符串拼接的话,会不断生成新的String对象,占用内存,影响性能。最后,打印异常日志时,一定要打印堆栈信息。堆栈信息会显示具体代码行数,便于快速定位问题。

下面简单聊聊,常见的一些问题。首先,最常见的就是打印日志时不使用占位符,这个最常见。其次就是打印异常时不打印堆栈信息。还有就是打印的日志无法定位问题。关于占位符的问题,这里上面有提过,这里就不细说了。先说下不打印堆栈的问题,有些人喜欢打印e.getMessage(),这种方式不能说完全没用,但是作用不大。例如NullPointerException,打印的内容就是null,对定位问题帮助真的不是很大。再说下打印的日志无法定位问题的情况,在生产环境中出现问题的情况并不多,很多情况往往是数据问题。如果只是简单打印堆栈信息的话,能够快速的定位的具体代码,但是不能知道是什么样数据导致的问题,所以打印日志时除了堆栈信息外,一定要打印一些关键信息,例如数据的主键或关键字段等。

还有就是开发过程中一定要自测一下打印的日志是否符合自己的预期,比如有的人打印异常日志时写这样的代码:

log.error("xxx出现异常:"+e);

这样的日志并不会打印堆栈信息。再比如,阿里巴巴Java开发手册中日志规则有这么一条:

个人觉得这里的正例不是很好,感觉e.getMessage()很多余,首先没有使用占位符,其次打印异常信息时,本身就会打印e.getMessage()的内容,起码Logback框架是这样。

以上仅是个人对日志打印的一些看法,仅供参考。如果不对,欢迎大家指正。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表