【SpringBoot专题】Java平台下日志的那些事前言日志框架漫谈看SpringBoot如何对日志进行统一处理SpringBoot日志使用结束语

前言

《【SpringBoot专题】快速体验》

《【SpringBoot专题】多环境配置及swagger》

本篇是【SpringBoot专题】系列的第三篇,将介绍SpringBoot对日志的支持,讲解Java平台下日志的那些事,彻底揭开日志框架在使用过程中的那些坑~

日志框架漫谈

Java平台下存在很多日志框架,比如JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback,SLF4j,jboss-logging等。 java平台下日志框架的发展,经历了具体的日志实现,后来发展为日志门面+日志实现。

java日志

当我们在开发的时候,应该使用日志门面提供的api,而不是直接使用具体的日志实现。 打个比方,如果我们使用slf4j+log4j这套组合,那么配置提供log4j的配置(比如log4j.xml),使用slf4j提供的日志api即可;也就是说,每个日志实现框架都有自己的日志配置文件,即便使用日志门面后,依然要提供各自的配置文件。(也就是日志门面只是实现了api的适配,而没有进行日志配置的统一规范) 当前最流行的日志门面是slf4j了,我们就以这个为例来具体分析下,主要进行2点分析: 第一:slf4j是如何对各个日志实现进行适配? 第二:如何在项目中进行日志的统一使用?

slf4j+logback

slf4j+log4j

上面2个图分别是:slf4j+logback和slf4j+log4j这2套日志组合的方式图解说明。 首先,我们来说第一个问题,sl4j如何和其他日志实现框架适配的问题。 很简单,我们只需要看图中的左侧部分,提供相应的jar即可(有的除了具体的日志实现外,还需要提供额外的适配jar包)。 其次,我们要注意一个问题,由于在项目开发中,不可避免需要引入其他依赖,比如Spring默认使用的是commons-logging(即JCL),而Hibernate默认使用的是jboss-logging,那么问题就来了,我们如何统一日志记录的方式? 上图中的右侧部分就揭示了方法,打个比方,如果我们依赖Spring,虽然Spring默认使用的是JCL,要想在项目中统一使用slf4j+logback的话,很简单,我们先排除掉 JCL的依赖,然后再引入jcl-over-slf4j.jar的依赖即可。(其实就是在偷梁换柱,jcl-over-slf4j.jar和JCL在包名/类名/方法名上完全一致,只不过jcl-over-slf4j在内部调用的是slf4j的api而已,这样既可以避免Spring报错,又可以将Spring日志记录方式加以改变!)

看SpringBoot如何对日志进行统一处理

SpringBoot能自动适配所有的日志,而且底层使用的是slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可。 SpringBoot很聪明,它已经把一些日志适配依赖都引入进来了,下面我们具体分析。

springboot日志依赖

我想通过上图的日志依赖关系,你就会明白springboot的良苦用心了!

上文说过Spring默认的日志依赖是JCL,而SpringBoot肯定是依赖Spring的,根据上文理论,自然是需要排除掉JCL的依赖的,我们来看下面的:

springboot依赖spring

spring已经排除掉JCL依赖

SpringBoot日志使用

关于SpringBoot日志的使用上,主要指出下面几点: 第一:全局的一些常用配置,如格式/路径/级别 第二:使用@Slf4j来进行日志处理 第三:日志的profile功能 第四:切换日志框架

在application.properties中进行日志配置

指定日志配置文件路径 logging.config=classpath:logback.xml  采用logging.path的方式指定日志路径 指定日志级别,要么在application.properties中直接指定: logging.level.x.y.z=info 要么在logback.xml中配置。 关于日志的具体配置,这里不详细介绍,网上有很多资料大家可以参考。 日志的具体使用,相信大家很清楚,基本上就是先得到log对象: private  final Logger logger = LoggerFactory.getLogger(XXX.class); 不过为了简化,lombok给我们提供了注解进行日志输出。(需要idea有lombok的插件,还有需要lombok的依赖)

lombok支持

提供注解,直接使用log

下面我们再来简单谈一下日志的profile功能,要想支持profile功能也很简单,比如不要在叫logback.xml,而是logback-spring.xml,这样日志配置将由springboot来进行处理,就可以使用到profile功能。

logback-spring.xml

最后,我们再说一下,如果不想使用springboot默认支持的slf4j+logback的方式,而是slf4j+xxx呢? 很简单,根据上文理论,第一,排除依赖(logback);第二,加入依赖(log4j);第三,加入具体日志配置即可(log4j.xml)。

结束语

好了,到这里,我们就以SpringBoot为切入点,对整个Java平台的日志进行了一个分析,相信以后在开发过程中遇到日志的有关问题,能够心中有数~

create by zhangfengzhe

2018-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题

对于这个问题,我相信我的方法已经能帮90%的人解决了! 当你用Eclipse运行web项目的时候,你就会看到控制台出现: WARNING: [SetPrope...

26670
来自专栏高性能服务器开发

用Visual Studio调试linux程序

用Visual Studio调试linux程序?你真的没看错,这个是真的,不是标题党。当然如果你说VS2015及以上版本自带的linux调试插件,那就算了。这些...

66860
来自专栏网络

web调试工具——Fiddler使用介绍(二)

一、Fiddler断点设置 设置断点是Fiddler最强大的功能之一,在设置好断点后,Fiddler会捕捉所有经过的消息,我们可以任意修改HTTP请求信息,包括...

19790
来自专栏北京马哥教育

linux系统安装过程

linux系统安装过程 大家都知道目前在商业服务器操作系统端,linux操作系统占的比例非常大,但是如果自己要想自己在网络安全系统方面有所作为,必须得把linu...

37080
来自专栏晓晨的专栏

Jenkins 集群搭建

Jenkins是当下比较流行的一款功能强大的持续集成工具,它支持搭建集群,来提高多项目的构建速度,模式为主从模式,master会将任务分配到各个从节点进行并发构...

17810
来自专栏企鹅号快讯

htcap:一款实用的递归型Web漏洞扫描工具

今天给大家介绍的是一款名叫 htcap 的开源 Web 漏洞扫描工具,它通过拦截 AJAX 调用和页面 DOM 结构的变化并采用递归的形式来爬取单页面应用(SP...

31970
来自专栏黑泽君的专栏

古语云:工欲善其事必先利其器 --> Eclipse开发环境配置

淘淘商城系统使用java7开发,使用jdk1.7.0 _80版本开发,安装jdk1.7步骤如下图所示: 第一步:在oracle官网下载跟系统相匹配的jdk,如下...

11320
来自专栏Pythonista

超哥教你发布CRM

python web服务器开发使用WSGI协议(Web Server Gateway Interface)

14620
来自专栏后端云

OpenStack实践SR-IOV计算节点

SR-IOV 使一个单一的功能单元(比如,一个以太网端口)能看起来像多个独立的物理设备,即支持SR-IOV 功能的物理设备能被配置为多个功能单元。

27140
来自专栏晓晨的专栏

Jenkins 集群搭建

Jenkins是当下比较流行的一款功能强大的持续集成工具,它支持搭建集群,来提高多项目的构建速度,模式为主从模式,master会将任务分配到各个从节点进行并发构...

37150

扫码关注云+社区

领取腾讯云代金券