Logger的使用。log4j和slf4j

(Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,欢迎交流和沟通,Wx:IT_Ezra,QQ 654303408。 有问题讨论也可联系我。)

(PS:Log(日志)对于程序员来说,是一个非常非常重要的工具,无论是对于开发,对于运维,对于测试来说,都是非常重要的信息,下面我们来介绍一下日志。)

在我刚开始学习编程的时候,我的导生告诉我,作为程序员,必须要会单步调试,会打断电,会看控制台。其实这种说法转换到现在来说就是:会打log,会看日志文档。
对于现在成熟的框架项目,日志已经成为了基本,作为运营,第一基本功就是要会看日志文档,而作为变成的时候,我们经常会在代码中打log,来进行过程判断,然后再根据日志文档进行排查bug和解决bug。常见的封装好的logger包目前有log4j,slf4j,而slf4j实际上是根据某些功能对log4j进行了一定的封装。
对于日志,我们首先要了解一个概念就是,日志级别,日志是分级别的,从低到高分别是。logger.debug,logger.info,logger.warn,logger.error,logger.fatal。其中低级别的会输出高级别的信息,高级别的不会输出低级别的,什么意思呢?就是在配置日志的时候,会有一个配置文件,来选择我对这个系统的日志级别进行选择,如果我选择debug级别的。那么,fatal,error,warn,info,debug。这些日志都会被展示出来。而如果我选择fatal级别的。那么日志文件里面只会有fatal的日志。你对于logger.error等等都不会输出。

这样会导致什么问题呢?

如果错误的选择日志级别,可能会导致吞异常!!!这个就很严重了,你的程序出现了异常,但是你却通过日志文档看不到异常在哪里。因为你选择了高级别的日志级别。所以,低等级的日志就被吞掉了。但是讲道理来说,一般不会出现这种情况。因为我们的日志级别通常会选择info,或者error,而我们的异常一般会通过error来输出。所以,针对不同的情况,选择不同的日志输出方式也很简单。

哪些输出方式呢??

上文也介绍了。有五种,我们通常使用的,debug,info,error。在调试状态下的时候使用debug,(但是这个也不是硬性规定),如果想输出某一个内容来进行判断,我们通常用到info,也就是information的简写。然后就是error,通常用error来输出异常。

log4j和slf4j有一个很大的区别就是:方法的用法。

什么意思呢?log4j的日志方法通常类似这样:
			logger.info("-------------------用户昵称" + senseAgroMember.getMemberNickname() + "--------------");

slf4j的日志方法通常是这样
			logger.info("-------------------用户昵称={}" ,senseAgroMember.getMemberNickname() + "--------------");

有什么区别,如果用“,”,是使用{}占位符。避免字符串连接操作,减少String对象(不可变)带来的内存开销。我们知道String在java里面是 final static的。所以用“+”,会重新开辟空间,然后生成新的String对象,浪费空间。

日志的分类

这里就是一个很重要的知识点。就是分开打印。为什么需要分开打印。作为程序员,要学会用计算机的思维去思考问题。计算机的特点是高效,笨。什么意思,就是当我们选择使用日志的时候,如果不做任何配置,那么,所有的日志都会导入一个日志文件,然后这个日志文件的内存就会一直变大,里面的内容杂乱无章。只要是日志就往里面放。对于这样的日志,没有任何意义。顶多只能在运行的时候观察一下,但是如果需要通过日志文件来进行二次使用,是根本不可能的。那么我们需要对日志进行分类。这里的分类分两种,这两种是并行的:
  • 一种是按时间切分。(修改tomcat的catalina.sh文件,具体操作可以去网上查询)。我们可以按天分类,并且将日志文件的名字也按天命名,这样查询的时候就会非常方便。

  • 同时我们还要按需求分类,什么意思,比如说,我的异常都打印到一个日志,我有不同的模块,我的每一个模块的日志划分到某一个模块日志文件,比如我的登录日志,就放到登录日志文件里面,查询日志就放到查询日志里面,甚至还能细化到,订单查询,用户查询分到不同的日志文件里面。

我这次分享的内容就是这些,希望每个人都能好好的使用日志。让我们的代码更加仅仅有条。bug更少,效率更高。谢谢!

猜你喜欢

转载自blog.csdn.net/sinat_29039125/article/details/88241324