读书人

log4j透过xml形式的文件配置

发布时间: 2013-11-09 17:06:34 作者: rapoo

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" value="System.out"/>     <layout 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" value="%d - %c -%-4r [%t] %-5p %x - %m%n" /><!-- 输出格式 -->  </layout>  <!--限制输出级别-->    <filter 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{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

下面是输出到文件的配置
 <appender name="FILE" value="C:/log4j1.log"/><!-- 输出到的位置 -->  <layout      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"          value="log/testlog4jxml_all.log" />          <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->          <param name="Append" value="true" />          <!-- 设置文件大小 -->          <param name="MaxFileSize" value="1MB" />          <!-- 设置文件备份 -->          <param name="MaxBackupIndex" value="10000" />          <!-- 设置输出文件项目和格式 -->          <layout value="%d{yyyy-MM-dd HH:mm:ss} %-5p (%c:%L)- %m%n" />          </layout>      </appender>    <!-- 输出到日志文件 每天一个日志  -->      <appender name="filelog_daily" value="log/daily.log" />             <param name="DatePattern" value="'daily.'yyyy-MM-dd'.log'" />             <layout value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] (%c:%L) - %m%n" />             </layout>         </appender>

以上分别是记录到文件的集中方式
<appender name="EMAIL_QQ" 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 value="[%d{ISO8601}] %-5p %c %m%n"/>          </layout>      </appender>    <!--- 异步测试,当日志达到缓存区大小时候执行所包的appender -->      <appender name="ASYNC_test" value="10"/>          <appender-ref ref="EMAIL_QQ"/>     </appender>  


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

 <appender name="DATABASE" 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      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的配置大概也就这些,欢迎补充

读书人网 >XML SOAP

热点推荐