log4j2配置文件详解(可直接用)

log4j2介绍

选择配置文件的优先级如下:

  1. classpath下名为 log4j2-test.json或log4j2-test.jsn
  2. classpath下名为 log4j2-test.xml
  3. classpath下名为 log4j2.json 或log4j2.jsn
  4. classpath下名为 log4j2.xml

slf4j日志门面+log4j2

引入依赖

<!-- spring-boot依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  	<!-- 排除自带的logback日志 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!--引入log4j2-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--在日志中追加轨迹ID-->
<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>tlog-all-spring-boot-starter</artifactId>
    <version>1.5.1</version>
</dependency>

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数(最小是5秒钟)-->
<configuration monitorInterval="30" status="INFO">
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--8个级别从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF-->

    <!--Log4j 2 的 `PatternLayout` 支持的格式化配置项参数如下:
        `%m`:输出日志消息。
        `%p`:输出日志级别(或%-5level,-5表示左对齐并且固定输出5个字符,如果不足在右边补0)。
        `%r`:输出自应用启动后的毫秒数。
        `%c`:输出日志所属的类的全名。
        `%C`:输出日志所属的类的简单名。
        `%t`:输出当前线程名称。
        `%n`:换行。
        `%d{pattern}`:输出日志时间,其中 `{pattern}` 是日期格式化参数,用于指定日期格式。eg:%d{HH:mm:ss.SSS}表示输出到毫秒的时间
        `%F`:输出产生日志记录的文件名。如Log4j2Test.java
        `%L`:输出产生日志记录的行号。
        `%M`:输出产生日志记录的方法名。
        `%x`:输出线程的NDC(nested diagnostic context)。
        `%X{key}`:输出MDC(mapped diagnostic context)中指定键的值。
         %logger 输出日志记录的类的全名,因为Root Logger没有名称,所以没有输出。
    这些是一些常用的格式化配置项参数,你可以根据自己的需求组合这些参数来定义自己的日志输出格式。
    -->
    <!--变量配置-->
    <Properties>
        <property name="LOG_PATTERN" value="%d{yyyy-MM-dd}[%d{HH:mm:ss,SSS}] %p [%t] %highlight{%c{1.}.%M(%L)}: %m%n"/>
        <!--<property name="LOG_PATTERN" value="%d{yyyy-MM-dd}[%d{HH:mm:ss,SSS}] %p [Thread:%t] [Class:%F Method:%M() Row:%L]: %m%n" />-->
        <!-- 定义日志存储的路径 当前项目根目录-->
        <property name="FILE_PATH" value="./log"/>
        <!--<property name="FILE_NAME" value="myProject" />-->
    </Properties>

    <!--<Appenders>:定义所有日志输出器-->
    <!--此节点有三种常见的子节点:Console,RollingFile,File-->
    <appenders>

        <!--控制台日志输出器:target:SYSTEM_OUT或SYSTEM_ERR,一般只设置默认:SYSTEM_OUT-->
        <console name="Console" target="SYSTEM_OUT">
            <!--日志输出格式:默认为:%m%n,即只输出日志和换行-->
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <!--阈值过滤器:只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

        <!--        &lt;!&ndash;文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用&ndash;&gt;-->
        <!--        <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">-->
        <!--            <PatternLayout pattern="${LOG_PATTERN}"/>-->
        <!--        </File>-->

        <!--        &lt;!&ndash; 这个会打印出所有的debug及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档&ndash;&gt;-->
        <!--        <RollingFile name="RollingFileDebug"-->
        <!--                     fileName="${FILE_PATH}/debug.log"-->
        <!--                     filePattern="${FILE_PATH}/debug/DEBUG-%d{yyyy-MM-dd}_%i.log.gz">-->
        <!--            &lt;!&ndash;阈值过滤器,只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)&ndash;&gt;-->
        <!--            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>-->
        <!--            <PatternLayout pattern="${LOG_PATTERN}"/>-->
        <!--            &lt;!&ndash;指定滚动日志的策略,即指定新建日志文件的时机&ndash;&gt;-->
        <!--            <Policies>-->
        <!--                &lt;!&ndash;interval属性用来指定多久滚动一次,时间单位取决于<PatternLayout pattern>,modulate属性调整时间,true:0点为基准滚动,false:服务器启动时间开始滚动&ndash;&gt;-->
        <!--                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>-->
        <!--                <SizeBasedTriggeringPolicy size="100MB"/>-->
        <!--            </Policies>-->
        <!--            &lt;!&ndash; DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖&ndash;&gt;-->
        <!--            &lt;!&ndash;            <DefaultRolloverStrategy max="15">&ndash;&gt;-->
        <!--            <DefaultRolloverStrategy max="10">-->
        <!--                &lt;!&ndash;删除5天之前的日志&ndash;&gt;-->
        <!--                <Delete basePath="${FILE_PATH}" maxDepth="2">-->
        <!--                    <IfFileName glob="*/*.log*"/>-->
        <!--                    <IfLastModified age="1d"/>-->
        <!--                </Delete>-->
        <!--            </DefaultRolloverStrategy>-->
        <!--        </RollingFile>-->


        <!--滚动文件日志输出器-->
        <!--打印出所有的info及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo"
                     fileName="${FILE_PATH}/info.log"
                     filePattern="${FILE_PATH}/info/INFO-%d{yyyy-MM-dd}_%i.log.gz">
            <!--阈值过滤器,只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,时间单位取决于<PatternLayout pattern>,modulate属性调整时间,true:0点为基准滚动,false:服务器启动时间开始滚动-->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <!--            <DefaultRolloverStrategy max="15">-->
            <DefaultRolloverStrategy max="60">
                <!--删除60天之前的日志-->
                <Delete basePath="${FILE_PATH}" maxDepth="2">
                    <IfFileName glob="*/*.log*"/>
                    <IfLastModified age="60d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>


        <!--滚动文件日志输出器-->
        <!--打印出所有的error及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileError"
                     fileName="${FILE_PATH}/error.log"
                     filePattern="${FILE_PATH}/error/ERROR-%d{yyyy-MM-dd}_%i.log.gz">
            <!--阈值过滤器:只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,时间单位取决于<PatternLayout pattern>,modulate属性调整时间,true:0点为基准滚动,false:服务器启动时间开始滚动-->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <!--<DefaultRolloverStrategy max="15">-->
            <DefaultRolloverStrategy max="60">
                <!--删除60天之前的日志-->
                <Delete basePath="${FILE_PATH}" maxDepth="2">
                    <IfFileName glob="*/*.log*"/>
                    <IfLastModified age="60d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!--异步日志处理器:阻塞队列最大容量为20000,超出队列容量时等待日志输出,包含位置信息-->
        <Async name="Async" bufferSize="20000" blocking="true" includeLocation="true">
            <AppenderRef ref="Console"/>
            <!--<AppenderRef ref="RollingFileDebug"/>-->
            <AppenderRef ref="RollingFileInfo"/>
            <AppenderRef ref="RollingFileError"/>
        </Async>
    </appenders>

    <!--<loggers>:定义日志记录器,只有定义了logger并引入的appender,日志输出器才会生效-->
    <loggers>
        <!--根日志记录器,设置级别为info-->
        <root level="info">
            <AppenderRef ref="Async"/>
        </root>

        <!--单独指定特定包下的class指定不同的日志级别-->
        <!--日志记录器:过滤掉spring和mybatis的一些无用的DEBUG信息,级别设置为Info-->
        <!--通过设置additivity="false",日志消息将只被传递给当前日志记录器,而不会传递给父级记录器,避免日志消息被重复输出-->
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Async"/>
        </logger>
        <Logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="Async"/>
        </Logger>
        <logger name="org.mybatis.spring.SqlSessionUtils" level="OFF" additivity="false">
            <AppenderRef ref="Async"/>
        </logger>
        <logger name="org.mybatis.spring.transaction.SpringManagedTransaction" level="OFF" additivity="false">
            <AppenderRef ref="Async"/>
        </logger>
        <logger name="org.apache.kafka.clients" level="OFF" additivity="false">
            <AppenderRef ref="Async"/>
        </logger>
        <logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" level="OFF" additivity="false">
            <AppenderRef ref="Async"/>
        </logger>

    </loggers>


