1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是版本号):
log4j-core-xx.jar
log4j-api-xx.jar
2. 或者maven引入:
org.apache.logging.log4j
log4j-api
2.4.1
org.apache.logging.log4j
log4j-core
2.4.1
private static Logger logger = LogManager.getLogger(MyApp.class.getName());
这里getLogger有一个参数指定的是这个logger的名称,这个名称在配置文件里面可是有需要的,这个待会儿再说。
声明了Logger对象,我们就可以在代码中使用他了。
4.配置文件
log4j是apache的一个开源项目,首先需要注意的是,log4j 2.x与以往的1.x有一个明显的不同,其配置文件只能采用.xml, .json或者 .jsn。
首先介绍loggers标签,用于定义logger的lever和所采用的appender,其中appender-ref必须为先前定义的appenders的名称,例如,此处为Console。那么log就会以appender所定义的输出格式来输出log。
root标签为log的默认输出形式,如果一个类的log没有在loggers中明确指定其输出lever与格式,那么就会采用root中定义的格式。需要注意的是 additivity选项,如果设置为true(默认值)则hellolog的log会被打印两次,第二次打印是由于hellolog同时也满足root里面定义的error。5.其他配置
这里我们的配置文件里面的注释算比较详细的了。所以就大家自己看了。有一个比较有意思的是ThresholdFilter ,一个过滤器,其实每个appender可以定义很多个filter,这个功能很有用。如果你要选择控制台只能输出ERROR以上的类别,你就用ThresholdFilter,把level设置成ERROR,onMatch="ACCEPT" onMismatch="DENY" 的意思是匹配就接受,否则直接拒绝,当然有其他选择了,比如交给其他的过滤器去处理了之类的,以后再慢慢琢磨。
Layout配置:
通常,用户不止希望能定义log输出的位置,还希望可以定义输出的格式。这就可以通过将Appender与一个layout相关联来实现。Log4j中定义了一种类似C语言printf函数的打印格式,如"%r [%t] %-5p %c - %m%n" 格式在真实环境下会打印类似如下的信息:
176 [main] INFO org.foo.Bar - Located nearest gas station.
其中,各个字段的含义分别是:
%r 指的是程序运行至输出这句话所经过的时间(以毫秒为单位);
%t 指的是发起这一log request的线程;
%c 指的是log的level;
%m 指的是log request语句携带的message。
%n 为换行符。
6. 一个实用的配置文件:
我们用日志一方面是为了记录程序运行的信息,在出错的时候排查之类的,有时候调试的时候也喜欢用日志。所以,日志如果记录的很乱的话,看起来也不方便。所以我可能有下面一些需求:
1)我正在调试某个类,所以,我不想让其他的类或者包的日志输出,否则会很多内容,所以,你可以修改上面root的级别为最高(或者谨慎起见就用ERROR),然后,加一个针对该类的logger配置,比如第一个配置文件中的设置,把他的level设置trace或者debug之类的,然后我们给一个appender-ref是定义的File那个appender(共三个appender,还记得吗),这个appender的好处是有一个append为false的属性,这样,每次运行都会清空上次的日志,这样就不会因为一直在调试而增加这个文件的内容,查起来也方便,这个和输出到控制台就一个效果了。
2)我已经基本上部署好程序了,然后我要长时间运行了。我需要记录下面几种日志,第一,控制台输出所有的error级别以上的信息。第二,我要有一个文件输出是所有的debug或者info以上的信息,类似做程序记录什么的。第三,我要单独为ERROR以上的信息输出到单独的文件,如果出了错,只查这个配置文件就好了,不会去处理太多的日志,看起来头都大了。怎么做呢,很简单。
>首先,在appenders下面加一个Console类型的appender,通过加一个ThresholdFilter设置level为error。(直接在配置文件的Console这个appender中修改)
>其次,增加一个File类型的appender(也可以是RollingFile或者其他文件输出类型),然后通过设置ThresholdFilter的level为error,设置成File好在,你的error日志应该不会那么多,不需要有多个error级别日志文件的存在,否则你的程序基本上可以重写了。
这里可以添加一个appender,内容如下:
>然后,增加一个RollingFile的appender,设置基本上同上面的那个配置文件。
>最后,在logger中进行相应的配置。不过如果你的logger中也有日志级别的配置,如果级别都在error以上,你的appender里面也就不会输出error一下的信息了。
7.与spring mvc的整合
maven引入依赖包:
org.apache.logging.log4j
log4j-web
2.4.1
isLog4jAutoInitializationDisabled
true
光有这个配置是不行滴,因为mybatis加载日志组件是有顺序的,他会按
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
的顺序查找。所以,如果在web应用中用了spring之类的框架,他会包含commons-log包,根据优先级,他就不会去用log4j了,所以还得在mybatis配置文件中配置一条语句,如下: