跟我学SpringBoot之Logging

本文介绍SpringBoot中日志配置的方法,包括日志格式、输出途径(控制台和文件)、日志级别设置、日志分组及自定义配置等。通过调整配置可以实现更精细的日志管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只需低头努力,剩下的交给时光,时间会公平地帮你处理一切

前言

log配置可能是被忽视的一个环节,一般的项目中日志配置好了基本上很少去改动,我们常规操作是log.info来记录日志内容,很少会有人注意到springBoot中日志的配置

日志格式

2021-03-09 21:33:06.594  INFO 21236 --- [           main] com.gzb.springboot.logging.LoggingMain   : Starting LoggingMain using Java 1.8.0_111 on JT-DS998-pzj with PID 21236 (E:\workspace\springBoot-demo\out\production\classes started by arno.peng in E:\workspace\springBoot-demo)
2021-03-09 21:33:06.597  INFO 21236 --- [           main] com.gzb.springboot.logging.LoggingMain   : The following profiles are active: dev
2021-03-09 21:33:08.012  INFO 21236 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-03-09 21:33:08.024  INFO 21236 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-09 21:33:08.024  INFO 21236 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-03-09 21:33:08.156  INFO 21236 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-03-09 21:33:08.156  INFO 21236 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1498 ms
2021-03-09 21:33:08.408  INFO 21236 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-09 21:33:08.643  INFO 21236 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-03-09 21:33:08.662  INFO 21236 --- [           main] com.gzb.springboot.logging.LoggingMain   : Started LoggingMain in 3.163 seconds (JVM running for 5.555)

如上图所示是springBoot中默认的日志输出格式,一般包括几个部分

  • 日期和时间:精确到毫秒,易于排序
  • 日志级别:ERROR, WARN, INFO, DEBUG, TRACE
  • 进程ID
  • [ main]表示线程名称
  • Logger名称:一般是类的路径
  • 最后是日志的内容

日志输出

控制台输出

默认情况下SpringBoot将日志输出到控制台,会输出INFO、WARN、ERROR这几个级别的日志,当然还可以通过DEBUG参数来输出DEBUG日志,比如你在application.yml配置中打开DEBUG日志

debug:true

或者以jar包的形式启动 java -jar app.jar --debug

都可以以DEBUG模式来启动项目,此时日志里面会多出很多信息

