Spring Boot 日志配置(Slf4j)

SLF4J与Logback简介

Java日志框架众多,常用的有java.util.logging, log4j, logback,commons-logging等。

SLF4J (Simple Logging Facade For Java),它是一个针对于各类Java日志框架的统一Facade抽象。SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定。

LogBack是由log4j的创始人开发的新一代日志框架,用于替代log4j。它效率更高、能够适应诸多的运行环境。LogBack的架构设计足够通用,可适用于不同的环境。目前LogBack分为三个模:lobback-core,logback-classic和logback-access。core模块是其它两个模块的基础,classic是core的扩展,是log4j巨大改进的版本。

LogBack-classic本身实现了SL4J的API,因此可以很容易的在logback与其它日志系统之间转换,例如log4j、JDK1.4中的java.util.logging(JUL)。

第三个模块access,它集成了Servlet容器,提供了通过HTTP访问日志的功能,若了解access可访问文档: http://logback.qos.ch/access.html

LogBack的日志级别有trace、debug、info、warn、error,级别排序为: TRACE < DEBUG < INFO < WARN < ERROR。关于日志级别详细信息,可参考官方文档: http://logback.qos.ch/manual/architecture.html

默认配置 Logback

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。

日志输出内容元素具体如下:

  • 时间日期:精确到毫秒

  • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE

  • 进程ID

  • 分隔符:--- 标识实际日志的开始

  • 线程名:方括号括起来(可能会截断控制台输出)

  • Logger名:通常使用源代码的类名

  • 日志内容

Logback默认配置

<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>

使用logback.xml配置日志

Spring Boot 提供了一套日志系统,优先选择logback。日志服务一般都在ApplicationContext创建前就初始化了,所以日志配置,可以独立于Spring的配置。我们也可以通过系统属性和传统的Spring Boot外部配置文件,实现日志控制和管理。

根据不同的日志系统,SpringBoot按如下“约定规则”组织配置文件名加载日志配置文件:

日志框架

配置文件

Logback

logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

Log4j

log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

Log4j2

log4j2-spring.xml, log4j2.xml

JDK (Java Util Logging)

logging.properties

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。

logback-base.xml 配置解析

  1. <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->

  2. <!-- appender是configuration的子节点,是负责写日志的组件。 -->

  3. <!-- ConsoleAppender:把日志输出到控制台 -->

  4. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

  5. <encoder>

  6. <pattern>%d %p (%file:%line\)- %m%n</pattern>

  7. <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->

  8. <charset>UTF-8</charset>

  9. </encoder>

  10. </appender>

  11. <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->

  12. <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->

  13. <!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->

  14. <appender name="syslog"

  15. class="ch.qos.logback.core.rolling.RollingFileAppender">

  16. <File>log/sys.log</File>

  17. <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->

  18. <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->

  19. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

  20. <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->

  21. <!-- 文件名:log/sys.2017-12-05.0.log -->

  22. <fileNamePattern>log/sys.%d.%i.log</fileNamePattern>

  23. <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->

  24. <maxHistory>30</maxHistory>

  25. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">

  26. <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->

  27. <maxFileSize>1KB</maxFileSize>

  28. </timeBasedFileNamingAndTriggeringPolicy>

  29. </rollingPolicy>

  30. <encoder>

  31. <!-- pattern节点,用来设置日志的输入格式 -->

  32. <pattern>

  33. %d %p (%file:%line\)- %m%n

  34. </pattern>

  35. <!-- 记录日志的编码 -->

  36. <charset>UTF-8</charset> <!-- 此处设置字符集 -->

  37. </encoder>

  38. </appender>

  39. <!-- 控制台输出日志级别 -->

  40. <root level="info">

  41. <appender-ref ref="STDOUT" />

  42. </root>

  43. <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->

  44. <!-- com.appley为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->

  45. <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->

  46. <logger name="com.appleyk" level="DEBUG">

  47. <appender-ref ref="syslog" />

  48. </logger>

logback-spring.xml解析

<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (C) 2018 Baidu, Inc. All Rights Reserved.
-->
<configuration debug="true">

<include resource="logback-base.xml"/>

</configuration>

### 如何在 Spring Boot配置 SLF4J日志输出格式 在 Spring Boot 项目中,默认情况下已经集成了 SLF4J 和 Logback,因此可以通过调整 Logback 的配置来实现自定义的日志输出格式。以下是具体的配置方法: #### 1. 修改 `logback-spring.xml` 文件 为了自定义日志输出格式,可以在项目的 `src/main/resources` 目录下创建或编辑 `logback-spring.xml` 文件。通过设置 `<pattern>` 节点的内容来自定义日志的输出样式。 以下是一个典型的 `logback-spring.xml` 配置示例[^2]: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 设置根日志级别 --> <root level="info"> <appender-ref ref="CONSOLE"/> </root> </configuration> ``` 上述配置中的 `%pattern` 是关键部分,用于指定日志的具体输出格式。常见的占位符及其含义如下: - `%d`: 输出日期时间,默认格式为 ISO8601。 - `%thread`: 当前线程名。 - `%level`: 日志级别(如 DEBUG, INFO, WARN, ERROR)。 - `%logger{X}`: 记录器名称,其中 `{X}` 表示截断长度。 - `%msg`: 日志消息内容。 - `%n`: 换行符。 #### 2. 自定义其他日志属性 除了控制台输出外,还可以配置文件输出或其他高级功能。例如,在日志文件中追加特定的信息或者按天分割日志文件。下面展示了一个带有滚动策略的日志文件配置: ```xml <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> ``` 在此配置中,日志会写入到 `logs/app.log` 文件,并每天生成一个新的日志文件,旧的日志文件最多保留 30 天。 #### 3. 替换默认日志框架 (可选) 如果希望使用 Log4j2 来替代默认的 Logback,则需要移除默认依赖并添加 Log4j2 的相关依赖项。具体操作包括修改 Maven 或 Gradle 构建工具中的依赖声明以及放置合适的 `log4j2.xml` 配置文件[^1]。 Maven 示例: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <!-- 排除默认的 Logback 依赖 --> <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 配置文件 (`log4j2.xml`) 可能类似于以下结构: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %class{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` --- ### 总结 以上展示了如何利用 SLF4J 结合 Logback 实现自定义日志输出格式的方法。无论是简单的控制台打印还是复杂的日志轮转机制,都可以通过合理配置 XML 文件完成。对于更复杂的需求,也可以考虑替换为 Log4j2 并相应调整其配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Kingairy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值