该怎么玩日志框架
开篇:玩日志框架的前提是你要知道为什么要用日志框架?
- 使用起来简单方便
- 提供不同级别的日志信息,可以有效的过滤信息
- 日志文件可以对调错起到很大作用
当然它的优点不仅仅是这一些,接下来我们就来聊一聊SpringBoot中的日志框架
日志框架的介绍
如今有很多的日志框架,其中性能也都有所不同,我们该如何进行选择?
日志框架基本都分为两个部分:一部分是抽象层,另一部分就是实现层
抽象层日志框架
什么是抽象层日志框架
抽象层日志框架就可以和Java中的抽象类结合起来,它就是规定了一套日志的规范,抽取出来的一个模型,接下来的实现就交给了实现层日志框架。
下边是市面上几个用的比较多的抽象层日志框架
- JCL(Jakarta Commons Logging) :这个学过Spring就很熟悉了,因为这是Spring默认采取的底层日志框架
- SLF4j(Simple Logging Facade for Java):这个现在也应该熟悉熟悉了,因为它是SpringBoot默认的日志框架。
- jboss-logging:学过Hibernate也就知道这个日志框架。
说了这些就仅仅是为了更好的理解日志框架的结构,以便于在后期更好的使用日志框架。
实现层日志框架
什么是实现层日志框架?实现层日志框架有那些?
实现层日志框架正如其名,是对抽象层的实现,因此我们在整合后可以调用抽象层方法来使用这个日志框架。
主流的实现层日志框架
- Log4j
- JUL
- Log4j2
- Logback
相信这几个都用的不少吧,但是它们之间又有什么样的关系呢?
SLF4j和Log4j,LogBack作者是相同的,Log4j早已不进行维护了,因为作者重新写了LogBack就相当于是它的升级版,这无疑是性能上的碾压(同一个作者写出两个相同类型的框架,后写的那个肯定是对前边的升级)。JUL是在java.util.logging下的一个日志工具,说实话我没用过。Log4j2是Apache出品的一个日志框架,也是十分强大的!
在SpringBoot中使用的日志框架组合是SLF4j+LogBack组合。
在SpringBoot中使用日志框架
前面简单的了解了一下日志框架的结构,下边就来说说怎么使用SpringBoot中的日志框架。
SpringBoot默认的日志配置
1> 我们要在SpringBoot中使用日志框架,那就需要进行导包。但是由于在SpringBoot的starter包中已经
导入过SLF4j和LogBack因此就不用再重复导入。
2> 使用方法:就在LoggerFactory中获得Logger就ok了
@Test
public void contextLoads() {
Logger logger = LoggerFactory.getLogger(this.getClass());
logger.trace("track");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
但是看到结果只输出的是如下信息
2019-04-20 11:00:41.514 INFO 5476 --- [ main] com.wrial.boot.BootApplicationTests : info
2019-04-20 11:00:41.514 WARN 5476 --- [ main] com.wrial.boot.BootApplicationTests : warn
2019-04-20 11:00:41.514 ERROR 5476 --- [ main] com.wrial.boot.BootApplicationTests : error
这是因为在SpringBoot默认的日志级别是info级别,需要在配置文件中调整默认的级别logging.level.com.wrial= trace
然后再看看输出信息
2019-04-20 11:04:33.791 TRACE 10308 --- [ main] com.wrial.boot.BootApplicationTests : track
2019-04-20 11:04:33.791 DEBUG 10308 --- [ main] com.wrial.boot.BootApplicationTests : debug
2019-04-20 11:04:33.791 INFO 10308 --- [ main] com.wrial.boot.BootApplicationTests : info
2019-04-20 11:04:33.791 WARN 10308 --- [ main] com.wrial.boot.BootApplicationTests : warn
2019-04-20 11:04:33.792 ERROR 10308 --- [ main] com.wrial.boot.BootApplicationTests : error
我感觉这个输出的日志信息太繁琐了,能不能进行更改日志信息的模板呢?当然是可以的
比如我对默认的控制台输出格式进行修改
日志输出格式:
#%d表示日期时间,
#%thread表示线程名,
#%-5level:级别从左显示5个字符宽度
#%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
#%msg:日志消息,
#%n是换行符
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
然后启动测试,可以看到都是这个格式
2019-04-20 [main] INFO com.wrial.boot.BootApplicationTests - Started BootApplicationTests in 3.654 seconds (JVM running for 4.732)
2019-04-20 [main] TRACE com.wrial.boot.BootApplicationTests - track
2019-04-20 [main] DEBUG com.wrial.boot.BootApplicationTests - debug
2019-04-20 [main] INFO com.wrial.boot.BootApplicationTests - info
2019-04-20 [main] WARN com.wrial.boot.BootApplicationTests - warn
2019-04-20 [main] ERROR com.wrial.boot.BootApplicationTests - error
也可以把这些信息输出到指定的文件中去:
# 不指定路径在当前项目下生成springboot.log日志
# 可以指定完整的路径;
logging.file=D:/springboot.log
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
然后在d盘下的文件中就可以找到springboot的文本打开就是记录的我们的日志信息。也是我们指定的格式。
9-04-20 === [main] === INFO === com.wrial.boot.BootApplicationTests ==== Starting BootApplicationTests on U9NW5SBIMC8ZATG with PID 13548 (started by Administrator in C:\Users\Administrator\Desktop\boot)
2019-04-20 === [main] === DEBUG === com.wrial.boot.BootApplicationTests ==== Running with Spring Boot v2.1.4.RELEASE, Spring v5.1.6.RELEASE
2019-04-20 === [main] === INFO === com.wrial.boot.BootApplicationTests ==== The following profiles are active: dev
2019-04-20 === [main] === INFO === o.s.scheduling.concurrent.ThreadPoolTaskExecutor ==== Initializing ExecutorService 'applicationTaskExecutor'
2019-04-20 === [main] === INFO === com.wrial.boot.BootApplicationTests ==== Started BootApplicationTests in 3.52 seconds (JVM running for 4.732)
2019-04-20 === [main] === TRACE === com.wrial.boot.BootApplicationTests ==== track
2019-04-20 === [main] === DEBUG === com.wrial.boot.BootApplicationTests ==== debug
2019-04-20 === [main] === INFO === com.wrial.boot.BootApplicationTests ==== info
2019-04-20 === [main] === WARN === com.wrial.boot.BootApplicationTests ==== warn
2019-04-20 === [main] === ERROR === com.wrial.boot.BootApplicationTests ==== error
2019-04-20 === [Thread-2] === INFO === o.s.scheduling.concurrent.ThreadPoolTaskExecutor ==== Shutting down ExecutorService 'applicationTaskExecutor'
控制台的输出格式和在文本中的输出互不影响,如果日志文件比较多的话建议使用输出到文本(因为调试框有最大的容量限制而文本没有),如果比较少的话可以在调试框中查看。
切换默认的日志框架
如果我们不想用自带的默认框架,也可以进行框架切换,当然我认为这是没必要的,因为SPringBoot都对这个框架有了极大的认可,那它肯定有它出色的一面。
如果我们要使用SLF4j和Log4j的组合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--在starter中去掉logback适配器,因为在springboot中默认导入了,不然会造成依赖冲突问题-->
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--然后再导入自己特定的框架,注意上边的框架适配器每个都不一样-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
如果想要切换框架的话,都是这个流程,先排除依赖冲突,然后导入自己想要的日志框架
在下边可以看看各个日志框架对应的适配器

采用自己的日志配置
我们也可以将自己对日志的配置放在一个日志配置文件中,这样就可以使用自己的配置了(前提是要满足指定的要求),下边是官方文档给出的自定义条件,必须是满足命名规则

只需要新建这样类型的xml文件或者properties文件,spring boot就可以自动加载,关于这个官方文档有很详细的步骤而且有配置的模板因此这个就不多说了。
本文详细介绍了如何在SpringBoot中使用日志框架,包括日志框架的选择、配置及自定义输出格式,帮助读者更好地理解和应用日志框架。
1609

被折叠的 条评论
为什么被折叠?



