log4j2实现日志输出

引言

日志是我们在软件开发过程中非常重要的一个组成部分,它能够记录系统运行时的各种信息和异常,方便我们在需要的时候进行排查和调试。而Log4j2是目前最为流行的Java日志框架之一,它提供了丰富的日志输出方式和配置选项,可以满足各种不同场景下的需求,一般运行程序都会在控制台输出日志,并保存日志文件;这里我简单演示一下如何使用log4j2将日志持久化为日志文件。

项目环境:

  • spring boot
  • 日志框架log4j2

Log4j2介绍
Log4j2是Apache SoftwareFoundation基金会的一个开源项目,它是Log4j的升级版本,相比于Log4j,Log4j2提供了更快的日志输出速度、更低的内存占用以及更加丰富的配置选项。Log4j2支持多种不同的日志级别(如DEBUG、INFO、WARN、ERROR、FATAL)和多种不同的日志输出方式(如控制台输出、文件输出、数据库输出等),可以根据需要选择不同的输出方式和级别。此外,Log4j2还支持异步日志记录、插件机制和动态配置等高级特性。

与Logback相比,Log4j2有许多优势。以下是Log4j2的一些主要优势:

  • 高性能:Log4j2在日志输出方面具有非常高的性能。
  • 灵活性:Log4j2提供了许多配置选项,可以灵活地配置日志记录器。
  • 插件支持:Log4j2支持许多插件,可以扩展其功能。
  • 异步日志记录:Log4j2支持异步记录,可以提高应用程序的性能。
  • 配置简单:Log4j2的配置非常简单易懂。

日志配置

首先要对pom.xml配置文件进行修改:

去除springboot的默认日志配置,在start和web依赖上进行修改:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <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>

然后在resources文件下创建日志配置文件,可以使用yml格式或者xml格式,这里使用xml格式:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
    <!--打印在本地,根据具体存储地址填写-->
    <Properties>
        <Property name="baseDir" value="logs"/>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT"
                             onMismatch="DENY"/>
            <!--disableAnsi可以启用控制台日志输出颜色-->
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%6p} %style{%5pid}{bright,magenta} --- [%15.15t] %style{%-40.40logger{39}}{bright,cyan}: %m%n"
                    disableAnsi="false"/>
        </Console>

        <!-- info级别日志文件输出 -->
        <RollingFile name="InfoAppender" fileName="${baseDir}/info.log"
                     filePattern="${baseDir}/$${date:yyyy-MM-dd}/info_%i.%d{yyyy-MM-dd-HH}.log" append="true">
            <!-- 过滤器 -->
            <Filters>
                <!-- 限制日志级别在info及以上在error以下 -->
                <ThresholdFilter level="info"/>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!-- 日志格式 -->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- 策略 -->
            <Policies>
                <!-- 每隔一天转存 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 文件大小 -->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始自动清理-->
            <DefaultRolloverStrategy max="10">
                <Delete basePath="${baseDir}/$${date:yyyy-MM-dd}/" maxDepth="2">
                    <IfFileName glob="*/*.log" />
                    <!--7天-->
                    <IfLastModified age="168H" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- error级别日志文件输出 -->
        <RollingFile name="ErrorAppender" fileName="${baseDir}/error.log"
                     filePattern="${baseDir}/$${date:yyyy-MM-dd}/error_%i.%d{yyyy-MM-dd-HH}.log" append="true">
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10">
                <Delete basePath="${baseDir}/$${date:yyyy-MM-dd}/" maxDepth="2">
                    <IfFileName glob="*/*.log" />
                    <!--7天-->
                    <IfLastModified age="168H" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- debug级别日志文件输出 -->
        <RollingFile name="DebugAppender" fileName="${baseDir}/debug.log"
                     filePattern="${baseDir}/$${date:yyyy-MM-dd}/debug_%i.%d{yyyy-MM-dd-HH}.log" append="true">
            <Filters>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10">
                <Delete basePath="${baseDir}/$${date:yyyy-MM-dd}/" maxDepth="2">
                    <IfFileName glob="*/*.log" />
                    <!--7天-->
                    <IfLastModified age="168H" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!--异步appender-->
        <Async name="AsyncAppender" includeLocation="true">
            <AppenderRef ref="ErrorAppender"/>
            <AppenderRef ref="InfoAppender"/>
            <AppenderRef ref="DebugAppender"/>
        </Async>
    </Appenders>

    <Loggers>
        <logger name="org.springframework" level="INFO">
        </logger>
        <logger name="org.mybatis" level="INFO">
        </logger>
        <Root level="debug" includeLocation="true">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="AsyncAppender"/>
        </Root>
    </Loggers>
</Configuration>

这是我的配置,里面也写了部分注释,具体参数网上搜都有,这个日志文件仔细看看不难;

然后application.yml配置文件中引入该日志配置:

image-20230115134612348

这就完成了log4j2日志框架的引入;

启动测试一下:

控制台输出正常

image-20230115134742454

生成的日志文件:

image-20230115134849913

error.log

image-20230115134942651

info.log

image-20230115135014016

debug.log

image-20230115135130384

这就完成了基本配置,后期可以根据实际情况进行灵活更改;

总结

Log4j2是一个功能强大的日志框架,它可以帮助我们轻松地记录和管理应用程序的日志信息。在Spring Boot应用程序中使用Log4j2也非常简单,只需要在项目中添加Log4j2的依赖和配置文件,然后在代码中使用Logger对象输出日志即可。

在实际开发中,我们可以根据自己的需要定制Log4j2的日志输出格式和级别,以满足不同的需求。同时,我们也需要注意日志输出的性能问题,避免在高并发场景下过多地输出日志信息,从而影响应用程序的性能。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YXXYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值