关于java:log4j2xml基本配置

slf4j是对日志框架实现制订的一个日志标准、规范、接口,不能独立应用,须要与具体的日志框架实现配合应用。log4j、logback、log4j2别离是三种日志框架实现,其中log4j2是log4j 1.x和logback的改进版。

上面介绍一下xml格局的log4j2配置文件的根本配置。

1. xml节点

Configuration

根节点。

  • status,log4j2日志框架实现本身的日志级别,OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
  • monitorInterval,从新读取配置文件的间隔时间,单位为秒

Properties

属性(可选),用来定义常量,之后在其余配置项中通过${变量名}援用。

Appenders

输入源,用于定义日志输入的中央,有控制台ConsoleAppender、滚动文件FileAppender、RollingRandomAccessFile等。

RollingRandomAccessFile

依照肯定的策略滚动文件。

  • name,指定Appender的名字
  • fileName,以后日志文件的门路和名字
  • filePattern,当产生滚动时,文件的转移和重命名规定

ThresholdFilter

决定日志事件是否被输入。

  • ACCEPT(承受),DENY(回绝),NEUTRAL(中立)
  • onMatch(该级别及以上),onMismatch(该级别以下)

PatternLayout

日志输入的格局,官网文档:http://logging.apache.org/log…

  • %d,工夫,默认格局为2012-11-02 14:34:02,123
  • %level,日志级别,比方FATAL、ERROR、WARN、INFO、DEBUG、RACE
  • %thread,线程名字
  • %c{1.},logger名字,比方LoggerName=org.apache.commons.Foo,Result=o.a.c.Foo
  • %msg,日志信息
  • %l,地位信息,等同于%C.%M(%F:%L)
  • %C、%class,残缺类名
  • %M、%method,办法名
  • %F、%file,文件名
  • %L、%line,行号
  • %n,换行

Policies

日志文件的滚动策略。

  • TimeBasedTriggeringPolicy,和filePattern联合应用,日期格局决定工夫单位,interval决定单位工夫距离;modulate,产生文件是否以0点偏移工夫
  • SizeBasedTriggeringPolicy,日志文件大小滚动策略

DefaultRolloverStrategy

默认滚动策略

  • max,日志文件保留的最多个数

2. 一个例子

<?xml version="1.0" encoding="UTF-8"?>
<!--status,log4j2本身的日志级别,OFF>FATAL>ERROR>WARN>INFO>DEBUG>TRACE>ALL-->
<!--monitorInterval,从新读取配置文件的间隔时间,单位为秒-->
<Configuration status="OFF" monitorInterval="30">
    <!--Properties,属性(可选),用来定义常量,之后在其余配置项中通过${变量名}援用-->
    <Properties>
        <Property name="LOG_HOME">logs</Property>
        <!--_TRACE_ID,业务自定义变量-->
        <property name="ALL_PATTERN">[%d][%level][%thread][%X{_TRACE_ID}][%c{1.}]- %msg -%n</property>
        <property name="ERROR_PATTERN">[%d][%level][%thread][%X{_TRACE_ID}][%c{1.}]- %msg -[%l]%n</property>
        <property name="CHARSET">UTF-8</property>
        <property name="FILE_SIZE">1GB</property>
        <property name="FILE_INDEX_MAX">30</property>
    </Properties>

    <!--Appenders,输入源,用于定义日志输入的中央-->
    <Appenders>
        <!--控制台-->
        <Console name="CONSOLE-APPENDER" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>${ALL_PATTERN}</Pattern>
            </PatternLayout>
        </Console>
        <!--RollingRandomAccessFile,依照肯定的规定滚动文件-->
        <!--name,指定Appender的名字-->
        <!--fileName,以后日志文件的门路和名字-->
        <!--filePattern,当产生滚动时,文件的转移和重命名规定-->
        <RollingRandomAccessFile name="ALL-APPENDER"
                                 fileName="${LOG_HOME}/appName-all.log"
                                 filePattern="${LOG_HOME}/%d{yyyyMMdd}/appName-all-%d{yyyyMMdd}-%i.log.gz">
            <!--PatternLayout,日志输入的格局-->
            <PatternLayout>
                <Pattern>${ALL_PATTERN}</Pattern>
            </PatternLayout>
            <!--Policies,日志文件滚动的策略-->
            <!--TimeBasedTriggeringPolicy,和filePattern联合应用,日期格局决定工夫单位,interval决定单位工夫距离;modulate,产生文件是否以0点偏移工夫-->
            <!--SizeBasedTriggeringPolicy,日志文件大小滚动策略-->
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/>
            </Policies>
            <!--DefaultRolloverStrategy,默认滚动策略,max-日志文件保留的最多个数-->
            <DefaultRolloverStrategy max="${FILE_INDEX_MAX}"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="ERROR-APPENDER"
                                 fileName="${LOG_HOME}/appName-error.log"
                                 filePattern="${LOG_HOME}/%d{yyyyMMdd}/appName-error-%d{yyyyMMdd}-%i.log.gz">
            <!--Filters,决定日志事件是否被输入:ACCEPT(承受),DENY(回绝),NEUTRAL(中立);onMatch-该级别及以上,onMismatch-该级别以下-->
            <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>${ERROR_PATTERN}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/>
            </Policies>
            <DefaultRolloverStrategy max="${FILE_INDEX_MAX}"/>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <!--每个配置都必须有一个Root logger,没有name属性、不反对additivity属性-->
        <!--level:日志输入级别,从低到高别离为:All<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF-->
        <!--includeLocation:输入地位信息须要栈快照,对性能影响很大,所以异步logger默认敞开该性能,可通过设置为true关上-->
        <!--AppenderRef:指定该日志输入到哪个Appender-->
        <asyncRoot level="INFO" includeLocation="true">
            <AppenderRef ref="CONSOLE-APPENDER"/>
            <AppenderRef ref="ALL-APPENDER"/>
            <AppenderRef ref="ERROR-APPENDER"/>
        </asyncRoot>
        <!--name:该Logger所实用的类或者类所在的包门路-->
        <!--additivity:设置日志事件是否在Root logger输入,为防止反复输入,可设置为false-->
        <asyncLogger name="com.xxx.xxx" level="INFO" additivity="false" includeLocation="true">
            <AppenderRef ref="CONSOLE-APPENDER"/>
            <AppenderRef ref="ALL-APPENDER"/>
            <AppenderRef ref="ERROR-APPENDER"/>
        </asyncLogger>
    </Loggers>
</Configuration>

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理