美文网首页
[java]56、Log4j2

[java]56、Log4j2

作者: 史记_d5da | 来源:发表于2022-09-11 13:17 被阅读0次

1、基本使用

1、配置maven依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.3</version>
</dependency>

2、添加日志打印

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class TestLog4j2 {
    public static void main(String[] args) {
        Logger log = LogManager.getLogger(TestLog4j2.class);
        log.fatal("致命_FATAL");
        log.error("错误_ERROR");
    }
}

2、配置文件

1、Configuration标签
status:控制日志的打印级别,例如:status="WARN"
monitorInterval:每隔多少秒扫描配置文件、应用配置文件最新修改

<Configuration status="WARN" monitorInterval="5"></Configuration>

2、Console
target:可以取值SYSTEM_OUTSYSTEM_ERR
3、ThresholdFilter:控制日志级别阈值
onMatch:到达时,onMismatch:未到达时
取值:
ACCEPT:开启。会忽略后面的所有Filter
DENY:关闭。会忽略后面所有的Filter
NEUTRAL:中立。会传递给下一个Filter进行处理
4、LevelRangeFilter
minLevel:填写最大级别、maxLevel填写最小级别

<Console name="Console" target="SYSTEM_OUT">
<!--            如果达到WARN ->Deny-->
<!--            没有达到WARN ->ACCEPT-->
<!--            NEUTRAL保持中立不选择,往下交付处理-->
    <Filters>
        <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
<!--                只会输出WARN\INFO\INFO级别-->
        <ThresholdFilter level="DEBUG" onMatch="DENY" onMismatch="ACCEPT" />
<!--                等同于上面的两个ThresholdFilter-->
        <LevelRangeFilter minLevel="WARN" maxLevel="DEBUG" onMatch="DENY" onMismatch="ACCEPT"/>
    </Filters>
</Console>

4、彩色打印
highlight:不同级别显示不同颜色
%c{1.}:简写日志包名,打印形式c.s.TestLog4j2

<Property name="PATTERN">%style{%d{HH:mm:ss.SSS}}{yellow} %highlight{[%-5p]} %style{%c{1.}}{magenta}: %m%n</Property>

日志换行打印效果

换行
打印结果
5、File
配置文件名称即可输出打印
<File name="File" fileName="${BASE_PATH}/${BASE_NAME}.log">
    <PatternLayout pattern="${PATTERN}" />
</File>

6、RollingFile

  • Policies:滚动文件的策略,基于时间和文件大小的策略
    TimeBasedTriggeringPolicySizeBasedTriggeringPolicy
  • Delete:文件的删除规则
    IfFileName:文件名称符合的规则
    IfLastModified:文件的修改属性
<RollingFile name="RollingFile"
                     fileName="${BASE_PATH}/${BASE_NAME}2.log"
                     filePattern="${BASE_PATH}/%d{yyyy}/%d{MM}/%d{dd}/HH_%i.log.zip"
        >
    <PatternLayout pattern="${PATTERN}" />
    <Policies>
<!--                基于时间滚动策略:当时间跨度达到2分钟就滚动-->
<!--                时间单位取决于filepattern的最小时间单位-->
        <TimeBasedTriggeringPolicy interval="2" />
<!--                基于文件大小滚动策略:当文件达到10KB时就滚动-->
        <SizeBasedTriggeringPolicy size="10KB" />
    </Policies>
<!--            设置%i的最大值,默认是7-->
    <DefaultRolloverStrategy max="10" >
<!--                maxDepth:要访问目录的最大级别数,默认1,代表仅访问basePath目录中的文件-->
        <Delete bashPath="${BASE_PATH}" maxDepth="2">
            <IfFileName glob="*1*.log.zip"></IfFileName>
<!--                    文件的时间超过5s-->
            <IfLastModified age="5s">
                <IfAny>
                    <IfAccumulatedFileSize exceeds="20KB" />
                    <IfAccumulatedFileCount exceeds="10" />
                </IfAny>
            </IfLastModified>
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

7、Async异步打印日志

<Async name="Async">
    <Appender-ref ref="RollingFile" />
</Async>

3、SLF4j+Log4j2的实现

1、需要在maven中添加依赖
log4j-slf4j-impl:依赖
log4j-coreslf4j-api,因此不需要添加此两项依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.13.3</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

2、java代码中实现

@Slf4j
public class TestSLF4JLog4j2 {
    public static void main(String[] args) {
        log.error("错误_ERROR");
        log.warn("警告_WARN");
    }
}

相关文章

网友评论

      本文标题:[java]56、Log4j2

      本文链接:https://www.haomeiwen.com/subject/sxqanrtx.html