但行好事
莫论前程❤

spring中使用Log4j配置实例(log4j.xml)

在web.xml配置文件中配置

    <context-param>
        <param-name>log4jconfiglocation</param-name>
        <param-value>classpath:log4j.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>

%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-35.35c{1.}:%-3L) %m%n 2018-05-22 13:52:08 [INFO ](c.f.p.c.s.b.AgentInfoBo :80 ) OP-APM-04$192.168.156.104 - %d{yyyy-MM-dd HH:mm:ss} : 日期 - [%-5p] : [info ] 5个字节长度 - %-35.35c{1.} : c.f.p.c.s.b.AgentInfoBo 最小长度35,最大长度35 - {1.} : 只显示最后一个类名的全称 - %-3L : 80 最小长度3个字节 - %m : 输出代码指定信息,如info(“message”),输出message - %n : 换行

一个完整的xml配置文件(propertities文件功能不全,不能使用过滤器,并且个人认为xml格式比较清晰,易读)。

xml 格式的 log4j 配置文件概述

xml格式的log4j配置文件需要使用org.apache.log4j.xml.DOMConfigurator.configure()方法来读入。

对xml文件的语法定义可以在log4j的发布包中找到:org/apache/log4j/xml/log4j.dtd

log4j的xml配置文件的树状结构如下所示,注意下图只显示了常用的部分。

xml declaration and DTD   
 |   
log4j:configuration   
 |   
 +-- appender (name, class)   
 |     |   
 |     +-- param (name, value)   
 |     +-- layout (class)   
 |           |   
 |           +-- param (name, value)   
 +-- logger (name, additivity)   
 |     |   
 |     +-- level (class, value)   
 |     |     |   
 |     |     +-- param (name, value)   
 |     +-- appender-ref (ref)   
 +-- root   
 |   
 +-- param (name, class)   
 +-- level   
 |     |   
 |     +-- param (name, value)   
 +-- appender-ref (ref)

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="myConsole" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />
        </layout>

        <!--过滤器设置输出的级别-->   
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="debug" />
            <param name="levelMax" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>


    <appender name="myFile" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="D:/output.log" /><!-- 设置日志输出文件名 -->
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true" />
        <param name="MaxBackupIndex" value="10" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
        </layout>
    </appender>


    <appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="E:/activex.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
        </layout>
    </appender>


    <!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制-->
    <logger name="com.runway.bssp.activeXdemo" additivity="false">
        <priority value ="info"/>
        <appender-ref ref="activexAppender" />
    </logger>

    <!-- 根logger的设置-->
    <root>
        <priority value ="debug"/>
        <appender-ref ref="myConsole"/>
        <appender-ref ref="myFile"/>
    </root>

</log4j:configuration>

(1). 输出方式appender一般有5种:

  • org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
  • org.apache.log4j.ConsoleAppender (控制台)
  • org.apache.log4j.FileAppender (文件)
  • org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
  • org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)

(2). 日记记录的优先级priority,优先级由高到低分为

OFF ,FATAL ,ERROR ,WARN ,INFO,DEBUG ,ALL

​ Log4j建议只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG这五个级别。

(3). 格式说明 layout中的参数都以%开始,后面不同的参数代表不同的格式化信息(参数按字母表顺序列出):

  %c    输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName)
     %d    输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
     %l    输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
     %m    输出代码指定信息,如info(“message”),输出message
     %p    输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL等
     %r    输出从启动到显示该log信息所耗费的毫秒数
     %t    输出产生该日志事件的线程名
     %c    输出所属的类目,通常就是所在类的全名 
     %n    输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 
     %F    输出日志消息产生时所在的文件名称 
     %L    输出代码中的行号 
     %x    输出和当前线程相关联的NDC(嵌套诊断环境),像javaservlets多客户多线程的应用中 
     %%    输出一个"%"字符 

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。
  如:
    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字符,就从左边较远输出的字符截掉。


{1.}            : 只显示最后一个类名的全称

xml declaration and DTD

xml配置文件的头部包括两个部分:xml声明和DTD声明。头部的格式如下:

og4j:configuration (root element)

