Log4j2 配置

日志配置需求
*INFO日志和ERROR日志分开定义
*有些包是INFO模式,有些是DEBUG模式
*默认是WARN模式
*可动态生效日志配置

配置思路

  1. 定义 Appenders:分别创建用于输出 INFO 日志、ERROR 日志和控制台日志的 Appender。
  2. 配置 Loggers:设置根 Logger 的默认日志级别为 WARN,然后为特定的包配置不同的日志级别。

示例配置文件(log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <!-- 定义属性,用于指定日志文件路径 -->
    <Properties>
        <Property name="logPath">logs</Property>
    </Properties>
    <!-- 定义 Appenders -->
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </Console>
        <!-- INFO 日志文件输出 -->
        <RollingFile name="InfoFile" fileName="${logPath}/info.log"
                     filePattern="${logPath}/info-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
            <Filters>
                <!-- 只允许 INFO 级别日志通过 -->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        <!-- ERROR 日志文件输出 -->
        <RollingFile name="ErrorFile" fileName="${logPath}/error.log"
                     filePattern="${logPath}/error-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
            <Filters>
                <!-- 只允许 ERROR 及以上级别日志通过 -->
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <!-- 定义 Loggers -->
    <Loggers>
        <!-- 根 Logger,默认级别为 WARN -->
        <Root level="WARN">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="InfoFile"/>
            <AppenderRef ref="ErrorFile"/>
        </Root>
        <!-- 特定包使用 INFO 模式 -->
        <Logger name="com.somepackage.info" level="INFO" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="InfoFile"/>
            <AppenderRef ref="ErrorFile"/>
        </Logger>
        <!-- 特定包使用 DEBUG 模式 -->
        <Logger name="com.somepackage.debug" level="DEBUG" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="InfoFile"/>
            <AppenderRef ref="ErrorFile"/>
        </Logger>
    </Loggers>
</Configuration>

配置解释

  1. monitorInterval="30":该属性设置了 Log4j2 检查配置文件是否有更改的时间间隔(单位为秒),这里设置为 30 秒,即每 30 秒检查一次配置文件,如果有修改,会自动重新加载配置,实现动态生效。

  2. Properties:定义了一个属性 logPath,用于指定日志文件的存储路径。

  3. Appenders

    • Console:将日志输出到控制台。
    • InfoFile:将 INFO 级别的日志输出到文件,并按时间和文件大小进行滚动。通过 ThresholdFilter 只允许 INFO 级别的日志通过。
    • ErrorFile:将 ERROR 及以上级别的日志输出到文件,并按时间和文件大小进行滚动。通过 ThresholdFilter 只允许 ERROR 及以上级别的日志通过。
  4. Loggers

    • Root:根 Logger,默认日志级别为 WARN,关联了控制台、INFO 日志文件和 ERROR 日志文件。
    • com.somepackage.info:特定包的 Logger,日志级别为 INFO,不将日志传递给父 Logger(additivity="false"),关联了控制台、INFO 日志文件和 ERROR 日志文件。
    • com.somepackage.debug:特定包的 Logger,日志级别为 DEBUG,不将日志传递给父 Logger(additivity="false"),关联了控制台、INFO 日志文件和 ERROR 日志文件。
additivity="true"(默认值):当 additivity 属性设置为 true 或者不指定该属性时,当前 Logger 记录的日志除了会按照自身配置的 Appender 进行输出外,还会将日志传递给其父 Logger 继续处理。父 Logger 会根据自身的配置决定是否对这些日志进行输出。
additivity="false":当 additivity 属性设置为 false 时,当前 Logger 记录的日志只会按照自身配置的 Appender 进行输出,不会再传递给其父 Logger。

将上述配置文件放在类路径下(如 src/main/resources 目录),Log4j2 会自动加载并使用该配置。

posted @   向着朝阳  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示