log4j及log4j2的配置

2,755 阅读3分钟
原文链接: blog.csdn.net

版权声明:本文地址blog.csdn.net/caib1109/ar…
欢迎非商业目的的转载, 作者保留一切权利


目录:

log4j 还是 log4j 2 ?
- log4j 兼容jdk6, 最新版本是1.2.17(不再更新)
- log4j2 不兼容jdk7之前的版本, 最新版本是2.6.x (截止2016-06-15)
但是,log4j 2 采用了异步写文件的机制,比log4j 提高了10倍以上的性能。

所以,对于还在用Java6的服务器来说 请使用log4j。

新项目,尽量使用jdk 7 和 log4j 2

Java Web项目指定log4j.properties

<!-- 在 WebContent/WEB-INF/web.xml 中添加 -->
<listener>
    <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
</listener>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>6000</param-value>
</context-param>

log4j

### set log levels ###
#设置rootLogger使用名为E和I的输出设置
#第一个逗号前是根日志等级
log4j.rootLogger = DEBUG , E , I

#windows下绝对路径以tomcat安装位置所在的盘符为准,
#如tomcat安装位置在D盘,则d:\\wls\\apache\\applogs\\
mylog.home=/wls/apache/applogs/

## 管理引用的第三方 jar包的日志输出, OFF是关闭  
log4j.logger.org.springframework=OFF  
log4j.logger.org.apache.struts2=OFF  
log4j.logger.com.opensymphony.xwork2=OFF  
log4j.logger.com.ibatis=OFF  
log4j.logger.org.hibernate=OFF  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG

### Info Log File ###
log4j.appender.I = org.apache.log4j.RollingFileAppender
log4j.appender.I.File = ${mylog.home}info.log
log4j.appender.I.Append = true
# 防止在linux和windows上跑,中文编码不一致,乱码
log4j.appender.I.encoding=UTF-8
log4j.appender.I.Threshold = INFO
log4j.appender.I.MaxFileSize= 20000KB#DailyRollingFileAppender不支持
log4j.appender.I.MaxBackupIndex= 3   #DailyRollingFileAppender不支持
log4j.appender.I.layout = org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}[%5p] [ %c %4L] %m%n

###  Error Log file ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File = ${pafa.log.home}error.log 
log4j.appender.E.Append = true
# 防止在linux和windows上跑,中文编码不一致,乱码
log4j.appender.E.encoding=UTF-8
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.MaxFileSize= 20000KB
log4j.appender.E.MaxBackupIndex= 3
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %p ] [ %c %4L ] %m%n

巧用rootlevel和package日志level禁止hibernate日志输出

#根使用FATAL(FATAL>ERROR>INFO)级别,这样hibernate就不会输出了
log4j.rootLogger=FATAL, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

#  com.foo.myapp 使用INFO级别输出
log4j.logger.com.foo.myapp=INFO

log4j2

log4j 2 支持 properties 格式, xml 格式, json 格式的配置文件。为了降低从 log4j 迁移到 log4j 2 的学习成本, 先使用 properties 格式。

src/log4j2.properties 内容如下,注意文件名要带 “2”:

status = error
name = PropertiesConfig

property.filename = target/rolling/rollingtest.log

filters = threshold

filter.threshold.type = ThresholdFilter
filter.threshold.level = debug

#appenders = console, I, E
#不要输出到console,要养成看日志文件的习惯
appenders =I, E

#appender.console.type = Console
#appender.console.name = STDOUT
#appender.console.target = SYSTEM_OUT
#appender.console.layout.type = PatternLayout
#appender.console.layout.pattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ %c ] %m%n

appender.I.type = RollingFile
appender.I.name = InfoRollingFile
appender.I.fileName = /spider/logs/info.log
appender.I.filePattern = /spider/logs/info_%d{yyyy-MM-dd}_%i.log
appender.I.layout.type = PatternLayout
appender.I.layout.pattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ %c ] %m%n
appender.I.policies.type = Policies
appender.I.policies.time.type = TimeBasedTriggeringPolicy
appender.I.policies.time.interval = 1
appender.I.policies.time.modulate = true
appender.I.policies.size.type = SizeBasedTriggeringPolicy
appender.I.policies.size.size=20M
appender.I.strategy.type = DefaultRolloverStrategy
appender.I.strategy.max = 100


appender.E.type = RollingFile
appender.E.name = ErrorRollingFile
appender.E.fileName = /spider/logs/error.log
appender.E.filePattern = /spider/logs/error_%d{yyyy-MM-dd}_i.log
appender.E.layout.type = PatternLayout
appender.E.layout.pattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ %c ] %m%n
appender.E.policies.type = Policies
appender.E.policies.time.type = TimeBasedTriggeringPolicy
appender.E.policies.time.interval = 1
appender.E.policies.time.modulate = true
appender.E.policies.size.type = SizeBasedTriggeringPolicy
appender.E.policies.size.size=20M
appender.E.strategy.type = DefaultRolloverStrategy
appender.E.strategy.max = 100


rootLogger.level = info
#rootLogger.appenderRefs = stdout,I,E
rootLogger.appenderRefs =I,E
#rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.I.ref = InfoRollingFile
rootLogger.appenderRef.I.level = info
rootLogger.appenderRef.E.ref = ErrorRollingFile
rootLogger.appenderRef.E.level = error

log4j2的.xml的配置文件, 支持指定哪些包输出, .properties的配置文件没试过.

用Additivity禁止hibernate日志输出

logging.apache.org/log4j/2.x/m…

Perhaps it is desired to eliminate all the TRACE output from everything except com.foo.Bar. Simply changing the log level would not accomplish the task. Instead, the solution is to add a new logger definition to the configuration:

logging.apache.org/log4j/2.x/m…

It is possible to disable logging for certain parts of the application

如前文所述, log4j 允许你在不修改程序代码的前提下, 重新定义logging的行为. 禁止程序某些部分的日志输出是可行的.

src/log4j2.xml 内容如下,注意文件名中的“2”不可省略:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    </Console>
    <File name="I" fileName="logs/info.log" bufferedIO="false"
        advertise="true">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    </File>
    <File name="E" fileName="logs/error.log" bufferedIO="false"
        advertise="true">
        <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    </File>
</Appenders>

  <Loggers>
    <!--制定输出com包中的logger-->
    <Logger name="com" level="debug"> 
      <AppenderRef ref="Console"/>
      <AppenderRef ref="I"/>
      <AppenderRef ref="E"/>
    </Logger>

    <!--忽略hibernate等第三方包的日志-->
    <Root level="OFF">
    </Root>

  </Loggers>
</Configuration>

log4j 2 异步配置

详细请看my.oschina.net/musings/blo…

关键配置:

<appender name="xxx" class="org.apache.log4j.AsyncAppender"> 
<!--缓存大小影响性能 256 时最佳-->
<param name="BufferSize" value="512"/> 

版权声明:本文地址blog.csdn.net/caib1109/ar…
欢迎非商业目的的转载, 作者保留一切权利