SpringBoot应用默认日志输出使用姿势

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot应用默认日志输出使用姿势

概述


SpringBoot应用的一个最大特点就是去配置化,日志系统也不例外。默认情况下,你不做任何配置,只要引入相关依赖,就可以在控制台看到日志的输出,当然也可以在配置文件简单配置就能改变日志输出的行为。本文主要通过SpringBoot 2.7.0版本讲解默认日志输出的相关配置以及如何使用。


简单使用


  1. 引入相关依赖

项目工程中引入下面的依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
  <version>2.7.0</version>
</dependency>

一般的web引用都会自动引入该依赖,不需要手动引入。

1671191226572.jpg

  1. 添加日志
@SpringBootApplication
@Slf4j
public class LogApplication
{
    public static void main( String[] args )
    {
        SpringApplication.run(LogApplication.class, args);
        log.trace("Trace 日志...");
        log.debug("Debug 日志...");
        log.info("Info 日志...");
        log.warn("Warn 日志...");
        log.error("Error 日志...");
    }
}

启动类中添加验证日志,得到输出结果:

1671191273360.jpg

  1. 小结
  • 默认情况下,不做任何配置,日志仅仅输出到控制台中。
  • 日志级别从小到大为 trace < debug < info < warn < error < fatal,由于默认日志级别设置为 INFO,因此上面样例 trace 和 debug 级别的日志都看不到。

我们可以通过一些配置项,改变这种默认行为。


日志相关配置


  1. 修改日志级别 logging.level

只需要在配置文件中通过 logging.level 包名的形式可以精细化控制各个不同包日志的输出级别,也可以通过logging.level.root全局修改日志级别。日志级别可以配置下面6个: trace < debug < info < warn < error < fatal。

1671191292478.jpg

结果:

1671191335138.jpg

  1. 日志分组logging.group

日志如果包很多的话,对每个相同类别的包设置级别会很麻烦,好在日志系统有个日志分组功能。比如按照模块,我们用户模块的包归为一组,然后统一修改这个组的日志。

// 设置分组
logging.group.user=com.alvinlkk.user,com.alvinlkk.person
// 对分组修改日志级别
logging.level.user=debug

SpringBoot给我们内置了两个分组web 和 sql,如下:

1671191362053.jpg

  1. 日志输出到文件中logging.file.name

如果你想将日志输出到文件,可以通过如下配置指定日志文件名:

logging.file.name=logdemo.log

logging.file.name 可以只指定日志文件名,也可以指定日志文件全路径,例如下面这样:

logging.file.name=/Users/alvin/Documents/javaboy/logdemo.log

运行结果:

1671191390692.jpg

  1. 日志输出到目录中logging.file.path

如果你只是想重新定义输出日志文件的路径,也可以使用 logging.file.path 属性, 生成的文件名为spring.log, 如果同时配置了logging.file.path和logging.file.name,logging.file.path配置会失效。

logging.file.path=/Users/alvin/CodeRepo/Person/springboot-demo/springboot-03-log

1671191403696.jpg

  1. 修改日志输出格式

logging.pattern.console修改控制台的日志输出格式。

logging.pattern.file修改文件中的日志输出格式。

# 修改在控制台输出的日志格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger : %msg%n
# 修改输出到文件的日志格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n

符号说明:

%d{HH:mm:ss.SSS}:日志输出时间

%-5level:日志级别,并且使用 5 个字符靠左对齐

%thread:输出日志的进程名字,这在 Web 应用以及异步任务处理中很有用

%logger:日志输出者的名字

%msg:日志消息

%n:平台的换行符

  1. 归档相关的日志
归档配置 说明 默认值
logging.logback.rollingpolicy.clean-history-on-start 是否在启动时清理归档日志文件。 false
logging.logback.rollingpolicy.file-name-pattern 归档日志文件名的模式。 ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.logback.rollingpolicy.max-file-size 单个文件最大日志文件大小 10MB
logging.logback.rollingpolicy.max-history 要保存的存档日志文件的最大数量 7
logging.logback.rollingpolicy.total-size-cap 日志文件被删除之前,可以容纳的最大大小 0B


actuator查看日志


配置了logging.file.name后,日志内容也可以通过actuator的端点查看。

  1. 引入actuator相关的jar
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 配置暴露所有的断点
management.endpoints.web.exposure.include=*
  1. 查看日志内容

浏览器输入地址http://localhost:8080/actuator/logfile 可以查看日志内容,如下图:

1671191430374.jpg


总结


虽然默认的的日志实现很方便,但是有一些局限性,只能实现对日志一些非常简单的配置,如果想实现更加细粒度的日志配置,那就需要使用日志实现的原生配置,例如 Logback 的 classpath:logback.xml,Log4j 的 classpath:log4j.xml 等。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
92 4
|
2月前
|
Java API 开发者
你的应用是不是只有service_stdout.log?
本文记录了logback-spring.xml文件不生效问题的整体排查思路。
|
9天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
14天前
|
Kubernetes Cloud Native Java
当 Quarkus 遇上 Spring Boot,谁才是现代云原生应用的终极之选?究竟哪款能助你的应用傲视群雄?
Quarkus 和 Spring Boot 均为构建现代云原生应用的热门框架,旨在简化开发流程并提升性能。Spring Boot 依托庞大的 Spring 生态系统,提供开箱即用的体验,适合快速搭建应用。Quarkus 由红帽发起,专为 GraalVM 和 HotSpot 设计,强调性能优化和资源消耗最小化,是云原生环境的理想选择。
15 3
|
24天前
|
运维 NoSQL Java
SpringBoot接入轻量级分布式日志框架GrayLog技术分享
在当今的软件开发环境中,日志管理扮演着至关重要的角色,尤其是在微服务架构下,分布式日志的统一收集、分析和展示成为了开发者和运维人员必须面对的问题。GrayLog作为一个轻量级的分布式日志框架,以其简洁、高效和易部署的特性,逐渐受到广大开发者的青睐。本文将详细介绍如何在SpringBoot项目中接入GrayLog,以实现日志的集中管理和分析。
100 1
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
2月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
2月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
38 0
下一篇
无影云桌面