Spring Boot Log 日志使用教程
2020-12-13 06:07
标签:日志组 win 表示 数据库工程师 不同的 name 关系 policy 统计分析 我们编写任何 Spring Boot 程序,可能绕不开的就是 log 日志框架(组件)。 本项目源码下载 注意本项目提供的源码已在后期重新编写,有部分日期描述不一致。 如果你只是想知道 Spring boot log 如何使用,请直接观看 3.2 使用 Spring Boot Logback 日志能干的事情很多,对于学习程序,测试的工程师来说,日志能够定位问题,解决问题,是最大的功能点。 日志级别是对日志记录信息的轻重缓急的划分。通常从轻到重划分为: 通常当我们指定日志级别为 通常日志以文本流的形式存储在磁盘,也可以把日志存储在关系型数据库中或 No Sql 中 一般日志组件都可以自定义输出格式。 当然自己开发日志组件也是可以的,实际上也不是很难,在一些特殊场景,很多公司都是用自己开发的日志组件,但是对于大多数应用来说,我们使用标准的日志组件就可以解决我们的问题。 Spring Boot 日志组件最为常见的包括了 大部分场景我们都是推荐 Spring Boot 自带的日志 很多无良媒体直接抓取文章又不写明来源,我是 fishpro程序鱼,本文作者。 在 Spring Boot 中,logback 是基于 slf4j 实现的。 slf4j的全称是Simple Loging Facade For Java,即它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,他能够实现大部分 日志组件。 如上图所示, 使用IDEA创建项目,其实也是从 (https://start.spring.io/ ) 创建,只是更为方便,我们一般采用从IDEA创建Spring Boot项目。 注意mac和windows的IDEA创建过程是一样的。 1)File>New>Project,如下图选择Spring Initializr 然后点击 【Next】下一步 2)填写GroupId(包名)、Artifact(项目名) 即可。点击 下一步 3)选择依赖 Spring Web Starter 前面打钩 4)项目名设置为 spring-boot-study-log 5)编写个简单的示例,可以看出使用日志组件非常的简单 运行可以看到输出了 hello world 看到网上不少人贴出了 logback 的依赖配置,实际上从依赖包中可以看出,默认是不需要单独配置 logback 依赖的。不需要单独配置、不需要单独配置、不需要单独配置。 在浏览器中执行 http://locahost:8081/ 如上图,我们没有 实际上,Spring Boot 是一种约定大于配置,也就是说,他本身有一个配置文件叫 如下配置,设置level的级别为 在浏览器中执行 http://locahost:8081/ 输出如下日志 可以看出已经有了 如下配置代码,指定了日志的输出级别、日志存储路径和输出的格式。 在浏览器中执行 http://locahost:8081/ 同时我们可以看到在项目根路径下多处理 我们可以在 关于如何在 Spring Boot 中配置不同的环境实现 开发环境(dev)、测试环境(test)、生成环境(prod)分离,请参考Spring Boot 中多环境配置 如果需要更为详细的自定义 logback 日志,那么我们需要使用 xml 配置文件来配置。 使用 logback-spring.xml 来自定义日志的配置,主要需要了解 logback-spring.xml 详细功能点,能够配置哪些内容。 首先我们要知道 logback-spring.xml 文件放在哪里。 默认 这里我们使用自定义配置 实现 在浏览器中执行 http://locahost:8081/ 此时,你会发现工程根目录多出来 applog 文件夹, 有趣的是,当我们把 xml 文件同 application.yml 都进行配置的时候,他执行了 logback-spring。xml 中的配置,所有 logback-spring.xml 配置是优先的 有的时候一个系统应用 Application 中使用了多个日志框架来处理,比如同时使用了 Logback、log4j如何统一呢? 总结:本章介绍了日志组件 Spring Boot Logback 的简单使用,下一个章节,我们将详细说明 logback-spring.xml 的标签含义及标签的属性含义。 Spring Boot Log 日志使用教程 标签:日志组 win 表示 数据库工程师 不同的 name 关系 policy 统计分析 原文地址:https://www.cnblogs.com/fishpro/p/11167469.html
在大多数程序员眼中日志是用来定位问题的。这很重要。1 Log 日志概述
1.1 Log 日志组件能干什么
1.2 日志的级别 Log Level
INFO
级别,那么 TRACE
DEBUG
级别的日志就不会被输出打印,同理如果指定日志级别为 ERROR
,那么其他类型的日志将不会被打印。1.3 日志的输出 Log Import
1.4 Spring Boot 日志组件 Log Plugin
Logback
Spring Boot 约定的默认配置log4j
log4j2
slf4j
JUL
logback
。2 Spring Boot Logback
3.1 关于 Logback
logback
中使用了 slf4j
,logback-classic.jar
,logback-core.jar
实现了 logback 日志功能。3.2 生成一个用于测试的 Spring Boot 项目
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class LogApplication {
public static void main(String[] args) {
Logger logger =LoggerFactory.getLogger(LogApplication.class);
SpringApplication.run(LogApplication.class, args);
logger.debug("This is a debug message");//注意 spring 默认日志输出级别为 info 所以默认情况下 这句不会打印到控制台
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
}
}
2019-07-10 23:51:49.225 INFO 3906 --- [ main] com.fishpro.log.LogApplication : Started LogApplication in 1.688 seconds (JVM running for 2.317)
2019-07-10 23:51:49.226 INFO 3906 --- [ main] com.fishpro.log.LogApplication : This is an info message
2019-07-10 23:51:49.227 WARN 3906 --- [ main] com.fishpro.log.LogApplication : This is a warn message
2019-07-10 23:51:49.227 ERROR 3906 --- [ main] com.fishpro.log.LogApplication : This is an error message
3.3 依赖配置 Pom.xml
3.4 使用 YML 配置 logback
3.4.1 编写一个 Controller 层类作为测试用 IndexController
@Controller
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/")
String index(){
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
return "index";
}
}
DEBUG
的日志,也就是说 logger.debug("This is a debug message");
没有被输出到控制台。base.xml
,在这个配置文件里面,已经默认配置了输出的日志级别 让我们来看看 base.xml
,如下面的 xml 代码所示,root level="INFO"
已经定义了日志输出级别为 INFO
。这就是为什么,我看到控制台没有输出 DEBUG
那条日志。3.4.2 在 application.yml 中配置
DEBUG
logging:
level:
com.fishpro.log: debug
DEBUG
日志2019-07-08 12:51:30.423 INFO 36966 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-07-08 12:51:30.423 INFO 36966 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-07-08 12:51:30.428 INFO 36966 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms
2019-07-08 12:51:30.447 DEBUG 36966 --- [nio-8081-exec-1] c.f.s.controller.IndexController : This is a debug message
2019-07-08 12:51:30.447 INFO 36966 --- [nio-8081-exec-1] c.f.s.controller.IndexController : This is an info message
2019-07-08 12:51:30.448 WARN 36966 --- [nio-8081-exec-1] c.f.s.controller.IndexController : This is a warn message
2019-07-08 12:51:30.448 ERROR 36966 --- [nio-8081-exec-1] c.f.s.controller.IndexController : This is an error message
3.4.3 在 application.yml 详细配置
logging:
#level 日志等级 指定命名空间的日志输出
level:
com.fishpro.log: debug
#file 指定输出文件的存储路径
file: logs/app.log
#pattern 指定输出场景的日志输出格式
pattern:
console: "%d %-5level %logger : %msg%n"
file: "%d %-5level [%thread] %logger : %msg%n"
00:08:15 [reactor-http-nio-2] DEBUG com.fishpro.log.LogApplication - This is a debug message
00:08:15 [reactor-http-nio-2] INFO com.fishpro.log.LogApplication - This is an info message
00:08:15 [reactor-http-nio-2] WARN com.fishpro.log.LogApplication - This is a warn message
00:08:15 [reactor-http-nio-2] ERROR com.fishpro.log.LogApplication - This is an error message
logs
文件夹,下面有 app.log
文件,app.log
文件同时记录了日志的输出。3.4.4 不同环境中配置
dev
、prod
、test
等环境中配置不同的 log 配置项目,我们只需要根据我们的配置文件来设置即可。3.5 使用 logback-spring.xml 来配置 logback 日志
3.5.1 指定 logback-spring.xml 路径
logback-spring.xml
路径在 resource 文件夹下,即你只要在 resource 文件夹下新建文件 logback-spring.xml
即可。3.5.2 使用 logback-spring.xml 自定义配置
applog/2019-07-08/2019-07-08.log
按照日期分类来记录文件,这很重要。优先级
4 多日志组件如何统一框架