</configuration>

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
log4j2是一个流行的Java日志框架,可以通过log4j2.xml文件进行配置。下面是log4j2.xml文件的配置详解: 1. 配置文件动态刷新配置 可以使用monitorInterval属性来设置配置文件的动态刷新间隔,单位为秒。例如: ```xml <Configuration monitorInterval="30"> ``` 2. Configuration的status属性 Configuration标签有一个status属性,用于指定日志记录器的状态。可以设置为debug、info、warn、error、fatal。例如: ```xml <Configuration status="warn"> ``` 3. 日志级别 可以使用属性level来指定日志级别,可以设置为trace、debug、info、warn、error、fatal、off。例如: ```xml <Logger name="com.foo.Bar" level="trace"> ``` 4. Logger与Root标签 Logger标签用于指定特定的类或包的日志级别,而Root标签用于指定所有日志记录器的默认日志级别。例如: ```xml <Root level="error"> <AppenderRef ref="Console"/> </Root> <Logger name="com.foo.Bar" level="trace"> <AppenderRef ref="RollingFile"/> </Logger> ``` 5. Logger的additivity属性 Logger标签还有一个additivity属性,用于指定是否将日志事件传递给父记录器。默认情况下,Logger的additivity属性为true。例如: ```xml <Logger name="com.foo.Bar" level="trace" additivity="false"> ``` 6. appender-ref的ref属性 可以使用appender-ref标签来引用appender。例如: ```xml <Logger name="com.foo.Bar" level="trace"> <AppenderRef ref="RollingFile"/> </Logger> ``` 7. appender 可以使用appender标签来指定日志输出的目的地,例如控制台或文件。常用的appender有Console、File、RollingFile等。例如: ```xml <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="250 MB"/> </Policies> </RollingFile> </Appenders> ``` 8. Patterns 可以使用PatternLayout标签来指定日志输出的格式。例如: ```xml <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> ``` 9. Java使用Log4j2 可以使用以下步骤在Java中使用Log4j2: 1)导入pom依赖 ```xml <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> </dependency> ``` 2)配置Log4j2.xml 3)使用日志 ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MyClass { private static final Logger logger = LogManager.getLogger(MyClass.class); public void doSomething() { logger.debug("Debug message"); logger.info("Info message"); logger.warn("Warn message"); logger.error("Error message"); logger.fatal("Fatal message"); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值