您的位置:首页 > 其它

log4j 配置

2016-01-27 11:44 260 查看
DailyRollingFileAppender是日志记录软件包Log4J中的一个Appender,它能够按一定的频度滚动日志记录文件。

如果您不熟悉Log4J,建议阅读一下 使用Log4j进行日志记录

我们可以按下面的方式配置DailyRollingFileAppender:

log4j.rootCategory=INFO,file

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender

log4j.appender.file.DatePattern='.'yyyy-MM-dd

log4j.appender.file.File=run.log

log4j.appender.file.Append=true

log4j.appender.file.Threshold=INFO

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%c %x - %m%n

在DailyRollingFileAppender中可以指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小时)和minutely(每分钟)六个频度,这是通过为 DatePattern选项赋予不同的值来完成的。DatePattern选项的有效值为:

'.'yyyy-MM,对应monthly(每月)
'.'yyyy-ww,对应weekly(每周)
'.'yyyy-MM-dd,对应daily(每天)
'.'yyyy-MM-dd-a,对应half-daily(每半天)
'.'yyyy-MM-dd-HH,对应hourly(每小时)
'.'yyyy-MM-dd-HH-mm,对应minutely(每分钟)

DatePattern中不用处理的文字要放到单引号(')中,如上面的(.)。如果您对此有疑问可以查阅SimpleDateFormat的文档。DailyRollingFileAppender中使用这个类来处理DatePattern。

DatePattern格式化之后的文本作为文件名字的后缀。DailyRollingFileAppender不支持格式化之后的文本作为文件名字的前缀。

DailyRollingFileAppender在每一个日志事件(LoggingEvent)附加(append)之前检查是否需要附加。也就是说如果在一个滚动区间中没有任何日志记录,那么这个区间的日志记录文件就不会形成。

在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是java properties(key=value)【Java特性文件(键=值)】。(这里只说明properties文件)

1、配置根Logger

其语法为:

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …

level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。appenderName:就是指定日志信息输出到哪个地方(这个appenderName其实就是你自己定义的appender的名称)。您可以同时指定多个输出目的地。

例如:log4j.rootLogger=info,A1,B2,C3

2、配置日志信息输出目的地

其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class //

"fully.qualified.name.of.appender.class" 可以指定下面五个目的地中的一个:

1.org.apache.log4j.ConsoleAppender(控制台)

2.org.apache.log4j.FileAppender(文件)

3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

1.ConsoleAppender选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

Target=System.err:默认情况下是:System.out,指定输出控制台

2.FileAppender 选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=mylog.txt:指定消息输出到mylog.txt文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

3.DailyRollingFileAppender 选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=mylog.txt:指定消息输出到mylog.txt文件。

Append=false:默认值是true,即以追加的方式将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

DatePattern=''.''yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:

1)''.''yyyy-MM: 每月

2)''.''yyyy-ww: 每周

3)''.''yyyy-MM-dd: 每天

4)''.''yyyy-MM-dd-a: 每天两次

5)''.''yyyy-MM-dd-HH: 每小时

6)''.''yyyy-MM-dd-HH-mm: 每分钟

4.RollingFileAppender 选项

Threshold=WARN:指定日志消息的输出最低层次。

ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。

File=mylog.txt:指定消息输出到mylog.txt文件。

Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。

MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。

MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

file的相对路径配置:

1、 web.xml配置

<context-param>

<param-name>webAppRootKey</param-name>

<param-value>webapp.root</param-value>

</context-param>

"webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。

可以用System.getProperty("webapp.root")来动态获项目的运行路径。

一般返回结果例如:/usr/local/tomcat6/webapps/项目名

在log4j.properties配置文件,就可以按下面的方式使用${webapp.root}:

log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log

就可以在运行时动态的找出项目的路径

3、配置日志信息的格式

其语法为:

  1). log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

"fully.qualified.name.of.layout.class" 可以指定下面4个格式中的一个:

1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),

   2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

   3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

   4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

1.HTMLLayout 选项

LocationInfo=true:默认值是false,输出java文件名称和行号

Title=my app file: 默认值是 Log4J Log Messages.

2.PatternLayout 选项

ConversionPattern=%m%n :指定怎样格式化指定的消息。

3.XMLLayout 选项

LocationInfo=true:默认值是false,输出java文件和行号

2). log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ss} %c %m%n

这里需要说明的就是日志信息格式中几个符号所代表的含义:

   -X号: X信息输出时左对齐;

%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,

%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%r: 输出自应用启动到输出该log信息耗费的毫秒数

%c: 输出日志信息所属的类目,通常就是所在类的全名

%t: 输出产生该日志事件的线程名

%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

%%: 输出一个"%"字符

%F: 输出日志消息产生时所在的文件名称

%L: 输出代码中的行号

%m: 输出代码中指定的消息,产生的日志具体信息

%n: 输出一个回车换行符,Windows平台为"

",Unix平台为"

"输出日志信息换行

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。

2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。

3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。

应用实例:

private static Log log = LogFactory.getLog(NetPay99BillGateway.class);
web.xml中:貌似没有也可以打印

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

log4j.properties:

#settings for struts
#log4j.logger.org.apache.struts=ERROR
#log4j.logger.org.displaytag=ERROR

#settings for spring
#log4j.logger.org.springframework=ERROR

