使用logback.xml配置文件自定义日志文件输出

148 阅读3分钟

一、yml文件配置

--0726--
首先需要在.yml文件中加入以下配置

#Mybatis输出sql日志
mybatis-plus:
  mapper-locations: classpath*:**/*.xml
  global-config:
    # 关闭MP3.0自带的banner
    banner: false
    db-config:
      #主键类型
      id-type: ASSIGN_ID
      # 默认数据库表下划线命名
      table-underline: true
    configuration:
      # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      # 返回类型为Map,显示null对应的字段
      call-setters-on-nulls: true

#日志配置
logging:
  config: src/main/resources/logback.xml

这里面最主要的是这一段代码

logging:
  config: src/main/resources/logback.xml

作用是定位到logback文件的位置,路径正确才能读取到logback文件
路径前不加上 ”/“ 则表示相对路径,如 resources/logback.xml
路径前加上 ”/“ 则表示绝对路径 如 /project/xxx/xxx/logback.xml ,表示项目所在的磁盘下,project文件下....以此类推
linux系统环境下 路径前加上”/“则表示根目录下的路径,不加则表示项目所在目录下。

二、logback配置

<property name="LOG_HOME" value="logs" />

表示一个名为LOG_HOME的变量,其值为logs

    <property name="LOG_NAME" value="data-info" />
    <property name="LOG_BATCH" value="data-batch" />
    <property name="LOG_STREAM" value="data-stream" />

这个是同样的道理,表示变量以及值,后续配置中直接用变量名,就会读到里面的值。

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>-->
            <pattern>%blue(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %magenta([%thread]) %cyan(%logger{36} - [%M:%L]) - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

这个配置表示控制台输出日志的配置:

appender标签:

  • name="CONSOLE":指定这个appender的名称为CONSOLE,可以在其他地方引用。
  • class="ch.qos.logback.core.ConsoleAppender":指定使用Logback的控制台输出appender。

encoder标签:

  • %blue%highlight%magenta%cyan:这些是Logback的颜色设置和高亮功能,用于使日志输出更加可视化。
  • %d{yyyy-MM-dd HH:mm:ss.SSS}:输出日志的日期时间,精确到毫秒。
  • %-5level:输出日志级别(左对齐,最多占5个字符)。
  • [%thread]:输出线程名。
  • %logger{36}:输出logger的名称,最多36个字符。
  • [%M:%L]:输出方法名和行号。
  • %msg:输出日志消息。
  • %n:换行符。
<!-- 统一的日志文件 -->
    <appender name="FILE_DATA" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_NAME}/${LOG_NAME}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME}/${LOG_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <!--最多保留多少文件-->
            <maxHistory>500</maxHistory>
        </rollingPolicy>
    </appender>
  • ${LOG_HOME}/${LOG_NAME}/${LOG_NAME}.log:指定日志文件的路径和名称。${LOG_HOME}${LOG_NAME}是变量,用到的是刚刚property中设置的变量。
  • <fileNamePattern>:指定滚动后日志文件的命名模式。%d{yyyy-MM-dd}用于表示日期,%i用于表示索引,以确保文件名的唯一性。
  • <maxFileSize>:指定单个日志文件的最大大小为500MB,超过这个大小后将会滚动切割日志文件。
  • <maxHistory>:指定保留的历史日志文件的最大数量为500个。

这里appender可以设置多个,用于控制不同的代码运行设置输出至不同的路径下。

<!-- 设置 历史数据 包 logger -->
    <logger name="com.example.batchData" level="debug" additivity="false">
        <appender-ref ref="FILE_BATCH" />
    </logger>

    <!-- 设置 实时数据 包 logger -->
    <logger name="com.example.streamData" level="debug" additivity="false">
        <appender-ref ref="FILE_STREAM" />
    </logger>
  • name="com.example.batchData":指定了记录哪个包下的运行日志,这里是针对com.hdx.batchData包的日志记录配置。
  • level="debug"additivity="false":禁用了附加性,确保日志消息不会同时传播到父级logger,仅通过指定的appender处理。

上面设置的appender需要与这里对应。

<root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_DATA" />
</root>
  • <root>:根logger,是所有logger的根源,通常用于捕获未在其他logger中定义的日志消息。
  • level="info":设置根logger的日志级别为INFO,这意味着只会记录INFO级别及以上的日志消息。

<appender-ref>:指定了根logger的日志输出目标,这里有两个appender:

  • ref="CONSOLE":将日志消息输出到控制台。
  • ref="FILE_DATA":将日志消息输出到名为FILE_DATA的appender,这是上文中定义的滚动文件输出的appender。

日志记录级别
trace>debug>info>warn>error>fatal

  1. TRACE:提供比DEBUG更详细的信息,用于诊断问题时追踪程序的详细流程。一般情况下,生产环境中不会启用TRACE级别,因为它生成的日志比较冗长。

  2. DEBUG:用于输出程序的调试信息,通常包括详细的变量值、运行状态等。在开发和测试阶段常用,但在生产环境中一般需要慎重使用,因为可能会泄露敏感信息或者导致性能问题。

  3. INFO:用于输出程序运行时的关键信息,如服务启动信息、重要的状态变化等。INFO级别的日志通常用于标识程序的正常运行情况,对监控应用健康状态很有帮助。

  4. WARN:表明潜在的问题,不会影响程序的正常运行,但可能需要引起关注,如潜在的错误条件、不推荐的使用模式等。WARN级别的日志通常用于标识需要注意的情况。

  5. ERROR:用于指示发生了错误,但不影响系统继续运行,通常表明当前操作或请求失败。ERROR级别的日志通常是需要及时处理的问题,可能需要开发人员介入修复。

  6. FATAL:表示严重错误,可能导致应用程序无法继续运行。FATAL级别的日志通常用于标识严重的系统问题,如无法恢复的异常、关键组件的故障等。

完整配置

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

    <!-- 日志文件路径 -->
    <property name="LOG_HOME" value="logs" />
    <!--    日志名称-->
    <property name="LOG_NAME" value="data-info" />
    <property name="LOG_BATCH" value="data-batch" />
    <property name="LOG_STREAM" value="data-stream" />

    <!-- 控制台输出日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>-->
            <pattern>%blue(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %magenta([%thread]) %cyan(%logger{36} - [%M:%L]) - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 统一的日志文件 -->
    <appender name="FILE_DATA" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_NAME}/${LOG_NAME}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME}/${LOG_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <!--最多保留多少文件-->
            <maxHistory>500</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 历史数据包日志文件 -->
    <appender name="FILE_BATCH" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_BATCH}/${LOG_BATCH}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_BATCH}/${LOG_BATCH}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>200</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 实时数据包日志文件 -->
    <appender name="FILE_STREAM" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_STREAM}/${LOG_STREAM}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_STREAM}/${LOG_STREAM}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>400</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 设置 历史数据 包 logger -->
    <logger name="com.example.batchData" level="debug" additivity="false">
        <appender-ref ref="FILE_BATCH" />
    </logger>

    <!-- 设置 实时数据 包 logger -->
    <logger name="com.example.streamData" level="debug" additivity="false">
        <appender-ref ref="FILE_STREAM" />
    </logger>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_DATA" />
    </root>

</configuration>

三、输出结果

image.png

image.png

image.png

image.png

image.png

--0812 更新--
完整配置

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

    <!-- 日志文件路径 -->
    <property name="LOG_HOME" value="logs" />
    <!--    日志名称-->
    <property name="LOG_NAME" value="data-info" />
    <property name="LOG_BATCH" value="data-batch" />
    <property name="LOG_STREAM" value="data-stream" />

    <!-- 控制台输出日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>-->
            <pattern>%blue(%d{yyyy-MM-dd HH:mm:ss.SSS}) %highlight(%-5level) %magenta([%thread]) %cyan(%logger{36} - [%M:%L]) - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 统一的日志文件 -->
    <appender name="FILE_DATA" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_NAME}/${LOG_NAME}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME}/${LOG_NAME}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <!--最多保留多少文件-->
            <maxHistory>500</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 历史数据包日志文件 -->
    <appender name="FILE_BATCH" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_BATCH}/${LOG_BATCH}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_BATCH}/${LOG_BATCH}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>200</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 实时数据包日志文件 -->
    <appender name="FILE_STREAM" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_STREAM}/${LOG_STREAM}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger Line:%-3L - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_STREAM}/${LOG_STREAM}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>400</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 设置 历史数据 包 logger -->
    <logger name="com.example.batchData" level="debug" additivity="false">
        <appender-ref ref="FILE_BATCH" />
        <appender-ref ref="CONSOLE" />
    </logger>

    <!-- 设置 实时数据 包 logger -->
    <logger name="com.example.streamData" level="debug" additivity="false">
        <appender-ref ref="FILE_STREAM" />
        <appender-ref ref="CONSOLE" />
    </logger>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_BATCH" />
        <appender-ref ref="FILE_STREAM" />
        <appender-ref ref="FILE_DATA" />
    </root>

</configuration>

其中,更新的是以下部分,修改成这样之后,日志文件输出和控制台数据就会保持一致了。

<!-- 设置 历史数据 包 logger -->
    <logger name="com.example.batchData" level="debug" additivity="false">
        <appender-ref ref="FILE_BATCH" />
        <appender-ref ref="CONSOLE" />
    </logger>

    <!-- 设置 实时数据 包 logger -->
    <logger name="com.example.streamData" level="debug" additivity="false">
        <appender-ref ref="FILE_STREAM" />
        <appender-ref ref="CONSOLE" />
    </logger>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE_BATCH" />
        <appender-ref ref="FILE_STREAM" />
        <appender-ref ref="FILE_DATA" />
    </root>