说明

在这个简短的教程中,我们将探索 Spring Boot 中可用的主要日志记录选项:logbacklog4j2

初始设置

使用 starters 时,默认使用 Logback 进行日志记录。
让我们首先创建一个 Spring Boot 模块。

  • 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 新建类
@RestController
public class LoggingController { Logger logger = LoggerFactory.getLogger(LoggingController.class); @RequestMapping("/")
public String index() {
logger.trace("A TRACE Message");
logger.debug("A DEBUG Message");
logger.info("An INFO Message");
logger.warn("A WARN Message");
logger.error("An ERROR Message"); return "Howdy! Check out the Logs to see the output...";
}
}

一旦我们加载了 Web 应用程序,我们就可以通过简单地访问http://localhost:8080/来触发这些日志记录行。

Spring Boot 使用模式和 ANSI 颜色对其进行预配置,以使标准输出更具可读性。
现在让我们运行应用程序并访问http://localhost:8080/页面,看看控制台中发生了什么。

我们可以看到,Logger 的默认日志级别预设为 INFO,这意味着TRACE和DEBUG消息是不可见的。

为了在不更改配置的情况下激活它们,我们可以在命令行上传递–debug或–trace参数:

java -jar target/spring-boot-logging-0.0.1-SNAPSHOT.jar --trace

日志级别

Spring Boot 还允许我们通过环境变量访问更细粒度的日志级别设置。有几种方法可以实现这一点。

首先,我们可以在 VM 选项中设置日志记录级别:

-Dlogging.level.org.springframework=TRACE
-Dlogging.level.com.test.java=TRACE

或者,如果我们使用 Maven,我们可以 通过命令行定义我们的日志设置:

mvn spring-boot:run
-Dspring-boot.run.arguments=--logging.level.org.springframework=TRACE,--logging.level.com.test.java=TRACE

使用 Gradle 时,我们可以通过命令行传递日志设置。这将需要设置bootRun任务。

完成后,我们运行应用程序:

./gradlew bootRun -Pargs=--logging.level.org.springframework=TRACE,--logging.level.com.test.java=TRACE

如果我们想永久更改详细程度,我们可以在application.properties文件中这样做,如下所述:

logging.level.root=WARN
logging.level.com.baeldung=TRACE

最后,我们可以使用我们的日志框架配置文件永久更改日志级别。

我们提到 Spring Boot Starter 默认使用 Logback。让我们看看如何定义一个 Logback 配置文件的片段,我们在其中为两个单独的包设置级别:

<logger name="org.springframework" level="INFO" />
<logger name="com.test.java" level="INFO" />

请记住,如果 使用上述不同选项多次定义包的日志级别,但使用不同的日志级别,将使用最低级别。

因此,如果我们同时使用 Logback、Spring Boot 和环境变量设置日志级别,那么日志级别将是TRACE,因为它是请求级别中最低的。

配置logback

尽管默认配置也挺好用,但无法满足我们实际企业对于生产环境中的日志记录。
比如:自定义的日志格式、日志输出基本、日志文件保存策略等等,为此我们需要自定义一份日志设置文件。
Spring Boot 启动时候会去类路径下按顺序查找以下配置文件:

  • logback-spring.xml
  • logback.xml
  • logback-spring.groovy
  • logback.groovy

