Log4j使用笔记

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.小结



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值