Log4j 环境配置
1.检查web.xml
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.xml</param-value>
</context-param>
.....
<!--Initialize log4j, including setting a system property (webAppRootKey) to the web application root directory.-->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
2.Log4j文件内容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<!-- ========================== 自定义输出格式说明================================ -->
<!-- %p 输出优先级,即TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
<!-- #%r 输出自应用启动到输出该log信息耗费的毫秒数 -->
<!-- #%c 输出所属的类目,通常就是所在类的全名 -->
<!-- #%t 输出产生该日志事件的线程名 -->
<!-- #%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” -->
<!-- #%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 -->
<!-- #%l 输出日志事件的发生位置,包括类的全名、方法名,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) -->
<!-- ========================================================================== -->
<!-- ========================== 输出方式说明================================ -->
<!-- Log4j提供的appender有以下几种: -->
<!-- org.apache.log4j.ConsoleAppender(控制台), -->
<!-- org.apache.log4j.FileAppender(文件), -->
<!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
<!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), -->
<!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) -->
<!-- ========================================================================== -->
<!--
*************************************************************************************
Appenders
*************************************************************************************
-->
<!-- 输出到控制台中 -->
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c.java:%L) - %m%n" />
</layout>
</appender>
<!-- 输出到日志文件 -->
<!--<appender name="rollingFileAppender" class="org.apache.log4j.RollingFileAppender">-->
<!--<!– 设置File参数:日志输出文件名 –>-->
<!--<param name="File" value="${webapp.com.pahaoche.toc.item}/logs/item-daily.log" />-->
<!--<!– 设置是否在重新启动服务时,在原有日志的基础添加新日志 –>-->
<!--<param name="Append" value="true" />-->
<!--<!– 设置文件大小 –>-->
<!--<param name="MaxFileSize" value="1MB" />-->
<!--<!– 设置文件备份 –>-->
<!--<param name="MaxBackupIndex" value="10000" />-->
<!--<!– 设置输出文件项目和格式 –>-->
<!--<layout class="org.apache.log4j.PatternLayout">-->
<!--<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%l) - %m%n" />-->
<!--</layout>-->
<!--</appender>-->
<!-- 输出到每日日志文件 -->
<appender name="dailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 设置File参数:日志输出文件名 -->
<param name="File" value="/tmp/log/tomcat-sms.log" />
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c.java:%L) - %m%n" />
</layout>
</appender>
<!-- 输出到每日ERROR日志文件 -->
<appender name="dailyErrorRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Threshold" value="ERROR"/>
<!-- 设置File参数:日志输出文件名 -->
<param name="File" value="/tmp/log/tomcat-sms-error.log" />
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c.java:%L) - %m%n" />
</layout>
</appender>
<!-- 输出到邮件 -->
<!-- <appender name="emailAppender" class="org.apache.log4j.net.SMTPAppender"> -->
<!-- <param name="Threshold" value="ERROR"/> -->
<!-- <param name="BufferSize" value="128" /> -->
<!-- <param name="SMTPHost" value="smtp.wind.com.cn" /> -->
<!-- <param name="SMTPPort" value="250" /> -->
<!-- <param name="SMTPUsername" value="" /> -->
<!-- <param name="SMTPPassword" value="" /> -->
<!-- <param name="From" value="Service@wind.com.cn" /> -->
<!-- <param name="To" value="yliu.louis@wind.com.cn,ygji@wind.com.cn" /> -->
<!-- <param name="Subject" value="WINDBBS Error Log" /> -->
<!-- <param name="LocationInfo" value="true" /> -->
<!-- <param name="SMTPDebug" value="false" /> -->
<!-- <layout class="org.apache.log4j.PatternLayout"> -->
<!-- <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p: %m%n"/> -->
<!-- </layout> -->
<!-- </appender> -->
<!--
*************************************************************************************
The Following 5 logs can be turned on and off while the server is running
LIVE in order to trace the SQL and/or all JDBC coming out of the application.
To turn a log on, set the level value to INFO or DEBUG (to see class name and
line number information in the log) The DEBUG setting is much more inefficient
but the output is much more useful.
To turn off JDBC logging completely, you must set all 5 logs to a level higher
than ERROR (FATAL is suggested.)
*************************************************************************************
-->
<logger name="com.alibaba.dubbo" additivity="false">
<level value="ERROR" />
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<!-- log SQL (pre-execution) plus exceptions caused by SQL -->
<logger name="jdbc.sqlonly" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="consoleAppender" />
<!-- <appender-ref ref="emailAppender"/> -->
</logger>
<!-- log SQL with timing information, post execution -->
<logger name="jdbc.sqltiming" additivity="false">
<level value="FATAL"/>
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<!-- only use the two logs below to trace ALL JDBC information,
NOTE: This can be very voluminous! -->
<!-- log all jdbc calls except ResultSet calls -->
<logger name="jdbc.audit" additivity="false">
<level value="FATAL"/>
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<!-- log the jdbc ResultSet calls -->
<logger name="jdbc.resultset" additivity="false">
<level value="FATAL"/>
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<!-- log connection open/close events and dump of all open connection numbers -->
<logger name="jdbc.connection" additivity="false">
<level value="FATAL"/>
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<!--
*************************************************************************************
Item logger
*************************************************************************************
-->
<logger name="com.pahaoche.toc.item" additivity="false">
<level value="INFO" />
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<logger name="net.sf.ehcache" additivity="false">
<level value="WARN" />
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="consoleAppender" />
</logger>
<!--
*************************************************************************************
by default, log everything to the console with a level of INFO or higher
*************************************************************************************
-->
<root>
<level value="INFO" />
<appender-ref ref="dailyRollingFileAppender" />
<appender-ref ref="dailyErrorRollingFileAppender" />
<appender-ref ref="consoleAppender" />
<!-- <appender-ref ref="emailAppender"/> -->
</root>
</log4j:configuration>
3.若不能自动导入Log4j的dtd文件,备用dtd文件, log4j.dtd文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Authors: Chris Taylor, Ceki Gulcu. -->
<!-- Version: 1.2 -->
<!-- A configuration element consists of optional renderer
elements,appender elements, categories and an optional root
element. -->
<!ELEMENT log4j:configuration (renderer*, appender*,plugin*, (category|logger)*,root?,
(categoryFactory|loggerFactory)?)>
<!-- The "threshold" attribute takes a level value below which -->
<!-- all logging statements are disabled. -->
<!-- Setting the "debug" enable the printing of internal log4j logging -->
<!-- statements. -->
<!-- By default, debug attribute is "null", meaning that we not do touch -->
<!-- internal log4j logging settings. The "null" value for the threshold -->
<!-- attribute can be misleading. The threshold field of a repository -->
<!-- cannot be set to null. The "null" value for the threshold attribute -->
<!-- simply means don't touch the threshold field, the threshold field -->
<!-- keeps its old value. -->
<!ATTLIST log4j:configuration
xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/"
threshold (all|trace|debug|info|warn|error|fatal|off|null) "null"
debug (true|false|null) "null"
reset (true|false) "false"
>
<!-- renderer elements allow the user to customize the conversion of -->
<!-- message objects to String. -->
<!ELEMENT renderer EMPTY>
<!ATTLIST renderer
renderedClass CDATA #REQUIRED
renderingClass CDATA #REQUIRED
>
<!-- Appenders must have a name and a class. -->
<!-- Appenders may contain an error handler, a layout, optional parameters -->
<!-- and filters. They may also reference (or include) other appenders. -->
<!ELEMENT appender (errorHandler?, param*,
rollingPolicy?, triggeringPolicy?, connectionSource?,
layout?, filter*, appender-ref*)>
<!ATTLIST appender
name CDATA #REQUIRED
class CDATA #REQUIRED
>
<!ELEMENT layout (param*)>
<!ATTLIST layout
class CDATA #REQUIRED
>
<!ELEMENT filter (param*)>
<!ATTLIST filter
class CDATA #REQUIRED
>
<!-- ErrorHandlers can be of any class. They can admit any number of -->
<!-- parameters. -->
<!ELEMENT errorHandler (param*, root-ref?, logger-ref*, appender-ref?)>
<!ATTLIST errorHandler
class CDATA #REQUIRED
>
<!ELEMENT root-ref EMPTY>
<!ELEMENT logger-ref EMPTY>
<!ATTLIST logger-ref
ref CDATA #REQUIRED
>
<!ELEMENT param EMPTY>
<!ATTLIST param
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!-- The priority class is org.apache.log4j.Level by default -->
<!ELEMENT priority (param*)>
<!ATTLIST priority
class CDATA #IMPLIED
value CDATA #REQUIRED
>
<!-- The level class is org.apache.log4j.Level by default -->
<!ELEMENT level (param*)>
<!ATTLIST level
class CDATA #IMPLIED
value CDATA #REQUIRED
>
<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named category. -->
<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
<!ATTLIST category
class CDATA #IMPLIED
name CDATA #REQUIRED
additivity (true|false) "true"
>
<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named logger. -->
<!ELEMENT logger (level?,appender-ref*)>
<!ATTLIST logger
name CDATA #REQUIRED
additivity (true|false) "true"
>
<!ELEMENT categoryFactory (param*)>
<!ATTLIST categoryFactory
class CDATA #REQUIRED>
<!ELEMENT loggerFactory (param*)>
<!ATTLIST loggerFactory
class CDATA #REQUIRED>
<!ELEMENT appender-ref EMPTY>
<!ATTLIST appender-ref
ref CDATA #REQUIRED
>
<!-- plugins must have a name and class and can have optional parameters -->
<!ELEMENT plugin (param*, connectionSource?)>
<!ATTLIST plugin
name CDATA #REQUIRED
class CDATA #REQUIRED
>
<!ELEMENT connectionSource (dataSource?, param*)>
<!ATTLIST connectionSource
class CDATA #REQUIRED
>
<!ELEMENT dataSource (param*)>
<!ATTLIST dataSource
class CDATA #REQUIRED
>
<!ELEMENT triggeringPolicy ((param|filter)*)>
<!ATTLIST triggeringPolicy
name CDATA #IMPLIED
class CDATA #REQUIRED
>
<!ELEMENT rollingPolicy (param*)>
<!ATTLIST rollingPolicy
name CDATA #IMPLIED
class CDATA #REQUIRED
>
<!-- If no priority element is specified, then the configurator MUST not -->
<!-- touch the priority of root. -->
<!-- The root category always exists and cannot be subclassed. -->
<!ELEMENT root (param*, (priority|level)?, appender-ref*)>
<!-- ==================================================================== -->
<!-- A logging event -->
<!-- ==================================================================== -->
<!ELEMENT log4j:eventSet (log4j:event*)>
<!ATTLIST log4j:eventSet
xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/"
version (1.1|1.2) "1.2"
includesLocationInfo (true|false) "true"
>
<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?,
log4j:locationInfo?, log4j:properties?) >
<!-- The timestamp format is application dependent. -->
<!ATTLIST log4j:event
logger CDATA #REQUIRED
level CDATA #REQUIRED
thread CDATA #REQUIRED
timestamp CDATA #REQUIRED
time CDATA #IMPLIED
>
<!ELEMENT log4j:message (#PCDATA)>
<!ELEMENT log4j:NDC (#PCDATA)>
<!ELEMENT log4j:throwable (#PCDATA)>
<!ELEMENT log4j:locationInfo EMPTY>
<!ATTLIST log4j:locationInfo
class CDATA #REQUIRED
method CDATA #REQUIRED
file CDATA #REQUIRED
line CDATA #REQUIRED
>
<!ELEMENT log4j:properties (log4j:data*)>
<!ELEMENT log4j:data EMPTY>
<!ATTLIST log4j:data
name CDATA #REQUIRED
value CDATA #REQUIRED
>
4.小结