本文共 7599 字,大约阅读时间需要 25 分钟。
Spring Boot 2.1.5.RELEASE
maven 3.2.5
jdk1.8
(想自学习编程的小伙伴请搜索,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)
Spring Boot: 底层是Spring框架,Spring框架默认是JCL;
而Spring Boot选用 SLF4j和Logback
1) 如何在系统中使用SLF4j
开发的时候,日志记录方法的调用,不用改直接调用日志的实现类,而是调用日志抽象层里的方法;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }
SLF4j与其他日志框架结合示意图:
虽然我使用的是(slf4j & logback),但是其他的比如Spring框架用的commons-logging
日志框架, Hibernate用的是jboss-logging
日志框架,等等,太乱了了,所以我们要 统一日志记录,即使别的框架也要和我一起统一使用slf4j进行输出;
官方给出的示意图:
其实是这个依赖的这个包:
org.springframework.boot spring-boot-starter-logging 2.1.5.RELEASE compile
在 pom文件下鼠标右键点击:
我用的是2.1.5版本的Spring Boot, 笔者在学习过程中发现我看的老师视频里跟我的版本不一样,
这是那位老师的版本:
确切的说不是升级,而是剔除掉了jcl框架的转换,因为jcl框架最后更新日期是2014年,明显已经过时
但是基本推理的出来,slf4j的官网图确实是对SpringBoot1.x版本的示意,但是对我的2.x版本不符, 不过根据我的包名来看,他们的功能是差不多的,都是转成slf4j;
小总结:
中间替换包图示:
Spring框架默认的日志框架是: commons-logging;
但是Spring Boot引入spring核心jar包的时候去除了 日志jar包;
Spring Boot能自动适配所有的日志,而且底层使用 slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志排除掉
测试类:
import org.junit.Test;import org.junit.runner.RunWith;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringBootLoggingApplicationTests { // 日志记录器记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void contextLoads() { // 日志的级别 // 由低到高 trace < debug < info < warn < error logger.trace("这是trace日志.."); logger.debug("这是debug调试日志.."); logger.info("这是info日志.."); logger.warn("这是warn日志..."); logger.error("这是error错误日志"); }}
运行输出结果:
2019-07-02 19:22:35.980 INFO 8404 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是info日志..2019-07-02 19:22:35.981 WARN 8404 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是warn日志...2019-07-02 19:22:35.981 ERROR 8404 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是error错误日志
也就是说 SpringBoot默认的日志级别是 info
,所以只输出了info 和 比info级别大的日志;
打开我的yml配置文件:
logging: level: com.carson: trace
意思是把我 com.carson下的所有包都设置为 trace 日志级别
输出结果:
2019-07-02 19:29:17.406 TRACE 7076 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是trace日志..2019-07-02 19:29:17.407 DEBUG 7076 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是debug调试日志..2019-07-02 19:29:17.407 INFO 7076 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是info日志..2019-07-02 19:29:17.408 WARN 7076 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是warn日志...2019-07-02 19:29:17.408 ERROR 7076 --- [ main] c.c.s.SpringBootLoggingApplicationTests : 这是error错误日志
logging.level.com.carson= trace# path: 只创建任意一个文件夹, SpringBoot会默认生成一个 spring.log 作为日志文件logging.path= F:/spring/log# file: 指定一个路径和文件把 日志输出到 指定文件里logging.file= F:/springboot.log# pattern.console: 控制台输出的日志格式logging.pattern.console= %d{yyyy‐MM‐dd} === [%thread] === %‐5level === %logger{50} ==== %msg%n# pattern.file : 指定文件中日志的输出格式logging.pattern.file= %d{yyyy‐MM‐dd} === [%thread] === %‐5level === %logger{50} ==== %msg%n
日志框架 | 文件命名 |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
以上来自SpringBoot的, 上面是他要求的命名,SpringBoot会读取的
logback-spring.xml :
<?xml version="1.0" encoding="UTF-8"?> %d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n %d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n${LOG_HOME}/${appName}.log ${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log 365 100MB %d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n
把上面配置复制一份,放到项目的 resources 里面,或者自定义配置,命名规范的区别:
logback.xml: 直接被日志框架识别了
但是如果你以 logback-spring.xml 命名(推荐): 日志框架不直接加载日志的配置项了,由SpringBoot解析日志你就可以使用SpringBoot的一个高级功能
也就是刚才的配置文件里的:
%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n %d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n
你可以在你的 yml或者properties里配置一条:
spring.profiles.active= prod
来设置运行环境
其实SpringBoot官方为我们做了一些帮助:
Name | Description | Pom |
---|---|---|
spring-boot-starter-jetty | Starter for using Jetty as the embedded servlet container. An alternative to spring-boot-starter-tomcat | |
spring-boot-starter-log4j2 | Starter for using Log4j2 for logging. An alternative to spring-boot-starter-logging | |
spring-boot-starter-logging | Starter for logging using Logback. Default logging starter | |
spring-boot-starter-reactor-netty | Starter for using Reactor Netty as the embedded reactive HTTP server. | |
spring-boot-starter-tomcat | Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by spring-boot-starter-web | |
spring-boot-starter-undertow | Starter for using Undertow as the embedded servlet container. An alternative to spring-boot-starter-tomcat |
想使用哪个日志框架就直接导入哪个包就好了, 比如我想使用 log4j2 我先把默认的 spring-boot-starter-logging
排除掉 , 排除方法如下:
然后再pom文件里:
org.springframework.boot spring-boot-starter-log4j2 2.1.1.RELEASE
导入log4j2的包;
内容:
### set log levels ###log4j.rootLogger = debug , stdout , D , E### 输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} ===== %5p %c{ 1 }:%L - %m%n#### 输出到日志文件 ####log4j.appender.D = org.apache.log4j.DailyRollingFileAppender#log4j.appender.D.File = logs/log.log#log4j.appender.D.Append = true#log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志#log4j.appender.D.layout = org.apache.log4j.PatternLayout#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n##### 保存异常信息到单独文件 ####log4j.appender.D = org.apache.log4j.DailyRollingFileAppender#log4j.appender.D.File = logs/error.log ## 异常日志文件名#log4j.appender.D.Append = true#log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!#log4j.appender.D.layout = org.apache.log4j.PatternLayout#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
也就是说,如果像引入其他日志框架,只要把以前的框架排除,然后再引入新框架就ok了
转载地址:http://ecdp.baihongyu.com/