美文网首页
实现自定义SpringBoot框架日志组件の二:配置文件

实现自定义SpringBoot框架日志组件の二:配置文件

作者: Yellowtail | 来源:发表于2022-08-26 19:54 被阅读0次

系列

实现自定义SpringBoot框架日志组件の一:日志系统
实现自定义SpringBoot框架日志组件の二:配置文件
实现自定义SpringBoot框架日志组件の三: 自定义pattern
实现自定义SpringBoot框架日志组件の四: 自适应

前言

上一篇 博客已经实现了自定义日志系统,,但是并没有配置任何 日志配置文件,这篇博客就来实现一下

目标

  1. 针对不同环境,提供不同的配置文件
  2. local/dev 业务日志级别为debug,且日志会输出到console,便于本地调试
  3. prod 业务日志级别为info,日志仅输出到文件,考虑到性能,不会输出到console

1. 配置文件打到 jar 包里

spring

从spring的jar结构里可以看到,spring把日志文件打到了jar包里,通过下面的代码直接加载

loadConfiguration(getPackagedConfigFile("log4j2.xml"), logFile, getOverrides(initializationContext));

观察其结构,看不出来什么,去github看源码,得到了奥秘

image.png

发现:

  1. 文件是放在 resources 里的
  2. 文件在resources里也有包名

那我们照葫芦画瓢


image.png

在idea里,如图


image.png

注意:如果直接在idea里创建,会有点问题,只有一级文件夹,名字是com.github.hwhaocool, 而不是我们期望的三级文件夹

此时,打出来的包,已经符合我的要求了(jd-gui 打开)

image.png

2. 编写配置文件 log4j2-local.xml

内容如下

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
                <Property name="CONSOLE_LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%5p} [%clr{%t}{magenta}] %highlight{%-40.40c{1.}} %clr{:}{faint} %m%n%ex</Property>
        <Property name="FILE_LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %t %c : %m%n%ex</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}"/>
        </Console>

        <!--文件输出-->
        <RollingFile name="FILE" fileName="logs/service.log" filePattern="logs/service.%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${FILE_LOG_PATTERN}"/>
            <Policies>
                <!-- 一天一个新文件(这里的1是一个时间单位,具体单位是filePattern 定义的) -->
                <TimeBasedTriggeringPolicy interval="1"/>
                <!-- 一个文件最大3g-->
                <SizeBasedTriggeringPolicy size="3GB"/>
            </Policies>

            <!-- 最多保留30个历史日志文件 -->
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <AsyncLogger name="org.apache.catalina.startup.DigesterFactory" level="error" />
        <AsyncLogger name="org.apache.catalina.util.LifecycleBase" level="error" />
        <AsyncLogger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
        <AsyncLogger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
        <AsyncLogger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
        <AsyncLogger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
        <AsyncLogger name="org.hibernate.validator.internal.util.Version" level="warn" />
        <AsyncLogger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>


        <AsyncLogger name="com.github.hwhaocool.log" level="debug"/>

        <AsyncRoot level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="FILE" />
        </AsyncRoot>
    </Loggers>
</Configuration>

稍微解释一下

输出

这时候运行 web-with-log ,再请求一下接口,可以看到下面的输出

image.png

看起来还不错,颜色、对齐都有了

不过还是发现一些问题:

  1. 线程名称对齐的不是很好
  2. 类名信息太简单了,包名都是缩写
  3. 只有类的信息,没有方法和行号的信息
  4. local环境下,业务的debug日志没有输出

其中1属于对齐的问题,2、3 属于信息完整的问题,4属于自适应包名的问题
1、2、3的问题的解决,将会在下一篇博客讲到
4 后面再讲

相关文章

网友评论

      本文标题:实现自定义SpringBoot框架日志组件の二:配置文件

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