zoukankan      html  css  js  c++  java
  • log4j2文件结构

    标签结构

    Configuration

    • properties
    • Appenders
      • Console
        • PatternLayout
      • File
      • RollingRandomAccessFile
        •  Filters
          •  ThresholdFilter
      • Async
    • Loggers
      • Logger
      • Root
        • AppenderRef

    标签讲解

    Configuration:为根节点,有status和monitorInterval等多个属性

    • status的值有 “trace”, “debug”, “info”, “warn”, “error” and “fatal”,用于控制log4j2日志框架本身的日志级别,如果将stratus设置为较低的级别就会看到很多关于log4j2本身的日志,如加载log4j2配置文件的路径等信息,是针对log4j2插件本身用的,与下面的配置无关。
    • monitorInterval,含义是每隔多少秒重新读取配置文件,可以不重启应用的情况下修改配置

    Appenders:输出源,用于定义日志输出的地方
    log4j2支持的输出源有很多,有控制台Console、文件File、RollingRandomAccessFile、MongoDB、Flume 等

    • Console:控制台输出源是将日志打印到控制台上,开发的时候一般都会配置,以便调试

    • File:文件输出源,用于将日志写入到指定的文件,需要配置输入到哪个位置(例如:D:/logs/mylog.log)

    • RollingRandomAccessFile: 该输出源也是写入到文件,不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,另起一个文件继续写入日志,另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则
      这种方式更加实用,因为你不可能一直往一个文件中写,如果一直写,文件过大,打开就会卡死,也不便于查找日志。

      • name Appender名称

      • fileName 指定当前日志文件的位置和文件名称
      • filePattern 指定当发生Rolling时,文件的转移和重命名规则
      • SizeBasedTriggeringPolicy 指定当文件体积大于size指定的值时,触发Rolling
      • DefaultRolloverStrategy 指定最多保存的文件个数
      • TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟。基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件,如果自定义时间,则需要配置属性modulate="true"。
      • ThresholdFilter 条件过滤, level,表示最低接受的日志级别,博客配置的为INFO,即我们期望打印INFO级别以上的日志。onMatch,表示当日志事件的日志级别与level一致或比设置的等级高时,应怎么做。一般为ACCEPT,表示接受。 onMismatch,表示日志事件的日志级别与level不一致且比设置的日志低时,应怎么做。一般为DENY,表示拒绝。也可以为NEUTRAL表示中立。
    • NoSql:MongoDb, 输出到MongDb数据库中

    • Flume:输出到Apache Flume(Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。)

    • Async:异步,需要通过AppenderRef来指定要对哪种输出源进行异步(一般用于配置RollingRandomAccessFile)

    PatternLayout:控制台或文件输出源(Console、File、RollingRandomAccessFile)都必须包含一个PatternLayout节点,用于指定输出文件的格式(如 日志输出的时间 文件 方法 行数 等格式),例如 pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"

    • Loggers:日志器

      •    常见的有两种:Root和Logger.

        • Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出

            level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
            AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.

        • Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

            level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
            name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.
            AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

    • properties: 属性
      使用来定义常量,以便在其他配置的时候引用,该配置是可选的,例如定义日志的存放位置
      D:/logs
    <?xml version="1.0" encoding="UTF-8"?>
    <!--status是用于log4j2本身使用的,与下面设置的level等级没有关系,可以不设置-->
    <Configuration status="WARN" monitorInterval="300">

    <properties>
    <!-- 设置日志输出路径 -->
    <property name="LOG_HOME">./../ystlogs</property>
    </properties>

    <Appenders>
    <!-- 定义控制台输出 debug以上级别的日志 -->
    <!-- name是AppenderRef要用的,target是指怎么输出-->
    <Console name="Console" target="SYSTEM_OUT">
    <!--PatternLayout是指输出的信息格式-->
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
    <Filters>
    <!--日志等级过滤设置,我只接收debug等级以上,fatal等级以下的信息。-->
    <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
    <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    </Console>

    <!-- 定义trace文件输出trace级别日志 -->
    <!-- fileName是指当前日志的文件名称,filePattern是指如果文件满足Policies指定的条件时,应该怎么重命名。-->
    <RollingRandomAccessFile name="TraceFile"
    fileName="${LOG_HOME}/trace.log"
    filePattern="${LOG_HOME}/$${date:yyyy-MM}/trace-%d{yyyy-MM-dd}-%i.log">
    <Filters>
    <!--日志等级过滤设置,我只接收trace等级以上,debug等级以下的信息。-->
    <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL" />
    <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <!--PatternLayout是指输出的信息格式-->
    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%l] - %msg%n" />
    <Policies>
    <!--多长时间新建一个文件,modulate为true时interval生效,interval的值的单位为上面filePattern(yyyy-MM-dd)的单位-->
    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    <!-- 一个文件最大容量-->
    <SizeBasedTriggeringPolicy size="10 MB" />
    </Policies>
    <!-- 指定最多保存的文件个数-->
    <DefaultRolloverStrategy max="10" />
    </RollingRandomAccessFile>

    <!-- 定义debug文件输出debug级别日志 -->
    <RollingRandomAccessFile name="DebugFile"
    fileName="${LOG_HOME}/debug.log"
    filePattern="${LOG_HOME}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log">
    <Filters>
    <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL" />
    <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][[%l] - %msg%n" />
    <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    <SizeBasedTriggeringPolicy size="10 MB" />
    </Policies>

    <DefaultRolloverStrategy max="10" />
    </RollingRandomAccessFile>

    <!-- 定义info文件输出info级别日志 -->
    <RollingRandomAccessFile name="InfoFile"
    fileName="${LOG_HOME}/info.log"
    filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    <Filters>
    <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
    <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%l] - %msg%n" />
    <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    <SizeBasedTriggeringPolicy size="10 MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
    </RollingRandomAccessFile>

    <!-- 定义warn文件输出warn级别日志 -->
    <RollingRandomAccessFile name="WarnFile"
    fileName="${LOG_HOME}/warn.log"
    filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
    <Filters>
    <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" />
    <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%l] - %msg%n" />
    <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    <SizeBasedTriggeringPolicy size="10 MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
    </RollingRandomAccessFile>

    <!-- 定义error文件输出error级别日志 -->
    <RollingRandomAccessFile name="ErrorFile"
    fileName="${LOG_HOME}/error.log"
    filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
    <Filters>
    <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%l] - %msg%n" />
    <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    <SizeBasedTriggeringPolicy size="10 MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
    </RollingRandomAccessFile>

    <!-- 定义fatal文件输出fatal级别日志 -->
    <RollingRandomAccessFile name="FatalFile"
    fileName="${LOG_HOME}/fatal.log"
    filePattern="${LOG_HOME}/$${date:yyyy-MM}/fatal-%d{yyyy-MM-dd}-%i.log">
    <Filters>
    <ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY" />
    </Filters>
    <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%l] - %msg%n" />
    <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    <SizeBasedTriggeringPolicy size="10 MB" />
    </Policies>
    <DefaultRolloverStrategy max="10" />
    </RollingRandomAccessFile>

    <!-- 设置异步文件输出文件 -->
    <Async name="Async">
    <AppenderRef ref="TraceFile" />
    <AppenderRef ref="DebugFile" />
    <AppenderRef ref="InfoFile" />
    <AppenderRef ref="WarnFile" />
    <AppenderRef ref="ErrorFile" />
    <AppenderRef ref="FatalFile" />
    </Async>
    </Appenders>

    <Loggers>
    <!-- 最低日志级别的输出-->
    <Root level="trace">
    <!--当满足相应的等级后,向指定的文件里输出内容,比如日志level是info,则向InfoFile输出内容。-->
    <AppenderRef ref="Console" />
    <AppenderRef ref="TraceFile" />
    <AppenderRef ref="DebugFile" />
    <AppenderRef ref="InfoFile" />
    <AppenderRef ref="WarnFile" />
    <AppenderRef ref="ErrorFile" />
    <AppenderRef ref="FatalFile" />
    </Root>
    </Loggers>
    </Configuration>
  • 相关阅读:
    C#’s ~ vs Java’s finalize
    做Java开发这一年
    assertThat, assertEquals, assertTrue
    给Cuke4Duke添加一个AfterAll标签(一):使用Cuke4Duke
    心理问题的根源
    何谓数学
    人生谁看透
    人本主义与自由意志
    哲学的基本问题
    贫穷与教育
  • 原文地址:https://www.cnblogs.com/jrkl/p/14241798.html
Copyright © 2011-2022 走看看