说明

在这个简短的教程中,我们将探索 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. SpringMVC03—RestFul和Controller

    控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中一个控制器类可以包含多个 ...

  2. [转帖]【sql server安全】sql server连接加密,sql server SSL加密连接

    https://www.cnblogs.com/gered/p/13595098.html#_label1_0 MSSQL - 最佳实践 - 使用SSL加密连接 回到顶部 author: 风移 回到顶 ...

  3. [转帖]MySQL定点数类型DECIMAL用法详解

    https://www.cnblogs.com/danielzzz/p/16824214.html 一.MySQL DECIMAL 的使用 DECIMAL 数据类型用于在数据库中存储精确的数值,我们经 ...

  4. [转帖]学习如何编写 Shell 脚本(基础篇)

    https://juejin.cn/post/6930013333454061575 前言 如果仅仅会 Linux 一些命令,其实已经可以让你在平时的工作中游刃有余了.但如果你还会编写 Shell 脚 ...

  5. rclone 的下载地址-官方网站

    Downloads Rclone is single executable (rclone, or rclone.exe on Windows) that you can simply downloa ...

  6. [转帖]Linux命令学习手册-readelf

    https://www.jianshu.com/p/405844abefae readelf elf-file(s) 功能 用于显示 elf 格式文件的信息. 描述 readelf 用来显示一个或者多 ...

  7. Oracle19c 单节点ASM 存储模式数据库实例搭建过程

    1. 建议使用OEL进行安装. 2. 可以优先在Oracle的yum上面下载必须的rpm包. 地址为: http://yum.oracle.com/repo/OracleLinux/OL7/lates ...

  8. Spring Boot 统一RESTful接口响应和统一异常处理

    一.简介 基于Spring Boot 框架开发的应用程序,大部分都是以提供RESTful接口为主要的目的.前端或者移动端开发人员通过调用后端提供的RESTful接口完成数据的交换. 统一的RESTfu ...

  9. bootstrap ----- bootstrap table表格参数

    表格参数: 名称 标签 类型 默认 描述 - data-toggle String 'table' 不用写 JavaScript 直接启用表格. classes data-classes String ...

  10. Mysql 8.0前后,实现创建用户,指定用户只能访问指定的数据库中的表

    最近在做公司项目的过程中,出现了这样的需求.第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接口,第三方系统通过数据库直接将 ...