(3)Spring Boot日志
选择哪一种日志框架
市面上日志门面有:
JCL(Jakart Commons Logging)
、SLF4J(Simple Logging Facade For Java)
、jboss-logging
日志实现有:
Log4J
、JUL(java.util.logging)
、Log4j2
、Logback
日志门面就是抽象接口,日志实现,就是具体的日志实现;
在日志接口中,jboss-logging
首先排除,它生来就不给我们普通程序员用的;接着排除掉 JCL
,虽然它很好,也是 Apache
下面的项目,但是上一次更新还是 2014
年,辉煌也只属于过去了;
最后剩下了 SLF4J
,虽然它名字叫简陋的日志门面,但是这仅仅是作者的谦虚,这个日志门面一点都不简陋;
选好了日志门面,再选日志实现,首先排除 JUL
,它只是 Log4j
初出江湖,然后名震江湖之际,java
怕丢失日志市场,就推出了 JUL
;
然后再说下 Log4J
、Logback
其实它们是同一个作者写的,包括我们之前选的日志门面 SLF4J
也是出自同一人之手,大神的世界不是很懂;
然后 Log4j
是初级版本,大神后来加入了重大更新,有了 Logback
,因此 Logback
才是与 SLF4J
最切合的,毕竟出自同门;
为什么不选 Log4J2
,它也是对 Log4J
的升级版,同样系出名门,来自 Apache
小组,但是升级的太好了,以至于目前,还没有配得上它的日志门面。。。扎心了
Spring Boot
底层是 Spring
框架,Spring
框架默认使用的是 JCL
,因此,之前使用 Spring
的时候,总是需要导入 Commons-Logging
日志框架 ;
Spring Boot
明智的选择了和我们分析的一样的 SLF4J
+ Logback
组合 ;
日志的使用
开发的时候,应该调用日志门面的方法,而不应该调用日志具体实现的方法,面向接口编程;
但是每一个日志实现框架都有自己的配置文件,在使用 SLF4J
的时候,日志配置文件还是使用具体日志实现框架的配置文件 ;
使用
SLF4J + Logback
它们是天生就切合的;但是如果你日志实现不是使用
Logback
呢,而是使用其他日志实现,那么SLF4J
官方也提供了对应的jar
包,进行适配;适配的原理就是,提供了一个适配层,比如你调用
SLF4J
的某个方法,然后通过适配层翻译为对应日志实现框架的方法;历史遗留问题
我们在项目开发的时候,使用许多第三方框架,
Spring
、Hibernate
等等,它们各自都有自己依赖的日志框架;我们如何最后统一使用
SLF4J + Logback
,SLF4J
官方同样也提供了对应的jar
包,具体的原理是这样的:比如Spring
依赖Commons-logging
那么,首先先去掉Commons-logging
,去掉以后,Spring
启动就会保错,因为找不到需要的日志类,这时候将官方提供的替换包,添加进去,这个替换包起到偷梁换柱的作用,Commons-logging
包里面有的类,替换包都有,这样Spring
启动的时候,就能找到对应的类了,但是这些类里面,都被动了手脚,里面都是去调用Logback
的方法了;这样做以后,就能统一使用
SLF4J + Logback
;
Spring Boot 日志使用
使用其他框架的时候,需要移除框架本身依赖的日志框架;
至于 Spring
框架,Spring Boot
已经默认移除了 Commons-logging
;
如果是使用 SLF4J + Logback
则不需要导入任何包,Spring Boot
默认已经集成了 ;
// 记录器(导包不要导错了,导 slf4j)
Logger logger = LoggerFactory.getLogger(this.getClass());
// 打印的日志,只会打印设定的级别及其之后的级别日志
logger.trace("这是 trace 日志 ...");
logger.debug("这是 debug 日志 ...");
// Spring Boot 默认给我们使用的级别是 info ,
logger.info("这是 info 日志 ...");
logger.warn("这是 warn 日志 ...");
logger.error("这是 error 日子 ...");
logging.level
如果我们想更改默认的日志级别,可以在配置文件里面进行设置:
logging:
level:
cn:
hyc: trace
其中
logging.level
用于控制日志级别,可以直接在后面写级别,如果想控制的细致点,可以在后面写上具体的包 ;logging.file + logging.path
指定日志文件名字和日志文件保持路径;
如果都没有指定,则只在控制台打印;
但是这两个又是冲突的指令,当二者都存在的时候,只有
logging.file
起作用 ;使用
logging.file
,如果只指定了文件名,则在当前项目目录下,生成日志文件;当然也是可以指定具体路径的,比如下面的,就会在D
盘下面生成日志文件:logging:
file: D:my.log
一般只是使用
logging.path
,仅仅制定路径,日志文件的名字使用Spring Boot
默认的 名字Spring.log
;logging:
path: /spring/log
这里
/
代表项目所在盘符的根目录 ;logging.pattern.console
指定在控制台输出的日志的格式
logging.pattern.file
指定文件中日志的格式;
指定配置文件
首先
Spring Boot
有自己默认的日志配置,如果我们不想用,想用自己的配置,则
根据自己选择的日志实现框架,来命名自己的日志配置文件:
比如,博主选择的是
Logback
日志实现,则日志配置文件的名字,可以是logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
中的任何一个;把日志配置文件放在类路径下面,即可被
Spring Boot
自动加载 ;但是官方建议我们使用
logback-spring.xml
这样带后缀名的,而非直接使用logback.xml
,因为logback.xml
可以被日志框架直接识别,直接就加载了,Spring Boot
在此过程插不上手;如果使用
logback-spring.xml
这样的名字,日志框架就不认识,不会直接加载,而是由Spring Boot
去解析日志配置,这样就可以使用高级Profile
功能,比如:在配置文件的某项配置上,写<springProfile name = "dev>
这样,只有在特定环境下(dev
开发环境),该项配置才会生效;
(3)Spring Boot日志的更多相关文章
- Springboot 系列(四)Spring Boot 日志框架
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默 ...
- Spring Boot日志集成实战
Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...
- Spring Boot 日志配置
Spring Boot 日志配置 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很 ...
- Spring Boot 日志记录 SLF4J
Spring Boot 日志记录 SLF4J 2016年01月12日 09:25:28 阅读数:54086 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人 ...
- Spring Boot日志集成
Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...
- 让你的spring-boot应用日志随心所欲--spring boot日志深入分析
1.spring boot日志概述 spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配 ...
- 54. spring boot日志升级篇—logback【从零开始学Spring Boot】
在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...
- 52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需 ...
- 50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】
如果你使用的是spring boot 1.4.0版本的话,那么你可能需要配合以下文章进行学习 90.Spring Boot 1.4 使用log4j错误[从零开始学Spring Boot] Log4j是 ...
- Spring Boot日志使用
前言: 这是我第一次仔细研究Spring Boot相关的知识,就拿日志下手了,欢迎大家指点 Spring Boot日志关系 这个是Spring Boot的启动器,我们点击spring-boot-sta ...
随机推荐
- html转图片/html2canvas的使用/星座测试/类似于损友圈的活动
https://try.fishqc.com/Activity/constellation ---成品 电脑上录的gif 有借鉴的链接,很多,下面这个还不错~先别看,尊重下我先~~~~ https:/ ...
- Promethues实战-简易教程系列
1.监控概述 2.Promethues基础 3.Promethues初体验
- 基于Redis的分布式锁到底安全吗(下)?
2017-02-24 自从我写完这个话题的上半部分之后,就感觉头脑中出现了许多细小的声音,久久挥之不去.它们就像是在为了一些鸡毛蒜皮的小事而相互争吵个不停.的确,有关分布式的话题就是这样,琐碎异常,而 ...
- 2018-2019-2 《网络对抗技术》Exp7 网络欺诈防范 20165326
网络欺诈防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 简单应用SET工具建立冒名网站 ettercap DNS spoof 结合应用两种技术, ...
- sqlite3 查看Cookie文件<转>
原帖地址:https://blog.csdn.net/yygydjkthh/article/details/37604309 .使用命令对此数据库进行打开: $ sqlite3 cookies.sql ...
- Redux遵循的三个原则是什么?
(1)单一事实来源: 整个应用的状态存储在单个 store 中的对象/状态树里.单一状态树可以更容易地跟踪随时间的变化,并调试或检查应用程序. (2)状态是只读的: 改变状态的唯一方法是去触发一个动作 ...
- JVM常量的含义与反编译助记符详解
1.定义一个常量 public class MyTest2 { public static void main(String[] args) { System.out.println(MyParent ...
- https://github.com/python/cpython/blob/master/Doc/library/contextlib.rst 被同一个线程多次获取的同步基元组件
# -*- coding: utf-8 -*- import time from threading import Lock, RLock from datetime import datetime ...
- eclipse连接夜神模拟器方法
用eclipse 进行安卓开发的时候我们会遇到安卓自带的模拟器启动时间过长,反应慢等的问题,这个时候我们就希望使用别的安卓模拟器,而我自己喜欢使用夜神模拟器.1.首先我们启动eclipse 和夜神模拟 ...
- git 删除远程和本地分支
RenGuoQiang@PC-RENGUOQIANG MINGW64 /d/zgg/zgg-crm (dev-rgq-userworkstatus) $ git push origin --delet ...