zoukankan      html  css  js  c++  java
  • 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*)>
  • 相关阅读:
    【USACO1.6.3】Prime Palindromes【数论,数学】【模拟】
    【HDU6345】子串查询【前缀和】【线段树】
    【HDU6345】子串查询【前缀和】【线段树】
    【HDU6344】调查问卷【状压】【模拟】
    【HDU6344】调查问卷【状压】【模拟】
    获取一个处理程序函数到一个特定的弹出菜单
    一个剪贴板增强工具
    将checklistbox控件与DataView绑定
    探索者命令式的三分
    ColorListBox
  • 原文地址:https://www.cnblogs.com/sknn/p/7852462.html
Copyright © 2011-2022 走看看