log4j.xml配置详解

本文详细解析log4j.xml配置,涵盖Appender(如ConsoleAppender, FileAppender等)、日志级别(如DEBUG, INFO, WARN, ERROR等)、Layout(如HTMLLayout, PatternLayout等)以及打印参数的使用,帮助理解并实践Log4j日志配置。" 121521359,11046260,Java中栈的源码解析与实现,"['Java', '开发语言', '后端', '数据结构']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关文章链接:

SSM框架搭建Web项目

相关文章链接 第3节 日志配置

Jar包下载链接

观前提示:

本文所使用Eclipse版本为Photon Release (4.8.0),JDK为1.8.0_141,Tomcat为9.0.12。

1.配置详解

1.1 Appender

Appender为日志输出目的地,Log4j提供的appender有以下几种:

  1. ConsoleAppender: org.apache.log4j.ConsoleAppender,日志输出到控制台。
  2. FileAppender:org.apache.log4j.FileAppender,输出到文件。
  3. RollingFileAppender:org.apache.log4j.RollingFileAppender,输出到文件,文件达到一定阈值时,自动备份日志文件。
  4. DailyRollingFileAppender:org.apache.log4j.DailyRollingFileAppender,可定期备份日志文件,默认一天一个文件,也可设置为每分钟一个、每小时一个。
  5. WriterAppender:org.apache.log4j.WriterAppender,可自定义日志输出位置。

1.2 日志级别

一般日志级别包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF
Log4J推荐使用:DEBUG, INFO, WARN, ERROR

级别种类详解
  1. OFF:为最高等级 关闭了日志信息
  2. FATAL:为可能导致应用中止的严重事件错误
  3. ERROR:为严重错误 主要是程序的错误
  4. WARN:为一般警告,比如session丢失
  5. INFO:为一般要显示的信息,比如登录登出
  6. DEBUG:为程序的调试信息
  7. TRACE:为比DEBUG更细粒度的事件信息
  8. ALL:为最低等级,将打开所有级别的日志

1.3 Layout

Layout为日志输出格式,Log4j提供的layout有以下几种:

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

1.4 打印参数

  1. %m:输出代码中指定的消息,如log(message)中的message。
  2. %M:输出方法名。
  3. %p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 。
  4. %r:输出自应用启动到输出该log信息耗费的毫秒数 。
  5. %c:输出所属的类目,通常就是所在类的全名 。
  6. %C:输出Logger所在类的名称,通常就是所在类的全名。
  7. %t:输出产生该日志事件的线程名 。
  8. %n:输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 。
  9. %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921 。
  10. %l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) 。
  11. %F:输出所在类的类名称,只有类名。
  12. %L:输出语句所在的行数,只输出数字。
  13. %%:用来输出百分号“%”。

1.5 代码样例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--#log4j中有5级logger ,#FATAL 0 ,#ERROR 3 ,#WARN 4 ,#INFO 6 ,#DEBUG 7 -->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j">
  <!--输出到控制台-->
  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <!-- 日志输出格式 -->
    <layout class="org.apache.log4j.TTCCLayout"/>
  </appender>
  
  <!-- 输出日志到文件 -->
  <appender name="fileAppender" class="org.apache.log4j.FileAppender">
    <!-- 文件文件全路径名 -->
    <param name="File" value="${catalina.base}/logs/demo/fileAppender.log"/>
    <!-- 是否在已存在的文件追加写:默认时true,若为false则每次启动都会删除并重新新建文件-->
    <param name="Append" value="false"/>
    <!-- Threshold属性指定输出等级 -->
    <param name="Threshole" value="INFO"/>
    <!-- 是否启用缓存,默认false-->
    <param name="BufferSize" value="false"/>
    <!-- 缓存大小,依赖上一个参数(bufferedIO), 默认缓存大小8K  -->
    <param name="BufferSize" value="512"/>
    <!-- 日志输出格式 -->
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n"/>
    </layout>
  </appender>
  
  <!-- 输出日志到文件,当文件大小达到一定阈值时,自动备份 -->
  <appender name="rollingAppender" class="org.apache.log4j.RollingFileAppender">
    <!-- 文件文件全路径名 -->
    <param name="File" value="${catalina.base}/logs/demo/RollingFileAppender.log"/>
    <!-- 是否在已存在的文件追加写:默认时true,若为false则每次启动都会删除并重新新建文件-->
    <param name="Append" value="true"/>
    <!-- 保存备份日志的最大个数,默认值是:1 -->
    <param name="MaxBackupIndex" value="10"/>
    <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB,默认值是:10MB -->
    <param name="MaxFileSize" value="5120KB"/>
    <!-- 设置日志输出的样式 -->
    <layout class="org.apache.log4j.PatternLayout">
      <!-- 日志输出格式 -->
      <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n"/>
    </layout>
  </appender>
  
  <!-- 日志输出到文件,可以配置多久产生一个新的日志信息文件 -->
  <appender name="dailyRollingAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <!-- 文件文件全路径名 -->
    <param name="File" value="${catalina.base}/logs/demo/DailyRollingFileAppender.log"/>
    <param name="Append" value="true"/>
    <!-- 设置日志备份频率,默认:为每天一个日志文件 -->
    <param name="DatePattern" value="yyyy-MM-dd"/>
    
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p][%d{HH:mm:ss SSS}][%c]-[%m]%n"/>
    </layout>
  </appender>
  
   <!--
        1. 指定logger的设置,additivity是否遵循缺省的继承机制
        2. 当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制
        3. 代码中使用Logger.getLogger("logTest")获得此输出器,且不会使用根输出器
    -->
    <logger name="logTest" additivity="false">
        <level value ="INFO"/>
        <appender-ref ref="dailyRollingAppender"/>
    </logger>

  <!-- 根logger的设置,若代码中未找到指定的logger,则会根据继承机制,使用根logger-->
  <root>
    <appender-ref ref="console"/>
    <appender-ref ref="fileAppender"/>
    <appender-ref ref="rollingAppender"/>
    <appender-ref ref="dailyRollingAppender"/>
  </root>
