slf4j+log4j配置java日志系统

534 阅读1分钟

@[toc]

  • 配置必须依赖包 版本大家可以自己去找最新的
    <!-- lombok 依赖包 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok-version}</version>
    	<scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.1</version>
    </dependency>
    <!--slf4j与log4j2的桥接包log4j-slf4j-impl,作用是使用slf4j的api,但是底层实现是基于log4j2-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.11.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    
  • 配置 log4j2.xml 文件 可以配置成 xml 形式,也支持 properties 文件格式,这里我才用 xml 形式,这个文件我存在项目下src/main/resources中,由于这个文件名,它可以被自动读取到,log4j2.xml 文件的详细内容如下所示:
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN" monitorInterval="30">
        <Properties>
            <!-- 配置参数日志目录前缀 -->
            <Property name="LOG_HOME">logs</Property>
            <!--配置日志输出格式 %t:线程名;%C:类名;%M:方法名;%m:错误信息;%n:换行 -->
            <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %C.%M - %m%n</property>
        </Properties>
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${PATTERN}"/>
            </Console>
            <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,
            则这size大小的日志会自动存入按年份-月份建立的文件夹下面,作为存档。清空demo.log,将最新的log输出到demo.log中,以此循环。 -->
            <RollingFile name="RollingFile" fileName="${LOG_HOME}/demo.log"
                         filePattern="${LOG_HOME}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-demo-%i.log">
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${PATTERN}" charset="UTF-8"/>
                <Policies>
                    <!-- 基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。 modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am. -->
                    <!-- 关键点在于 filePattern后的日期格式,以及TimeBasedTriggeringPolicy的interval,
                    日期格式精确到哪一位,interval也精确到哪一个单位 -->
                    <!-- log4j2的按天分日志文件 : %d{yyyy-MM-dd}-%i.log-->
                    <!-- log4j2的按小时分日志文件 : %d{yyyy-MM-dd HH}-%i.log-->
                    <!-- log4j2的按分钟分日志文件 : %d{yyyy-MM-dd HH:mm}-%i.log-->
                    <!-- log4j2的按秒分日志文件 : %d{yyyy-MM-dd HH:mm:ss}-%i.log-->
                    <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                    <!-- SizeBasedTriggeringPolicy:Policies子节点, 基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小. -->
                    <SizeBasedTriggeringPolicy size="5 MB" />
                </Policies>
                <!--设置生成的最多文件数-->
                <DefaultRolloverStrategy max="20"/>
            </RollingFile>
        </Appenders>
        <Loggers>
            <!--指定日志输出的最低级别以及输出到哪些Appender-->
            <root level="debug">
                <appender-ref ref="Console"/>
                <appender-ref ref="RollingFile"/>
            </root>
        </Loggers>
    </Configuration>
    
  • 具体使用 代码中将类上标记 @Slf4j 注解,然后内部使用 log.info 的形式即可