SpringBoot+log4j2的思路记录,实现每天输出日志文件

 收到大哥的一个要求:要用log4j2来记录开发过程中产生的信息,并以天为单位,保存日志文件;七天为一个周期。

听到这个需求,心里直打鼓,怎么做啊;

学习了一圈下来以后,也算是完成了这个任务安排;

乘机写下这篇博文,记录自己的实操过程,仅当复盘思路整理使用;

log4j2  一个用来记录操作过程,并汇总成日志的东西,同类的产品还有logback、log4j;

        为什么选择log4j2?

                因为快、可靠、丢记录丢的少;好,打住,不继续深入。

        怎么在springboot项目中集成log4j2?

                写一个配置文件就好;

        配置文件写哪里?

                放在resources文件夹下就好,跟springboot的配置文件(application.properties)同级,

                文件名称写成log4j2-spring.xml;

                这个命名写成这样,就不用去springboot的application.properties里面再配置路径了。偷个懒。

          (这里多写两句,做个备注:log4j2的配置文件可以是xml格式的,也可以是properties格式的,也可以是yml格式的,只不过一开始是xml格式的,所以接受度比较广,网上能找到的用xml来配置的资料也比较多)

                在用log4j2的时候,在pom文件里引入依赖,不过springboot的“web启动”依赖里面也带了日志记录的工具logging,所以在引入依赖的时候,要把“web启动”依赖里面的logging摘出来。

否则会报依赖冲突,有复数的可以用来记录、生成的日志的工具,咱们的程序不知道要用哪一个。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--刨去spring本身的日志记录配置-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
            <!--引入log4j2日志-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <!--刨去spring本身的日志记录配置-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        pom文件中有提到一个叫slf4j的东西,这个就是log4j2的门面啦,就相当于管家一样的角色,在lombok这个插件里面,有用到一个叫@slf4j的注解,一般打在【类】上头,就表明给这个【类】提供一个用来记录日志的对象--log;一般是可以直接使用的,非常方便。

        依赖导入好了,就可以开始写log4j2的配置文件了。

        log4j2-spring.xml 

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="OFF">
    <properties>
<!--        基础配置:文件的名称、日志的输出路径、字符集、输出格式-->
        <Property name="appName">personal_program</Property>
        <property name="logPath">D:\personalProgram\personal_program_log</property>
        <Property name="logFileCharset">UTF-8</Property>
        <property name="logFilePattern">%highlight{%d{yyyy-MM-dd HH:mm:ss} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}</property>
    </properties>

    <Appenders>
<!--        日志输出一号:控制台输出 ,日志记录级别:DEBUG; 输出格式:延续基础配置-->
        <Console name="ConsoleLog" target="SYSTEM_OUT">
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${logFilePattern}" />
        </Console>
<!--        日志输出二号:以文件的形式输出,日志记录级别:ERROR; 输出格式:延续基础配置
                        文件的生成策略:大小不超过10MB,每天记录;
                        最大日志文件数量为30;理想情况下是保存一个月内的ERROR报错信息-->
        <RollingFile name="FILE_ERROR"
                     fileName="${logPath}/${appName}_error.log"
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/${appName}_error_%d{yyyy-MM-dd}_%i.log.gz">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${logFilePattern}" charset="${logFileCharset}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
<!--                以时间为单位的策略;粒度粗细跟【filePattern】里的时间设定有关,
                    目前是%d{yyyy-MM-dd} ,interval="1",所以时间策略就是每天
                    如果是%d{yyyy-MM-dd HH-mm} ,interval="1",则时间策略就是每分钟
                    -->
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
<!--        日志输出三号:以文件的形式输出,日志记录级别:INFO;输出格式:延续基础配置-->
        <RollingFile name="FILE_INFO"
                     fileName="${logPath}/${appName}_info.log"
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/${appName}_info_%d{yyyy-MM-dd HH-mm}_%i.log.gz">
<!--            过滤策略,上限WARN,下限INFO-->
            <levelRangeFilter minLevel="WARN" maxLevel="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${logFilePattern}" charset="${logFileCharset}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="10KB" />
                <TimeBasedTriggeringPolicy modulate="true" interval="2" />
            </Policies>
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <logger name="com.zaxxer.hikari.pool.PoolBase" level="ERROR"/>
        <logger name="com.zaxxer.hikari.pool.HikariPool" level="ERROR"/>
        <logger name="com.zaxxer.hikari.HikariDataSource" level="ERROR"/>
        <logger name="org.springframework.jdbc.datasource" level="ERROR"/>
        <!--根记录器-->
        <Root level="debug">
            <appender-ref ref="ConsoleLog" />
            <appender-ref ref="FILE_INFO" />
            <appender-ref ref="FILE_ERROR" />
        </Root>
    </Loggers>
</Configuration>

配置好以后,运行自己的项目,记得打上@slf4j的注解,然后就可以看到效果了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值