此处,我们在resources目录下新建logback-spring.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="LOGS" value="./logs" /> <appender name="Console"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%green(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
</Pattern>
</layout>
</appender> <appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/spring-boot-logger.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder> <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender> <!-- LOG everything at INFO level -->
<root level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root> <!-- LOG "com.baeldung*" at TRACE level -->
<logger name="com.test.java" level="trace" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</logger> </configuration>

再次启动项目访问后,查看输出如下:

正如我们所看到的,它现在记录了TRACE和DEBUG消息,并且整个控制台模式在文本和色彩上都与以前不同。

它现在还登录在当前路径下创建的/logs文件夹中的文件,并通过滚动策略将其存档。

使用log4j2

除了使用默认的logback我们还推荐使用log4j2,从先进性上面来讲log4j2更胜一筹。
首先我们需要调整以下pom依赖:

<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-log4j2</artifactId>
</dependency>

此时,我们需要在类路径中放置一个配置文件,名称可以是下面这样:

  • log4j2-spring.xml
  • log4j2.xml

我们将通过 Log4j2(通过 SLF4J)打印,无需进一步修改。
让我们编写一个简单的log4j2-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="LOGS" value="./logs" /> <appender name="Console"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%green(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
</Pattern>
</layout>
</appender> <appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/spring-boot-logger.log</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder> <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender> <!-- LOG everything at INFO level -->
<root level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</root> <!-- LOG "com.baeldung*" at TRACE level -->
<logger name="com.test.java" level="trace" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</logger> </configuration>
  • 再编写一个测试类:
@RestController
@Slf4j
public class LombokLoggingController { @RequestMapping("/dolog4j")
public String index(){
log.trace("A TRACE Message");
log.debug("A DEBUG Message");
log.info("An INFO Message");
log.warn("A WARN Message");
log.error("An ERROR Message"); return "Howdy! Check out the Logs to see the output...";
}
}

启动程序访问后的日志输出如下:

Springboot中如何使用日志框架logback和log4j2?的更多相关文章

  1. SpringBoot中使用log4j日志

    一:引入jar包 使用SpringBoot创建项目的时候,pom文件引入了spring-boot-starter,其中包含了spring-boot-starter-logging,该依赖内容就是Spr ...

  2. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  3. SpringBoot整合日志框架LogBack

    日志可以记录我们应用程序的运行情况,我们可以通过日志信息去获取应用程序更多的信息.常用处理java日志的组件有:slf4j.log4j.logback.common-logging等.其中log4j是 ...

  4. SpringBoot接入轻量级分布式日志框架(GrayLog)

    我是3y,一年CRUD经验用十年的markdown程序员‍常年被誉为优质八股文选手 前两天我不是发了一篇数据链路追踪的文章嘛,在末尾也遗留了TODO:运行应用的服务器一般是集群,日志数据会记录到不同的 ...

  5. 初探日志框架Logback

    一. 背景 最近因为学习项目时需要使用logback日志框架来打印日志, 使用过程中碰到很多的疑惑, 而且需要在控制台打印mybatis执行的sql语句, 于是决定沉下心来 研究一下logback的使 ...

  6. 【Java】Java日志框架Logback的简单例子

    常用的日志框架 SLF4J,全称Simple Logging Facade for Java,即Java简单日志外观框架,顾名思义,它并非具体的日志实现,而是日志外观框架 java.util.logg ...

  7. 后端——框架——日志框架——logback——《官网》阅读笔记——第一章节

    第一章节搭建了logback日志框架的环境,演示了Hello World的示例,并详细分析了示例. 搭建日志框架的过程非常简单,只需要在项目的classpath上添加以下三个jar包,logback- ...

  8. 为什么要用日志框架 Logback 基本使用

    [日志框架]以时间为单位描述应用项目运行状态:用户下线.接口超时.数据库崩溃等等一系列事件 [日志框架能力] 1.定制输出格式 2.定制输出目标 3.携带 Context 比如 HelloWorld. ...

  9. (六)Spring Boot之日志配置-logback和log4j2

    一.简介 支持日志框架:Java Util Logging, Log4J2 and Logback,默认是使用logback 配置方式: 默认配置文件配置 引用外部配置文件配置 二.默认配置文件配置( ...

  10. 在android中使用logback-android日志框架配置 slf4j + logback

    为什么使用 slf4j + logback logbak定位于log4j的替代者,logback同样支持slf4j,方便被替换.在Android平台上,我在使用log4中遇到tag混乱的问题.相比lo ...

随机推荐

  1. pybind11

    fatal error: Python.h: no such file or directory 在使用pybind11时,如果不做调整可能就会出现这样的情况,Python.h一般出现在usr/inc ...

  2. JVM的GC学习

    JVM的GC学习 2023-12-28T17:20:25.182+0800: 7.363: [Full GC (Metadata GC Threshold) [PSYoungGen: 29067K-& ...

  3. [转帖]Linux 内核的 4 大 IO 调度算法

    https://cloud.tencent.com/developer/article/1615744 Linux 内核包含4个IO调度器,分别是 Noop IO scheduler.Anticipa ...

  4. [转帖]git常用命令

    https://www.cnblogs.com/xingmuxin/p/11416870.html GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Goog ...

  5. [转帖]tidb backup

    https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore BACKUP 语句使用的引擎与 BR 相同,但备份过程是由 TiDB 本身驱动, ...

  6. [转帖]PostgreSQL 慢查询SQL跟踪

    https://www.cnblogs.com/VicLiu/p/12017704.html PostgreSQL 开启慢SQL捕获在排查问题时是个很有效的手段.根据慢SQL让我在工作中真正解决了实际 ...

  7. ESXi规避ESXiArgs勒索软件的简单方法

    摘要 今天查看深信服科技的公众号 发现有一个ESXiArgs 的勒索软件. 感觉对公司存在一定的风险.但是感觉操作手册有点简单. 这里想着写全面一点. 作为操作手册使用. 并且深信服仅是解决了在运行, ...

  8. CCPC Finals 2021 H Harie Programming Contest (网络流&支配树的妙用)

    Link 题意: 给一个二分图,求有多少种方案删去恰好两个点,使得最大匹配数不变.\(n,m\le 2\times 10^5\). 二话不说先跑一遍 Dinic 网络流,设残量网络形成的图为 \(G\ ...

  9. element-ui表格展开行每次只能展开一行

    element-ui表格展开行每次只能展开一行 <template> <el-table :data="tableData" :expand-row-keys=& ...

  10. 你不知道的Promise构造函数Promise(excutor)

    Promise构造函数Promise(excutor) // 说明一下:excutor会在Promise内部立刻同步调用:(异步操作在执行器执行) var p = new Promise((resol ...