Log4j xml配置

  Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。 log4j是几种常用的Java日志框架之一。其衍生工具有Log4j2/logback.

  有三种方法来配置log4j:通过.properties文件,通过XML文件,通过Java代码。通过上述三种方法,你可以定义log4j的三个主要组件:Logger、Appender和Layout。通过文件配置log4j,具有无需修改应用字节码即可打开或关闭日志的好处,实现配置的软编码。

  Logger(记录器)是日志的逻辑文件名。其使用已知的Java应用程序的名称。每个记录器当前以什么日志记录级别(FATAL、ERROR等)记录是独立配置的。在log4j的早期版本中,这些被称为类别(category)和优先级(priority),但现在他们分别被称为logger(记录器)和level(级别)。

  实际的输出是通过Appender(输出源)。有许多可用的Appender,比如FileAppender、ConsoleAppender、SocketAppender、SyslogAppender、NTEventLogAppender,甚至SMTPAppender。多个Appender可以被关联到任何Logger上,所以可以到多个输出文件上记录相同的信息,例如同时到一个本地文件和通过套接字监听器到另一台计算机上。

  Appender使用Layout(布局)格式化日志条目。常用的格式化为“一次一行”式日志文件的布局是PatternLayout,其使用一个模式字符串,就像C/C++函数printf那样。此外还有HTMLLayout和XMLLayout,使用HTML或XML格式的时候会更方便。

log4j 1.2 配置示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER"
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>

  <!-- 定义输出源 可以有多个 -->
  <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%c] %5p - %m %d{yyyy-MM-dd HH:mm:ss}%n"/>
    </layout>
    <!--  过滤器设置appender输出级别  -->
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
      <!-- org.apache.log4j.Level 中的toLevel(String str) 有String.toUpperCase()-->
      <param name="levelMin" value="debug"/>
      <param name="levelMax" value="error"/>
    </filter>
  </appender>
  
  <appender name="errorFile" class="org.apache.log4j.RollingFileAppender">
    <!-- 定义输出到文件的文件名,及其路径  -->
    <param name="File" value="${catalina.base}/log/${project.artifactId}.log"/>
    <!-- 设置是否在重新启动服务时,在原有日志基础上添加新行 -->
    <param name="Append" value="true"/>
    <!-- 设置最大文件容量 -->
    <param name="MaxFileSize" value="100KB"/>
    <!-- 设置最多文件数量,当容量达到时,旧文件将生成fileName.log.1~index -->
    <param name="MaxBackupIndex" value="3"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%c] %5p - %m %d{yyyy-MM-dd HH:mm:ss}%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
      <param name="levelMin" value="error"/>
      <param name="levelMax" value="error"/>
    </filter>
  </appender>
  ...

  <!-- additivity 继承配置,设置为true时,当Clazz.class包含属性name指定的值时,符合条过滤条件.默认为true -->
  <logger name="com.sknn" additivity="false">
    <level value="error"/>
    <appender-ref ref="errorFile"/>
  </logger>
  <!-- 可以有多个logger-->
  ...

  <!-- 只有一个root -->
  <root>
  <!-- 也可以使用level标签指定基本日志等级 -->
   <priority value="debug"/>
    <appender-ref ref="stdout"/>
    <appender-ref ref="errorFile"/>
  </root>

</log4j:configuration>

log4j.dtd结构(1.2X版本,不含log4j2)

根标签:<log4j:configuration />,必须包含在所有配置元素外.

<!ATTLIST log4j:configuration
  xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/" 
  threshold                (all|trace|debug|info|warn|error|fatal|off|null) "null"
  debug                    (true|false|null)  "null"
  reset                    (true|false) "false"
>

<appender/>,ELEMENT表示其子标签的类型,ATTLIST为其属性名及其是否为必须属性.name值可以为任意值,但是不要重复.该标签的主要是指定输出目的地,如控制台/文件/邮件等.

<!ELEMENT appender (errorHandler?, param*,
      rollingPolicy?, triggeringPolicy?, connectionSource?,
      layout?, filter*, appender-ref*)>
<!ATTLIST appender
  name         CDATA     #REQUIRED
  class     CDATA    #REQUIRED
>

<logger/>,在上面xml配置中,指定logger.name="com.sknn"表示类别为"com.sknn"的logger只记录level为error/更高级别的消息. 例:在使用Logger.getLogger(User.class),而User.class在com.sknn或者其子包下时,即得到的logger的%c在该类别下. 划分更细致的logger类别会覆盖范围较大的,可以利用这一点来设置大类下的特殊小类别.

<!ELEMENT logger (param*,level?,appender-ref*)>
<!ATTLIST logger
  class         CDATA   #IMPLIED
  name        CDATA    #REQUIRED
  additivity    (true|false) "true"  
>

<root />,指定所有appender的级别,低于该级别的将不输出.没有在<root/>中注册的appender将不输出.(除非另有logger定义)

<!ELEMENT root (param*, (priority|level)?, appender-ref*)>
原文地址:https://www.cnblogs.com/sknn/p/7852462.html