log4j通过xml形式的文件配置

log4j的官方wiki

http://wiki.apache.org/logging-log4j/Log4jXmlFormat

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>
  
</log4j:configuration>

这是官网给出的一个最基本的配置

<root>  
  <priority value="debug" /><!-- 日志中输出级别,这里输出debug级别以上的日志 debug、info、warn、error、fatal --> 
  <appender-ref ref="CONSOLE" /><!-- 在控制台输出 -->
  <appender-ref ref="FILE" /><!-- 在文件输出 -->
 </root>

这里面配置了当前项目的全局日志输出情况,以两种形式输出,控制台和文件

---------记录日志的多种输出方式start---------

这里面的CONSOLE和FILE,是引用,分别引用下面的代码

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"><!-- 控制台输出 -->
  <layout class="org.apache.log4j.PatternLayout"><!-- 输出布局模式 -->
   <param name="ConversionPattern" value="%d - %c -%-4r [%t] %-5p %x - %m%n" /><!-- 输出格式 -->
  </layout>
  <!--限制输出级别-->  
  <filter class="org.apache.log4j.varia.LevelRangeFilter">  
   <param name="LevelMax" value="ERROR"/>  
   <param name="LevelMin" value="ERROR"/>  
  </filter>
</appender>

者里面配置了在控制台输出的具体配置

使用了ConsoleAppender,另外布局使用了PatternLayout

filter的意思就是使用了过滤,讲这一块的内容再通过过滤器来过滤一遍,分级别高低,在这区间内的可以显示出来

(注意这里面参数的大小写)

还有其他的输出,比如通过JDBC输出到数据库、通过SMTP发送邮件,还有下面一段代码输出到File文件等

布局模式也有多种,比如输出成html网页形式等,具体可以参看官网介绍

关于输出格式

%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

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

%c输出所属的类目,通常就是所在类的全名

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

%n输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”

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

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

下面是输出到文件的配置

<appender name="FILE" class="org.apache.log4j.FileAppender"><!-- 文件模式输出 -->
  <param name="File" value="C:/log4j1.log"/><!-- 输出到的位置 -->
  <layout class="org.apache.log4j.PatternLayout">  
   <param name="ConversionPattern"  
    value="%d - %c -%-4r [%t] %-5p %x - %m%n" />  
  </layout>  
 </appender>
<!-- ========================== 输出方式说明================================ -->  
    <!-- 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" />  
        <!-- 设置文件备份 -->  
        <param name="MaxBackupIndex" value="10000" />  
        <!-- 设置输出文件项目和格式 -->  
        <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="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="[email protected]" />  
        <param name="To" value="[email protected]" />  
        <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>

以上代码则记录了,通过配置SMTP来发送日志的方式

<appender name="DATABASE" class="org.apache.log4j.jdbc.JDBCAppender">  
  <param name="URL" value="jdbc:oracle:thin:@192.168.0.59:1521:oanet"/>  
  <param name="driver" value="oracle.jdbc.driver.OracleDriver"/>  
  <param name="user" value="hdczoa"/>  
  <param name="password" value="system"/>
  <layout class="org.apache.log4j.PatternLayout">  
   <param name="ConversionPattern"  
    value="INSERT INTO hdczoa.LOG4J(stamp,thread, info_level,class,message) VALUES ('%d', '%t', '%p', '%c', %m)" />  
  </layout>
 </appender>

以上代码则记录了通过配置JDBC来实现日志插入数据库

---------记录日志的多种输出方式end---------

关于category和logger

<logger name="com.abc" additivity="false">
    <level value="WARN" />
    <appender-ref ref="CONSOLE" />
 </logger>

这段代码是针对指定的包来设置日志输出情况的

其中的appender-ref同上

而category是和logger几乎相同的,logger继承于category,现在已经不提倡使用category了

log4j的配置大概也就这些,欢迎补充

相关推荐