#settings for ibatis
##log4j.logger.com.ibatis=INFO
##log4j.logger.com.ibatis.common.jdbc.ScriptRunner=INFO
##log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=INFO
##log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=INFO

#settings for sql
#log4j.logger.java.sql=DEBUG,consoleAppender
##log4j.logger.java.sql.Connection=INFO
##log4j.logger.java.sql.ResultSet=INFO
#log4j.logger.java.sql.Statement=DEBUG
#log4j.logger.java.sql.PreparedStatement=DEBUG

通过bean方式:

<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="propertyConfigurer">
<property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
<property name="targetMethod" value="initLogging" />
<property name="arguments">
<list>
<!-- 配置文件位置 -->
<value>${config_path}/log4j.xml</value>
<!-- refreshInterval 检查是否配置文件的是否被修改,单位为毫秒-->
<value>300000</value>
</list>
</property>
</bean>

log4j.xml

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="ERROR" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%-d{HH:mm:ss}][newhieght] %p [%t] %c{1}.%M(%L) | %m%n"/>
</layout>
</appender>

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ERROR" />
<param name="File" value="/logs/newhieght.log" />
<param name="Append" value="true" />

<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd" />

<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%-d{HH:mm:ss}][newhieght] %p [%t] %c{1}.%M(%L) | %m%n" />
</layout>
</appender>
<appender name="PAGE" class="com.newheight.util.PageLogAppender">
<param name="attrName" value="_pagelogs"/>
<param name="cookieName" value="showLogs"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>

<logger name="com.newheight">
<level value="ERROR"/>
</logger>

<!-- Suppress success logging from InteractiveAuthenticationSuccessEvent -->
<logger name="org.acegisecurity">
<level value="ERROR"/>
</logger>

<logger name="com.ibatis">
<level value="ERROR"/>
</logger>

<logger name="org.apache">
<level value="ERROR"/>
</logger>

<logger name="org.springframework">
<level value="ERROR"/>
</logger>

<logger name="java.sql.PreparedStatement">
<level value="ERROR"/>
<appender-ref ref="PAGE"/>
</logger>

<logger name="java.sql.Statement">
<level value="ERROR"/>
<appender-ref ref="PAGE"/>
</logger>

<logger name="java.sql.Connection">
<level value="ERROR"/>
</logger>

<logger name="org.quartz">
<level value="ERROR"/>
</logger>

<logger name="org.directwebremoting">
<level value="ERROR"/>
</logger>

<root>
<level value="ERROR"/>
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</root>

</log4j:configuration>

log4j.property

log4j.rootCategory=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%t] %C.%M(%L) | %m%n %d{yyyy-MM-dd HH:mm:ss,SSS}

log4j.logger.java.sql=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet = debug

log4j.logger.com.yihaodian.front.kernel.spring.YihaodianSplitDbDataSource=ERROR
log4j.logger.com.yihaodian.front=ERROR
log4j.logger.com.yihaodian.channel=debug
log4j.logger.sysLogger=ERROR
log4j.additivity.userLogger=false
log4j.logger.userLogger=ERROR

log4j.xml文件写法

spring+ibatis 输出sql语句 的log4j.xml写法
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/ ">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

value="%d [%t] %p - %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="INFO" />

<param name="LevelMax" value="FATAL" />

</filter>

</appender>
<!-- 正常的日记文件INFO -- WARN -->
<appender name="Access" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="G:/log/access.log" />

<param name="Append" value="false" />

<param name="MaxFileSize" value="1024" />

<param name="MaxBackupIndex" value="2" />

<param name="Threshold" value="INFO" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

value="%d [%t] %p - %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="INFO" />

<param name="LevelMax" value="WARN" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>
<!-- 出错的日记文件ERROR -- FATAL -->
<appender name="Error" class="org.apache.log4j.RollingFileAppender">

<param name="Append" value="false" />

<param name="File" value="G:/log/error.log" />

<param name="MaxFileSize" value="1024" />

<param name="MaxBackupIndex" value="2" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

value="%d [%t] %p - %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="ERROR" />

<param name="LevelMax" value="ERROR" />

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>

<root>

<appender-ref ref="STDOUT" />

<appender-ref ref="Access" />

<appender-ref ref="Error" />

</root>

</log4j:configuration>
=====================================================================================================
增加一些log内容,ibatis输出sql语句的log.
新增一个appender,这里的filter必需要设置成为DEBUG的level. 设置其他的,不会输出sql语句。
<appender name="IBatis" class="org.apache.log4j.ConsoleAppender">

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern"

value="%-4r [%t] %-5p %c %x - %m%n" />

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="DEBUG" />

<param name="LevelMax" value="DEBUG" />

</filter>

</appender>
再增加N个logger.
<logger name="com.ibatis" additivity="true">

<level value="DEBUG" />

</logger>

<logger name="java.sql.Connection" additivity="true">

<level value="DEBUG" />

</logger>

<logger name="java.sql.Statement" additivity="true">

<level value="DEBUG" />

</logger>

<logger name="java.sql.PreparedStatement" additivity="true">

<level value="DEBUG" />

<appender-ref ref="IBatis" />

</logger>

<logger name="java.sql.ResultSet" additivity="true">

<level value="DEBUG" />

<appender-ref ref="IBatis" />

</logger>
上面的logger,也一个都不能少。

<appender-ref ref="IBatis" />指向上面的IBatis,就会和log一起输出,没加<appender-ref ref="IBatis" />标签的,日记里不会显示内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: