博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说Java日志
阅读量:6332 次
发布时间:2019-06-22

本文共 2257 字,大约阅读时间需要 7 分钟。

hot3.png

 

本文首发于个人微信公众号《andyqian》,期待你的关注

前言

我们在编写代码时,都知道在关键算法,逻辑性较强的地方添加注释。一来提高了代码的可维护性。二来让代码有了自可读性。如果我们把注释理解为静态的自可读性。那么,程序在运行时,我们如何才能知道程序的实际运行路径呢?这就是今天的主角--日志!

为什么要打日志?

有很多朋友,不太喜欢打日志。好几百,甚至上千行的代码。啪,啪,啪的全写完!自信满满,一行日志也没打。联调,测试,上线都没问题。系统运行一段时间后,莫名的出现问题。那么,到底是哪个地方出现问题了?方法的入参是什么?系统走到哪一步了?一无所知。这下就只剩抓瞎了。从这里我们应该可以看出,打日志是非常有必要的。我们梳理一下,打日志有诸多好处。

  1. 最直接的好处就是方便解决BUG了。
  2. 记录请求的耗时时间,特别是接入第三方供应商时,调用远程服务时,我们可以通过日志来记录请求的耗时时间。
  3. 对关键业务,关键算法的入参,以及结果打点并记录下来。

最后: 记录日志是给自己分析问题,解决bug用的。我们尽量记录的尽可能简洁,易懂以及清晰,理想情况下甚至能通过日志还原一次请求,一次调用的全过程。

如何打日志?

上面我们说了为什么需要打日志。现在我们说说,如何打日志。以我们最常用slf4j这个日志组件来说,它对应的日志级别有: trace, debug,info,warn,error这五个日志级别。其范围依次为: error>warn>info>debug>trace。

我们在日常开发中:

  1. 在开发初期,我们可以在进入方法时用info模式的日志级别,记录方法的入,出参。在远程方法调用前,调用后,使用info级别。记录远程方法的耗时。在try{}catch处,使用error级别日志级别,记录信息。以方便用来快速查找,以及分析问题。
  2. 服务运行稳定一段时间后,我们可以将必须记录的参数,修改为warn级别。日志级别设置为warn。也就是说,只显示warn和error级别中的日志。(有很多公司,都以error级别的日志作为报警信息,发送给对应的应用负责人。)
  3. 在生产环境中,禁止启用debug级别的日志。因为debug级别的日志会显示很多没必要的日志。这样很容易造成服务器资源浪费。严重时甚至造成服务器撑满。直接导致服务不可用。
  4. 凡事都是物极必反。同样的,日志也不是越多越好,过多的打印日志,同样的也会造成服务性能下降。甚至造成服务器压力过大。直接影响服务的可用性。
  5. 我们可以通过如下形式来记录日志:

以log4j+slf4j-api为例:

pom.xml依赖:

org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-log4j12
1.7.25
test
log4j
log4j
1.2.17

以下打日志例子:

import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class LogTest {    private static Logger logger = LoggerFactory.getLogger(LogTest.class);    @Test   public void testLog(){        String name="andyqian";        String blog = "www.andyqian.com";        //就日志        logger.debug("name: {} and blog : {} ", name, blog);    }}

我们通过占位符的形式,记录日志。不建议使用字符串拼接的形式来记录日志。

常用Java日志框架

在Java中,常见的日志框架有

  1. JDK自带的JDK Logger。
  2. Apche commons Logging。
  3. Apache log4j。
  4. Slf4j ( Simple Logging Facade for Java)
  5. Logback
  6. Apache log4j 2 (这其实是Apache log4j的升级版本。在log4j的基础上,性能有进一步的提高。)

在日常的开发中,我们通常都是通过Slf4j+的实现。以上述案例中,我们就说到了(slf4j+log4j的形式)。在实际使用中,我们也可以通过slf4j+ logback日志的形式做为日志组合。

ps:各个日志框架的性能不在本文讨论之中。有兴趣的童鞋,可自行测试。

小结

有好几天没有写文章了,手有点生。闲暇时翻翻自己记录下来的文章,就像光着脚丫在沙滩上奔跑了许久后,时而回头还能看到被海水冲淡的脚印一样。也觉得挺有意思!

相关阅读:

《》

《》

《》

《》

 

 扫码关注,一起进步

个人博客: 

转载于:https://my.oschina.net/u/1462914/blog/1791450

你可能感兴趣的文章
LINQ学习笔记(8) 标准查询运算符(下)
查看>>
[NOIP 2014复习]第三章:动态规划——NOIP历届真题回想
查看>>
ASP.NET MVC对WebAPI接口操作(添加,更新和删除)
查看>>
php上传文件大小限制
查看>>
查找是否已安装命令
查看>>
shell 题
查看>>
内核线程与用户线程的一点小总结 《程序员的自我修养》·笔记
查看>>
Mongodb 的学习
查看>>
《Discuz安装时候出现乱码 -- 问题解决方法》
查看>>
iOS中打包.a静态库
查看>>
curl_setopt — 设置 cURL 传输选项
查看>>
CefSharp的引用、配置、实例
查看>>
Tips on converting LotusScript to Java
查看>>
UIScrollView中图片放大后不居中,或居中后移动有偏差解决办法
查看>>
charles使用教程指南
查看>>
重排序列 & 拓扑排序
查看>>
HTTP.sys远程执行代码漏洞
查看>>
Android 5.0 API新增和改进
查看>>
区分Integer.getInteger和Integer.valueOf、Integer.parseInt() 的使用方法
查看>>
(linux shell)第二章--命令之乐(一)
查看>>