</log4j:configuration>

1.6 实际例子

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--#log4j中有5级logger ,#FATAL 0 ,#ERROR 3 ,#WARN 4 ,#INFO 6 ,#DEBUG 7 -->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j">
  <!--输出到控制台-->
  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <!-- 日志输出格式 -->
    <layout class="org.apache.log4j.TTCCLayout"/>
  </appender>
  
  <!-- 输出日志到文件,当文件大小达到一定阈值时,自动备份 -->
  <appender name="rollingAppender" class="org.apache.log4j.RollingFileAppender">
    <!-- 文件文件全路径名 -->
    <param name="File" value="${catalina.base}/logs/mydemo/RollingFileAppender.log"/>
    <!-- 是否在已存在的文件追加写:默认时true,若为false则每次启动都会删除并重新新建文件-->
    <param name="Append" value="true"/>
    <!-- 保存备份日志的最大个数,默认值是:1 -->
    <param name="MaxBackupIndex" value="10"/>
    <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB,默认值是:10MB -->
    <param name="MaxFileSize" value="5120KB"/>
    <!-- 设置日志输出的样式 -->
    <layout class="org.apache.log4j.PatternLayout">
      <!-- 日志输出格式 -->
      <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n"/>
    </layout>
  </appender>
  
  <!-- 日志输出到文件,可以配置多久产生一个新的日志信息文件 -->
  <appender name="dailyRollingAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <!-- 文件文件全路径名 -->
    <param name="File" value="${catalina.base}/logs/mydemo/DailyRollingFileAppender.log"/>
    <param name="Append" value="true"/>
    <param name="Threshold" value="DEBUG" />
    <!-- 设置日志备份频率,默认:为每天一个日志文件 -->
    <param name="DatePattern" value="yyyy-MM-dd"/>
    
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p][%d{HH:mm:ss SSS}][%c]-[%m]%n"/>
    </layout>
  </appender>
  
  
  <!-- 下面这些就是根据 这些路径来控制对应包下的文件的日志输出级别,基本上都是报错了,才输出日志 -->
  <logger name="org.apache.commons" additivity="false">
    <level value="ERROR"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  
  <logger name="org.mybatis.spring" additivity="false">
    <level value="ERROR"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="java.sql" additivity="false">
    <level value="ERROR"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  
  <logger name="org.apache.ibatis" additivity="false">
    <level value="ERROR"/>
    <appender-ref ref="dailyRollingAppender" /> 
  </logger>
  
  <logger name="org.springframework" additivity="false">
    <level value="ERROR"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="com.mchange.v2" additivity="false">
    <level value="ERROR"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  
  <logger name="com.alibaba.druid.filter.stat" additivity="false">
    <level value="WARN"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="com.alibaba.druid.pool" additivity="false">
    <level value="WARN"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="druid.sql.Connection" additivity="false">
    <level value="WARN"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="druid.sql.DataSource" additivity="false">
    <level value="WARN"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="druid.sql.ResultSet" additivity="false">
    <level value="WARN"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  <logger name="druid.sql.Statement" additivity="false">
    <level value="WARN"/>
    <appender-ref ref="dailyRollingAppender"/>
  </logger>
  
  <!-- 根logger的设置,若代码中未找到指定的logger,则会根据继承机制,使用根logger-->
  <root>
    <appender-ref ref="console"/>
    <appender-ref ref="rollingAppender"/>
    <appender-ref ref="dailyRollingAppender"/>
  </root>
</log4j:configuration>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值