Log4j2快速入门使用

44 阅读2分钟

简介

使用 Log4j2 作为 SLF4J 实现。

使用

pom.xml:

<dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.32</version>
    </dependency>
<!--    使用 log4j-slf4j-impl 将消息路由到 Log4j2
请注意,如果我们使用的是 SLF4J 1.8 而不是 1.7,则需要使用 log4j-slf4j18-impl 而不是 log4j-slf4j-impl。
-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.17.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.17.0</version>
    </dependency>

  </dependencies>

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- status: 应记录到控制台的内部 Log4j 事件的级别。-->
<Configuration status="WARN">
    <Properties>
        <Property name="filename-info">target/info.log</Property>
        <Property name="filename-warn">target/warn.log</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd  HH:mm:ss.SSS} [%t] %-5level %logger{50} - %msg%n"/>
        </Console>

<!--        fileName:要写入的文件的名称
            filePattern: 存档日志文件的名称模式
 -->
        <RollingFile name="Rolling-info" fileName="${filename-info}" filePattern="logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
<!--           仅在级别匹配时才允许追加器写入事件-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} - %msg%n"/>
<!--            日志大小达到 20 兆字节时, 后缀为 KB、MB、GB 或 TB,文件模式必须包含 %i, 否则目标文件将在每次滚动时被覆盖-->
            <SizeBasedTriggeringPolicy size="20 MB" />
<!--            当前日期不再与日志的开始日期匹配时, 这里是每天滚动一次 -->
<!--            interval: 默认为1 , 根据日期模式中最具体的时间单位-->
            <TimeBasedTriggeringPolicy />
<!--           允许用户比使用 DefaultRolloverStrategy max 属性时更灵活地控制在滚动时删除哪些文件,
                在删除它们之前最多保留 20 个文件-->
            <DefaultRolloverStrategy max="20"/>

        </RollingFile>


        <RollingFile name="Rolling-warn" fileName="${filename-warn}" filePattern="logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
            <!--           仅在级别匹配时才允许追加器写入事件-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} - %msg%n"/>
            <!--            日志大小达到 20 兆字节时, 后缀为 KB、MB、GB 或 TB,文件模式必须包含 %i, 否则目标文件将在每次滚动时被覆盖-->
            <SizeBasedTriggeringPolicy size="20 MB" />
            <!--            当前日期不再与日志的开始日期匹配时, 这里是每天滚动一次 -->
            <!--            interval: 默认为1 , 根据日期模式中最具体的时间单位-->
            <TimeBasedTriggeringPolicy />
            <!--           允许用户比使用 DefaultRolloverStrategy max 属性时更灵活地控制在滚动时删除哪些文件,
                            在删除它们之前最多保留 20 个文件-->
            <DefaultRolloverStrategy max="20"/>

        </RollingFile>
    </Appenders>
    <Loggers>

        <Logger name="org.example" level="debug"/>

        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="Rolling-info" />
            <AppenderRef ref="Rolling-warn" />
        </Root>
    </Loggers>
</Configuration>

测试代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Hello world!
 *
 */
public class App 
{
    private static final Logger logger = LoggerFactory.getLogger(App.class);

    public static void main( String[] args ){
        logger.debug( "Hello World!111" );
        logger.info( "Hello World!111" );
        logger.warn( "Hello World!111" );
        logger.error( "Hello World!111" );
    }
}

小程序推广(拾光待办)

微信搜索:拾光待办

或者扫描二维码:

拾光待办二维码.jpg