咱们在编写代码时,都知道在关键算法,逻辑性较强的地方添加注释。一来提升了代码的可维护性。二来让代码有了自可读性。若是咱们把注释理解为静态的自可读性。那么,程序在运行时,咱们如何才能知道程序的实际运行路径呢?这就是今天的主角--日志!算法
有不少朋友,不太喜欢打日志。好几百,甚至上千行的代码。啪,啪,啪的全写完!自信满满,一行日志也没打。联调,测试,上线都没问题。系统运行一段时间后,莫名的出现问题。那么,究竟是哪一个地方出现问题了?方法的入参是什么?系统走到哪一步了?一无所知。这下就只剩抓瞎了。从这里咱们应该能够看出,打日志是很是有必要的。咱们梳理一下,打日志有诸多好处。api
最后: 记录日志是给本身分析问题,解决bug用的。咱们尽可能记录的尽量简洁,易懂以及清晰,理想状况下甚至能经过日志还原一次请求,一次调用的全过程。服务器
上面咱们说了为何须要打日志。如今咱们说说,如何打日志。以咱们最经常使用slf4j这个日志组件来讲,它对应的日志级别有: trace, debug,info,warn,error这五个日志级别。其范围依次为: error>warn>info>debug>trace。微信
咱们在平常开发中:框架
以log4j+slf4j-api为例:性能
pom.xml依赖:单元测试
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
如下打日志例子:测试
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); } }
咱们经过占位符的形式,记录日志。不建议使用字符串拼接的形式来记录日志。spa
在Java中,常见的日志框架有.net
在平常的开发中,咱们一般都是经过Slf4j+的实现。以上述案例中,咱们就说到了(slf4j+log4j的形式)。在实际使用中,咱们也能够经过slf4j+ logback日志的形式作为日志组合。
ps:各个日志框架的性能不在本文讨论之中。有兴趣的童鞋,可自行测试。
有好几天没有写文章了,手有点生。闲暇时翻翻本身记录下来的文章,就像光着脚丫在沙滩上奔跑了许久后,时而回头还能看到被海水冲淡的脚印同样。也以为挺有意思!
相关阅读:
《说说单元测试》
《一个Java细节》
扫码关注,一块儿进步
我的博客: http://www.andyqian.com