定义日志测试类:java
import org.apache.logging.log4j.LogManager;apache
import org.apache.logging.log4j.Logger;app
logger.trace("我是trace信息");ide
logger.debug("我是debug信息");
测试
logger.info("我是info信息");
logger.warn("我是warn信息");
logger.error("我是error信息");
spa
logger.fatal("我是fatal信息"); debug
一、log4j规定了默认的几个级别:trace<debug<info<warn<error<fatal。级别之间是包含的关系,若是设置的是trace,则大于等于这个级别的日志都会输出。日志
二、Log4j有一个默认的配置,它的日志级别是ERROR,只输出到控制台。orm
三、root没有name属性,root至关于根节点,全部的logger都继承了root的log配置,若是没有指定logger的级别,只能打印root级别以上的日志。继承
即便你在不少类里面经过类名.class.getName() 获得不少的logger,并且没有在配置文件的loggers下面作配置,他们也都可以输出,由于他们都继承了root的log配置。
以下设置,root的级别为error,
<root level="error" includeLocation="true">
<appender-ref ref="Console"/>
</root>
<!-- 定义控制台输出 --> Console这些节点不能随便命名的。
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
</Console>
输出结果:
2016-12-22 15:17:28.978 ERROR [main][Log4j2Test.java:15] - 我是error信息
2016-12-22 15:17:28.979 FATAL [main][Log4j2Test.java:16] - 我是fatal信息
若是修改控制台输出,加入以下:
<!--控制台只输出level及以上级别的信息(onMatch),其余的直接拒绝(onMismatch)-->
<ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY"/>
则Console只输出fatal级别以上的日志:
2016-12-22 15:19:05.945 FATAL [main][Log4j2Test.java:16] - 我是fatal信息
设置指定类的日志输出,若是设置级别为info,即便root的级别为error,指定类的info级别以上的扔能输出,至关于重写了root。
<!--additivity开启的话,若是这个logger也是知足root的,因此会被打印两遍。-->
<logger name="test.Log4j2Test" level="info" additivity="false">
<appender-ref ref="ERROR-APPENDER"/>
</logger>
则test.Log4j2Test的全部info级别以上的日志会输出到ERROR-APPENDER文件里,若是ERROR-APPENDER有设置:
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
则test.Log4j2Test只有知足error以上级别的才会输出到文件,要大于logger自己定义的info级别。
最终输出root->logger->appender的级别限制。
若是test.Log4j2Test配置两个AppenderReF,那么两个都会记录知足level="debug"级别的日志,这样会形成多处记录日志,应该开启匹配过滤。
<logger name="test.Log4j2Test" level="debug" additivity="false">
<AppenderReF ref="DEBUG-APPENDER"/>
<AppenderReF ref="ERROR-APPENDER"/>
</logger>
发邮件功能,只有error级别以上的才能发邮件,须要引入mail的jar包。
<SMTP name="Mail" subject="Error Log" to="to@qq.com" from="from@sina.cn" replyTo="from@sina.cn"
smtpProtocol="smtp" smtpHost="smtp.sina.cn" smtpPort="25" bufferSize="50" smtpDebug="false"
smtpPassword="***" smtpUsername="from@sina.cn">
</SMTP>