当前位置: 首页 > 工具软件 > Touch4j > 使用案例 >

log4j.xml与log4j.dtd的配置详细说明与使用

邵崇凛
2023-12-01

1、log4j.dtd

.dtd文件是对相应.xml进行约束验证用的。这里不做介绍了,详细见上一篇关于dtd的介绍: http://blog.csdn.net/tianyafeng123xin/article/details/51218271

log4j.dtd的文件:

<?xml version="1.0" encoding="UTF-8" ?>

<!-- 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*,(category|logger)*,root?,
                               categoryFactory?)>

<!-- The "threshold" attribute takes a level value such that all -->
<!-- logging statements with a level equal or below this value 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|debug|info|warn|error|fatal|off|null) "null"
  debug                    (true|false|null)  "null"
>

<!-- 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*, layout?, filter*, appender-ref*)>
<!ATTLIST appender
  name 		ID 	#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 IDREF #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		ID	#REQUIRED
  additivity	(true|false) "true"  
>


<!ELEMENT categoryFactory (param*)>
<!ATTLIST categoryFactory 
   class        CDATA #REQUIRED>

<!ELEMENT appender-ref EMPTY>
<!ATTLIST appender-ref
  ref IDREF #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?) >

<!-- The timestamp format is application dependent. -->
<!ATTLIST log4j:event
    logger     CDATA #REQUIRED
    level      CDATA #REQUIRED
    thread     CDATA #REQUIRED
    timestamp  CDATA #REQUIRED
>

<!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
>
说明:1、其中<!Element >:定义元素使用,紧跟着的为元素名称,再后面的是元素的子元素的规则。
例如:<!ELEMENT log4j:configuration (renderer*, appender*,(category|logger)*,root?,
                               categoryFactory?)>
在xml中有<log4j:configuration></log4j:configuration>标签,它的子标签可以有renderer(0-n次)、appender(0-n次)、(category|logger)*(各0-n次)其中category|logger没有顺序的、root(0-1次)、categoryFactory(0-1次)。注意:它们都是可有可无,并且在xml要按括号中的顺序进行书写。
2、其中<!ALLLIST>:定义了元素的属性及其验证约束,紧跟着的为验证的元素名,下面列出的便是它可能的属性及验证。
例如:<!ATTLIST log4j:configuration
  xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/" 
  threshold                (all|debug|info|warn|error|fatal|off|null) "null"
  debug                    (true|false|null)  "null"
>
在xml中的log4j:configuration标签中(注意不是子元素)只能定义xmlns:log4j、threshold、debug三个属性。对xmlns:log4j: 为指定的固定值("http://jakarta.apache.org/log4j/" )、threshold:为(all|debug|info|warn|error|fatal|off|null)中的一种,默认为null、同理debug说明也是


2、log4j.xml

一、Log4j简介

Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。

1、Loggers

Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

2、Appenders

禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。

常使用的类如下:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)


3、Layouts

有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。

常使用的类如下:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)



二、配置详解

在实际应用中,要使Log4j在系统中运行须事先设定配置文件。配置文件事实上也就是对Logger、Appender及Layout进行相应设定。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。

格式化符号说明:

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

log4j.xml的文件:

<?xml version="1.0" encoding="UTF-8" ?>     
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">     
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">     
     
    <!-- ========================== 自定义输出格式说明================================ -->     
    <!-- %p 输出优先级,即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.<a href="http://lib.csdn.net/base/17" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>:10)  -->     
    <!-- ========================================================================== -->     
         
    <!-- ========================== 输出方式说明================================ -->     
    <!-- Log4j提供的appender有以下几种:  -->     
    <!-- org.apache.log4j.ConsoleAppender(控制台),  -->     
    <!-- org.apache.log4j.FileAppender(文件),  -->     
    <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->     
    <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  -->     
    <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)   -->     
<!-- ========================================================================== -->     
<!-- 输出到日志文件  -->     
    <appender name="filelog_appender"     
        class="org.apache.log4j.RollingFileAppender">     
        <!-- 设置File参数:日志输出文件名 -->     
        <param name="File" value="log/testlog4jxml_all.log" />     
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->     
        <param name="Append" value="true" />     
        <!-- 设置文件大小 -->     
        <param name="MaxFileSize" value="1MB" />     
        <!-- 设置文件备份个数,当log文件的大小超过上面文件设置的大小时,就会进行备份。当设置的文件备份个数用完后,它会自动覆盖原有的log -->     
        <param name="MaxBackupIndex" value="10" />     
        <!-- 设置输出文件项目和格式 -->     
        <layout class="org.apache.log4j.PatternLayout">     
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p (%c:%L)- %m%n" />     
        </layout>     
    </appender>     
     
<!-- 输出到日志文件 每天一个日志  -->     
    <appender name="filelog_daily" class="org.apache.log4j.DailyRollingFileAppender">        
        <param name="File" value="log/daily.log" />        
        <param name="DatePattern" value="'daily.'yyyy-MM-dd'.log'" />        
        <layout class="org.apache.log4j.PatternLayout">        
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss/} %-5p] [%t] (%c:%L) - %m%n" />        
        </layout>        
    </appender>      
     
<!-- 输出到控制台中 -->     
    <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>     
    </appender>     
     
<appender name="EMAIL_QQ" class="org.apache.log4j.net.SMTPAppender">     
        <param name="Threshold" value="INFO"/>     
        <param name="BufferSize" value="128" />     
        <param name="SMTPHost" value="smtp.qq.com" />     
        <param name="SMTPUsername" value="cjjvictory" />     
        <param name="SMTPPassword" value="***" />     
        <param name="From" value="cjjvictory@qq.com" />     
        <param name="To" value="cjjvictory@gmail.com" />     
        <param name="Subject" value="测试邮件发送" />     
        <param name="LocationInfo" value="true" />     
        <param name="SMTPDebug" value="true" />     
        <layout class="org.cjj.log4j.extend.PatternLayout_zh">     
            <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m%n"/>     
        </layout>     
    </appender>     
     
<!--- 异步测试,当日志达到缓存区大小时候执行所包的appender -->     
    <appender name="ASYNC_test" class="org.apache.log4j.AsyncAppender">        
     <param name="BufferSize" value="10"/>        
     <appender-ref ref="EMAIL_QQ"/>     
   </appender>     
     
 <!-- 设置包限制输出的通道 -->     
    <category name="org.cjj" additivity="false">     
               <!-- 日志输出级别,起码可以有5个级别,可以扩展自己的级别,邮件发送必须是ERROR级别不好用,所以最后自己扩展一个邮件发送级别 -->     
        <level value="ERROR" />     
        <appender-ref ref="filelog_daily" />     
        <appender-ref ref="daily_appender" />     
        <appender-ref ref="console" />     
        <appender-ref ref="ASYNC_test" />     
 </category>     
     
</log4j:configuration>




关于log4j.properties可参见: http://www.cnblogs.com/ITtangtang/p/3926665.html






 类似资料: