logj2与log4j的区别
- log4j2是log4j的升级版,log4j 2.0与以往的1.x有一个明显的不同,其配置文件只能采用.xml, .json或者 .jsn。在默认情况下,系统选择 configuration文件的优先级如下:(classpath为scr文件夹):
1.classpath下名为 log4j-test.json 或者log4j-test.jsn文件
2.classpath下名为 log4j2-test.xml
3.classpath下名为 log4j.json 或者 log4j.jsn文件
4.classpath下名为 log4j2.xml
必须注意.xml 文件的文件名为log4j2
- 加载方式不同 (web.xml)
- log4j 配置方式
- log4j2 配置方式(servlet 2.5以上)
<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>
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<context-param>
<param-name>isLog4jAutoInitializationDisabled</param-name>
<param-value>true</param-value>
</context-param>
lo4j2的配置
- 参数说明
root标签为log的默认输出形式,如果一个类的log没有在loggers中明确指定其输出lever与格式,那么就会采用root中定义的格式。
Appenders标签,其实就是输出,有各种扩展组件,主要类型有:
ConsoleAppender 输出结果到控制台
FileAppender 输出结果到指定文件
RollingFileAppender 同样输出结果到文件,区别是用一个buffer,因此速度会快点
这里介绍下RollingRandomessFile 的相关属性:
name:表示该appender的名称
fileName:表示输出的文件的路径
append:是否追加,true表示追加内容到所在的日志,false表示每次都覆盖
filePattern:表示当日志到达指定的大小或者时间,产生新日志时,旧日志的命名路径。
PatternLayout:和log4j1一样,指定输出日志的格式
Policies:策略,表示日志什么时候应该产生新日志,可以有时间策略和大小策略等
ThresholdFilter :过滤器,如果你要选择控制台只能输出ERROR以上的类别,你就用ThresholdFilter,把level设置成ERROR,onMatch="ACCEPT" onMismatch="DENY" 的意思是匹配就接受,否则直接拒绝
- 配置属性 (resource 路径下)
- java项目
- web项目 (${sys:catalina.home} 是tomcat下的根目录)
<!-- 级别:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="trace" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout
pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</Console>
<File name="log" fileName="target/test.log" append="false">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</File>
<File name="requestReport" fileName="target/report_request.log"
append="false">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
</File>
<RollingFile name="RollingFile" fileName="logs/payrule.log"
filePattern="logs/$${date:yyyy-MM}/payrule-%d{yyyy-MM-dd}.log">
<PatternLayout
pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" />
<!-- 按天生成日志文件 -->
<Policies>
<TimeBasedTriggeringPolicy modulate="true"
interval="1" />
</Policies>
</RollingFile>
</appenders>
<loggers>
<root level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root>
<logger name="report" level="trace" additivity="false">
<appender-ref ref="requestReport"></appender-ref>
</logger>
</loggers>
</configuration>
<!-- 级别: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<configuration status="INFO">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<File name="log" fileName="target/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<File name="requestReport" fileName="target/report_request.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<RollingFile name="RollingFile" fileName="${sys:catalina.home}/sinopaylog/wechatpay/wechatpay.log"
filePattern="${sys:catalina.home}/sinopaylog/wechatpay/$${date:yyyy-MM}/wechatpay-%d{yyyy-MM-dd}.log">
<PatternLayout pattern ="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<!-- 按天生成日志文件 -->
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<root level="DEBUG">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
顺便贴上log4j的配置文件已被以后使用
log4j.rootLogger=${log4j.leve},A1,DRF
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# log4j.appender.A1.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
log4j.appender.A1.layout.ConversionPattern=%d %5p [%F:%L] : %m%n
log4j.appender.DRF=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DRF.Threshold=${log4j.leve}
log4j.appender.DRF.DatePattern='.'yyyy-MM-dd
log4j.appender.DRF.File=logs/sinopay-service-payrules.log
log4j.appender.DRF.Append=true
log4j.appender.DRF.layout=org.apache.log4j.PatternLayout
log4j.appender.DRF.layout.ConversionPattern=[%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n
###\u8F93\u51FASQL
log4j.logger.com.ibatis=${log4j.ale}
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=${log4j.ale}
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=${log4j.leve}
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=${log4j.ale}
log4j.logger.java.sql.Connection=${log4j.ale}
log4j.logger.java.sql.Statement=${log4j.ale}
log4j.logger.java.sql.PreparedStatement=${log4j.ale}
org.springframework = ${log4j.ale}
org.apache.zookeeper = ${log4j.ale}