2021-03-09 21:48:22.581  INFO 2736 --- [           main] com.gzb.springboot.logging.LoggingMain   : Starting LoggingMain using Java 1.8.0_111 on JT-DS998-pzj with PID 2736 (E:\workspace\springBoot-demo\out\production\classes started by arno.peng in E:\workspace\springBoot-demo)
2021-03-09 21:48:22.586  INFO 2736 --- [           main] com.gzb.springboot.logging.LoggingMain   : The following profiles are active: dev
2021-03-09 21:48:22.590 DEBUG 2736 --- [           main] o.s.boot.SpringApplication               : Loading source class com.gzb.springboot.logging.LoggingMain
2021-03-09 21:48:22.681 DEBUG 2736 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@a3d8174
2021-03-09 21:48:24.179 DEBUG 2736 --- [           main] .s.b.w.e.t.TomcatServletWebServerFactory : Code archive: D:\maven\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.4.3\de2bd17a8eb9bc3dfa629aa06f2e9fe3bf603c85\spring-boot-2.4.3.jar
2021-03-09 21:48:24.180 DEBUG 2736 --- [           main] .s.b.w.e.t.TomcatServletWebServerFactory : Code archive: D:\maven\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.4.3\de2bd17a8eb9bc3dfa629aa06f2e9fe3bf603c85\spring-boot-2.4.3.jar
2021-03-09 21:48:24.180 DEBUG 2736 --- [           main] .s.b.w.e.t.TomcatServletWebServerFactory : None of the document roots [src/main/webapp, public, static] point to a directory and will be ignored.
2021-03-09 21:48:24.205  INFO 2736 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-03-09 21:48:24.218  INFO 2736 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-09 21:48:24.218  INFO 2736 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.43]
2021-03-09 21:48:24.344  INFO 2736 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-03-09 21:48:24.344 DEBUG 2736 --- [           main] w.s.c.ServletWebServerApplicationContext : Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT]
2021-03-09 21:48:24.344  INFO 2736 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1663 ms
2021-03-09 21:48:24.364 DEBUG 2736 --- [           main] o.s.b.w.s.ServletContextInitializerBeans : Mapping filters: characterEncodingFilter urls=[/*] order=-2147483648, formContentFilter urls=[/*] order=-9900, requestContextFilter urls=[/*] order=-105
2021-03-09 21:48:24.364 DEBUG 2736 --- [           main] o.s.b.w.s.ServletContextInitializerBeans : Mapping servlets: dispatcherServlet urls=[/]
2021-03-09 21:48:24.432 DEBUG 2736 --- [           main] o.s.b.w.s.f.OrderedRequestContextFilter  : Filter 'requestContextFilter' configured for use
2021-03-09 21:48:24.433 DEBUG 2736 --- [           main] s.b.w.s.f.OrderedCharacterEncodingFilter : Filter 'characterEncodingFilter' configured for use
2021-03-09 21:48:24.433 DEBUG 2736 --- [           main] o.s.b.w.s.f.OrderedFormContentFilter     : Filter 'formContentFilter' configured for use
2021-03-09 21:48:24.754  INFO 2736 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-09 21:48:24.772 DEBUG 2736 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : ControllerAdvice beans: 0 @ModelAttribute, 0 @InitBinder, 1 RequestBodyAdvice, 1 ResponseBodyAdvice
2021-03-09 21:48:24.877 DEBUG 2736 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : 2 mappings in 'requestMappingHandlerMapping'
2021-03-09 21:48:24.914 DEBUG 2736 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Patterns [/webjars/**, /resources/**] in 'resourceHandlerMapping'
2021-03-09 21:48:24.925 DEBUG 2736 --- [           main] .m.m.a.ExceptionHandlerExceptionResolver : ControllerAdvice beans: 0 @ExceptionHandler, 1 ResponseBodyAdvice
2021-03-09 21:48:24.943 DEBUG 2736 --- [           main] inMXBeanRegistrar$SpringApplicationAdmin : Application Admin MBean registered with name 'org.springframework.boot:type=Admin,name=SpringApplication'
2021-03-09 21:48:25.029  INFO 2736 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

这个只是一部分,后面还有很多SpringBoot自动配置的信息因为篇幅的原因,没有贴上来
DEBUG模式适用于调试问题,打印更加详细的信息方便问题的定位

文件输出

默认情况下,SpringBoot会把日志输出到控制台,一般生产环境会将日志输出到文件,便于存储。如果想把日志写入文件,可以在application.yml配置文件中新增logging.file.name或者logging.file.path配置

  • logging.file.name 写入指定的日志文件,名称可以是绝对路径或相对路径
  • logging.file.path 写入指定的目录,日志名称是spring.log,路径可以是绝对路径或相对路径

日志级别

SpringBoot支持的所有日志系统都可以通过在application.yml中设置logging.level来配置日志级别,日志级别有TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF这几种,使用方式如下

logging:
  level:
    root: "warn"
    org.springframework.web: "debug"
    org.hibernate: "error"

以上可以为不同的功能模块设置不同的日志级别,例如将root设置为warn,将hibernate设置为error

日志分组

有时候我们需要对多个功能同时进行日志级别配置,这个时候可以利用日志的分组功能。例如,我们需要设置tomcat相关的日志级别,我们可以先将对应的模块分组

logging:
  group:
    tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"

然后对分组进行日志级别的设置

logging:
  level:
    tomcat: "trace"

自定义日志配置

你可以在项目的类路径上包含适当的日志jar来激活对应的日志记录系统,也可以通过org.springframework.boot.logging.LoggingSystem系统属性来强制指定SpringBoot来使用指定的日志记录系统,你还可以使用none值完全禁用Spring Boot的日志记录配置

根据日志系统的不同,加载的文件也不同

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)logging.properties

建议在日志配置中使用-spring变量(例如,logback-spring.xml而不是logback.xml)。
如果使用标准配置位置,Spring不能完全控制日志初始化。

为了方便个性化配置,一些spring日志配置转换成了系统配置

在这里插入图片描述

所有支持的日志记录系统都支持系统属性的配置,说白了就是为了简化配置,将logging配置转换成系统属性

具体详细配置可以参考SpringBoot官方文档中各个日志系统的用法

Logback扩展

Spring Boot包括许多对Logback的扩展,可以帮助进行高级配置。您可以在配置文件logback-spring.xml中使用这些扩展。

由于标准的logback.xml配置文件加载得太早,因此不能在其中使用扩展。您需要使用logback-spring.xml或定义logging.config属性

概要文件配置
<springProfile name="staging">
    <!-- "staging" profile 被激活时启用此配置 -->
</springProfile>

<springProfile name="dev | staging">
    <!-- "dev" or "staging"  profile 被激活时启用此配置 -->
</springProfile>

<springProfile name="!production">
    <!-- 当不是"production"被激活时,启用此配置 -->
</springProfile>

以上标签可以让你根据spring的profile激活的配置来选择性的进行日志配置,name属性用于指定激活的spring profile,可以正向指定,也可以用排除的方式

环境配置
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
        defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
    <remoteHost>${fluentHost}</remoteHost>
    ...
</appender>

标签用于将spring上下文中的属性公布出来,可以在logback中使用,如上所示,
定义了参数fluentHost,默认值为localhost,可以直接在配置文件中以${fluentHost}形式引用

好了,日志的部分就这么多,没有写太多的例子,大概了解一下后可以根据自己系统的实际情况来进行自定义配置,或者就使用springBoot默认的日志配置也没太多的问题

如果感觉对你有些帮忙,请收藏好,你的关注和点赞是对我最大的鼓励!
如果想跟我一起学习,坚信技术改变世界,请关注【Java天堂】公众号,我会定期分享自己的学习成果,第一时间推送给您

在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何在Spring Boot中集成MySQL。首先,我得回想一下自己之前学过的Spring Boot相关知识,确保步骤正确。用户可能是个刚入门的开发者,所以需要把过程讲得详细些,避免使用太专业的术语。 首先,应该从创建项目开始。记得Spring Initializr是个好工具,可以快速生成项目结构。需要选择正确的依赖,比如Spring Data JPA和MySQL Driver。这里要确认用户是否了解这些依赖的作用,可能需要简单解释一下。 接下来是配置数据库连接。application.properties或application.yml文件的配置是关键,包括URL、用户名、密码以及Hibernate的相关设置。要提醒用户替换成自己的数据库信息,特别是注意时区问题,避免常见的连接错误。 然后,创建实体类。用JPA的注解来映射数据库表,这里要示范@Entity和@Table的用法,还有字段的注解如@Id、@GeneratedValue。可能需要解释这些注解的作用,帮助用户理解ORM的概念。 接下来是Repository接口,继承JpaRepository,这样就能获得基本的CRUD方法。这里可以提到Spring Data JPA的好处,减少样板代码。 然后是服务层和控制层的编写。服务类使用Repository进行数据操作,控制器处理HTTP请求。这部分需要展示如何自动注入依赖,以及基本的REST API创建方法。 最后,测试整个应用,确保能正确连接到MySQL,并且API能返回预期结果。常见的错误可能包括依赖缺失、配置错误、数据库权限问题,需要提醒用户检查这些点。 可能用户在实际操作中会遇到问题,比如驱动版本不兼容或者时区设置不对,所以需要给出一些排查建议。另外,补充一些高级配置,比如连接池、日志记录,可以帮助用户进一步优化应用。 整个过程中要保持步骤清晰,代码示例准确,避免遗漏关键步骤。同时,考虑到用户可能不熟悉某些概念,适当加入解释,确保他们能跟上每一步的操作。检查是否有最新的依赖版本,比如MySQL Connector/J的版本是否有更新,需要确认当前的稳定版本号,避免用户因为版本问题出错。</think>以下是Spring Boot集成MySQL的完整实现步骤,包含代码示例和注意事项: 1. 创建Spring Boot项目 使用Spring Initializr(https://start.spring.io)创建项目时选择: - MySQL Driver - Spring Data JPA 或直接在pom.xml添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> ``` 2. 配置数据库连接 在application.properties中配置: ```properties # MySQL连接配置 spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password # JPA配置 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect ``` 3. 创建实体类 ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String email; // 必须包含无参构造函数 public User() {} // getters and setters } ``` 4. 创建Repository接口 ```java public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByUsername(String username); } ``` 5. 创建Service层 ```java @Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User createUser(User user) { return userRepository.save(user); } public List<User> getAllUsers() { return userRepository.findAll(); } } ``` 6. 创建REST控制器 ```java @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @PostMapping public ResponseEntity<User> createUser(@RequestBody User user) { User savedUser = userService.createUser(user); return new ResponseEntity<>(savedUser, HttpStatus.CREATED); } @GetMapping public List<User> getAllUsers() { return userService.getAllUsers(); } } ``` 常见问题排查: 1. 连接失败:检查MySQL服务是否启动,用户权限是否正确 2. 时区问题:在连接URL中添加`&serverTimezone=Asia/Shanghai` 3. 表不存在:确认`spring.jpa.hibernate.ddl-auto`设置为update/create 4. 驱动问题:确保mysql-connector-j版本与MySQL服务器版本匹配 高级配置建议: ```properties # 连接池配置 spring.datasource.hikari.connection-timeout=20000 spring.datasource.hikari.maximum-pool-size=10 # 显示SQL参数 logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE ``` 启动前准备: 1. 确保MySQL已创建对应数据库 2. 用户有数据库的访问权限 3. MySQL版本建议8.0+,兼容性更好 通过以上步骤即可完成Spring Boot与MySQL的集成,实现基本的CRUD操作。实际开发中可根据需求添加事务管理、数据验证等更多功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值