您的位置:首页 > 编程语言 > Java开发

log4j, log4j2 实用配置;log4j 2 异步配置

2016-05-29 11:29 387 查看
版权声明:本文地址http://blog.csdn.net/caib1109/article/details/51407091

欢迎非商业目的的转载, 作者保留一切权利

目录:

Java Web项目指定log4jproperties

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

log4j2
用Additivity禁止hibernate日志输出

log4j 2 异步配置

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日志输出

http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity

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:

http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax

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 异步配置

详细请看http://my.oschina.net/musings/blog/98234

关键配置:

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


版权声明:本文地址http://blog.csdn.net/caib1109/article/details/51407091

欢迎非商业目的的转载, 作者保留一切权利
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java log4j hibernate