log4j2的配置和使用以及与log4j的区别
http://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0
log4j2的配置主要包含两方面功能
1.log配置文件的配置问题
如果进行了local的配置(普通配置,JNDI)配置,直接寻找指定的文件
普通配置:
<context-param><param-name>log4jConfiguration</param-name><param-value>/META-INF/log4j2.xml</param-value></context-param>
JNDI配置:
isLog4jContextSelectorNamed:布尔类型配置,由它选择是否使用JndiContextSelector。如果它设为true的话,那么log4jContextName一定要配置或者在web.xml中指定display-name。并且log4jConfiguration也要配置一个URL,这个URL是log4j2的配置文件地址,但这个不是必须要配置的。
log4jContextName:配置display-name。
log4jConfiguration:log4j配置文件的路径
<context-param><param-name>isLog4jContextSelectorNamed</param-name><param-value>true</param-value></context-param><context-param><param-name>log4jContextName</param-name><param-value>myApplication</param-value></context-param><context-param><param-name>log4jConfiguration</param-name><param-value>file:///etc/myApp/myLogging.xml</param-value></context-param>
2.是否自启动(分为servlet2.5,servlet3.0以上)
servlet2.5:需要自己配置filter,listener
<listener><listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class></listener><filter><filter-name>log4jServletFilter</filter-name><filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class></filter><filter-mapping><filter-name>log4jServletFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>ERROR</dispatcher><dispatcher>ASYNC</dispatcher><!--Servlet3.0w/disabledauto-initializationonly;notsupportedin--!></filter-mapping>
servlet3.0:
log4j2能够在Servlet3.0下正常使用且不用配置。因为在Servlet3.0的API中加入了ServletContainerInitializer,它自动启动了Filter和ServletContextListener(这两个类在Servlet2.5中需要配置)。
对于某些用户来说,自动启动Log4j是有问题的或者不受欢迎的。你可以使用isLog4jAutoInitializationDisabled参数来关闭自动启动。在web.xml中进行如下设置,即可自动取消启动。
<context-param><param-name>isLog4jAutoInitializationDisabled</param-name><param-value>true</param-value></context-param>
一旦你禁止自动初始化,你必须像Servlet2.5 web程序中那样进行初始化操作。而且必须要在其它的框架启动之前启动。
由于log4j2不支持2.4及以下版本的web程序,下面介绍下log4j与log4j2的一些区别
1.pom引入的区别
log4j:
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
log4j2:
<!--log4j2--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>2.1</version></dependency>
2.log4j想要生效,需要在xml中进行配置,而log4j2则有自启动功能
<listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:config/log4j.properties</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>60000</param-value></context-param>
3.Log调用
log4j:
importorg.apache.log4j.Logger;privatefinalLoggerLOGGER=Logger.getLogger(Test.class.getName());
log4j2:
importorg.apache.logging.log4j.Level;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;privatestaticLoggerlogger=LogManager.getLogger(Test.class.getName());
log4j2配置:
<?xmlversion="1.0"encoding="UTF-8"?><configurationstatus="error"><!--先定义所有的appender--><appenders><!--这个输出控制台的配置--><Consolename="Console"target="SYSTEM_OUT"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilterlevel="trace"onMatch="ACCEPT"onMismatch="DENY"/><!--这个都知道是输出日志的格式--><PatternLayoutpattern="%d{HH:mm:ss.SSS}%-5level%class{36}%L%M-%msg%xEx%n"/></Console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--><!--append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true--><Filename="log"fileName="log/test.log"append="false"><PatternLayoutpattern="%d{HH:mm:ss.SSS}%-5level%class{36}%L%M-%msg%xEx%n"/></File><!--添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别onMatch="ACCEPT"onMismatch="DENY"意思是匹配就接受,否则直接拒绝--><Filename="ERROR"fileName="logs/error.log"><ThresholdFilterlevel="error"onMatch="ACCEPT"onMismatch="DENY"/><PatternLayoutpattern="%d{yyyy.MM.dd'at'HH:mm:ssz}%-5level%class{36}%L%M-%msg%xEx%n"/></File><!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFilename="RollingFile"fileName="logs/web.log"filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayoutpattern="%d{yyyy-MM-dd'at'HH:mm:ssz}%-5level%class{36}%L%M-%msg%xEx%n"/><SizeBasedTriggeringPolicysize="2MB"/></RollingFile></appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><loggers><!--建立一个默认的root的logger--><rootlevel="trace"><appender-refref="RollingFile"/><appender-refref="Console"/><appender-refref="ERROR"/><appender-refref="log"/></root></loggers></configuration>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。