xmlns:log4j [#FIXED attribute] : 定义log4j的名字空间,取定值"http://jakarta.apache.org/log4j/"
appender [* child] : 一个appender子元素定义一个日志输出目的地
logger [* child] : 一个logger子元素定义一个日志写出器
root [? child] : root子元素定义了root logger

appender

appender元素定义一个日志输出目的地。
name [#REQUIRED attribute] : 定义appender的名字,以便被后文引用
class [#REQUIRED attribute] : 定义appender对象所属的类的全名
param [* child] : 创建appender对象时传递给类构造方法的参数
layout [? child] : 该appender使用的layout对象

layout

layout元素定义与某一个appender相联系的日志格式化器。
class [#REQUIRED attribute] : 定义layout对象所属的类的全名
param [* child] : 创建layout对象时传递给类构造方法的参数

logger

logger元素定义一个日志输出器。
name [#REQUIRED attribute] : 定义logger的名字,以便被后文引用
additivity [#ENUM attribute] : 取值为"true"(默认)或者"false",是否继承父logger的属性
level [? child] : 定义该logger的日志级别
appender-ref [* child] : 定义该logger的输出目的地

root

root元素定义根日志输出器root logger。
param [* child] : 创建root logger对象时传递给类构造方法的参数
level [? child] : 定义root logger的日志级别
appender-ref [* child] : 定义root logger的输出目的地

level

level元素定义logger对象的日志级别。
class [#IMPLIED attribute] : 定义level对象所属的类,默认情况下是"org.apache.log4j.Level类
value [#REQUIRED attribute] : 为level对象赋值。可能的取值从小到大依次为"all"、"debug"、"info"、"warn"、"error"、"fatal"和"off"。当值为"off"时表示没有任何日志信息被输出
param [* child] : 创建level对象时传递给类构造方法的参数

appender-ref

appender-ref元素引用一个appender元素的名字,为logger对象增加一个appender。
ref [#REQUIRED attribute] : 一个appender元素的名字的引用
appender-ref元素没有子元素

param

param元素在创建对象时为类的构造方法提供参数。它可以成为appender、layout、filter、errorHandler、level、categoryFactory和root等元素的子元素。
name and value [#REQUIRED attributes] : 提供参数的一组名值对
param元素没有子元素

xml 文件中配置 appender layout

创建不同的Appender对象或者不同的Layout对象要调用不同的构造方法。可以使用param子元素来设定不同的参数值。

创建 ConsoleAppender 对象

ConsoleAppender的构造方法不接受其它的参数。

... ... ... ...
<appender name="console.log" class="org.apache.log4j.ConsoleAppender">
  <layout ... >
    ... ...
  </layout>
</appender>
... ... ... ...

创建 FileAppender 对象

可以为FileAppender类的构造方法传递两个参数:File表示日志文件名;Append表示如文件已存在,是否把日志追加到文件尾部,可能取值为”true”和”false”(默认)。

... ... ... ...
<appender name="file.log" class="org.apache.log4j.FileAppender">
  <param name="File" value="/tmp/log.txt" />
  <param name="Append" value="false" />
  <layout ... >
    ... ...
  </layout>
</appender>
... ... ... ...

创建 RollingFileAppender 对象

除了File和Append以外,还可以为RollingFileAppender类的构造方法传递两个参数:MaxBackupIndex备份日志文件的个数(默认是1个);MaxFileSize表示日志文件允许的最大字节数(默认是10M)。

... ... ... ...
<appender name="rollingFile.log" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="/tmp/rollingLog.txt" />
  <param name="Append" value="false" />
  <param name="MaxBackupIndex" value="2" />
  <param name="MaxFileSize" value="1024" />
  <layout ... >
    ... ...
  </layout>
</appender>
... ... ... ...

创建 PatternLayout 对象

可以为PatternLayout类的构造方法传递参数ConversionPattern。

... ... ... ...
<layout class="org.apache.log4j.PatternLayout>
  <param name="Conversion" value="%d [%t] %p - %m%n" />
</layout>
... ... ... ...

使用log4j.xml的配置来让Hibernate中的参数化sql中的参数值和返回值输出:

<!-- 为打出sql中的参数而添加20121113start -->
   <!-- 输出到控制台中 -->     
    <appender name="console" class="org.apache.log4j.ConsoleAppender">     
        <layout class="org.apache.log4j.PatternLayout">     
            <param name="ConversionPattern"     
                value="%d{yyyy-MM-dd HH:mm:ss} %-5p: %m%n" />     
            <!-- "%-5p: [%t] [%c{3}.%M(%L)] | %m%n" -->     
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="LevelMin" value="trace" />
                        <param name="LevelMax" value="DEBUG" />
        </filter>     
    </appender>     

   <logger name="org.hibernate.type.descriptor.sql.BasicBinder"> 
    <level value="trace" /> 
   </logger>
   <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"> 
    <level value="trace" /> 
   </logger>
   <logger name="org.hibernate.sql">     
    <level value="trace" /> 
   </logger>   
   <logger name="org.hibernate.type">     
    <level value="trace" /> 
   </logger>   
   <!-- 为打出sql中的参数而添加20121113end -->

记得还要在<root>处加入这个appender,即<appender-ref ref="console"/ >
赞(1) 打赏
未经允许不得转载:刘鹏博客 » spring中使用Log4j配置实例(log4j.xml)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