选择哪一种日志框架

市面上日志门面有:

JCL(Jakart Commons Logging)SLF4J(Simple Logging Facade For Java)jboss-logging

日志实现有:

Log4JJUL(java.util.logging)Log4j2Logback

日志门面就是抽象接口,日志实现,就是具体的日志实现;

在日志接口中,jboss-logging 首先排除,它生来就不给我们普通程序员用的;接着排除掉 JCL,虽然它很好,也是 Apache 下面的项目,但是上一次更新还是 2014 年,辉煌也只属于过去了;

最后剩下了 SLF4J ,虽然它名字叫简陋的日志门面,但是这仅仅是作者的谦虚,这个日志门面一点都不简陋;

选好了日志门面,再选日志实现,首先排除 JUL ,它只是 Log4j 初出江湖,然后名震江湖之际,java 怕丢失日志市场,就推出了 JUL

然后再说下 Log4JLogback 其实它们是同一个作者写的,包括我们之前选的日志门面 SLF4J 也是出自同一人之手,大神的世界不是很懂;

然后 Log4j 是初级版本,大神后来加入了重大更新,有了 Logback ,因此 Logback 才是与 SLF4J 最切合的,毕竟出自同门;

为什么不选 Log4J2 ,它也是对 Log4J 的升级版,同样系出名门,来自 Apache小组,但是升级的太好了,以至于目前,还没有配得上它的日志门面。。。扎心了

Spring Boot 底层是 Spring 框架,Spring 框架默认使用的是 JCL,因此,之前使用 Spring 的时候,总是需要导入 Commons-Logging 日志框架 ;

Spring Boot 明智的选择了和我们分析的一样的 SLF4J + Logback 组合 ;


日志的使用

开发的时候,应该调用日志门面的方法,而不应该调用日志具体实现的方法,面向接口编程;

但是每一个日志实现框架都有自己的配置文件,在使用 SLF4J 的时候,日志配置文件还是使用具体日志实现框架的配置文件 ;

  1. 使用 SLF4J + Logback

    它们是天生就切合的;但是如果你日志实现不是使用 Logback呢,而是使用其他日志实现,那么 SLF4J 官方也提供了对应的 jar 包,进行适配;

    适配的原理就是,提供了一个适配层,比如你调用 SLF4J 的某个方法,然后通过适配层翻译为对应日志实现框架的方法;

  2. 历史遗留问题

    我们在项目开发的时候,使用许多第三方框架,SpringHibernate 等等,它们各自都有自己依赖的日志框架;

    我们如何最后统一使用 SLF4J + LogbackSLF4J 官方同样也提供了对应的 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 日子 ...");
  1. logging.level

    如果我们想更改默认的日志级别,可以在配置文件里面进行设置:

    logging:
    level:
    cn:
    hyc: trace

    其中 logging.level 用于控制日志级别,可以直接在后面写级别,如果想控制的细致点,可以在后面写上具体的包 ;

  2. logging.file + logging.path

    指定日志文件名字和日志文件保持路径;

    如果都没有指定,则只在控制台打印;

    但是这两个又是冲突的指令,当二者都存在的时候,只有 logging.file 起作用 ;

    使用 logging.file ,如果只指定了文件名,则在当前项目目录下,生成日志文件;当然也是可以指定具体路径的,比如下面的,就会在 D 盘下面生成日志文件:

    logging:
    file: D:my.log

    一般只是使用 logging.path ,仅仅制定路径,日志文件的名字使用 Spring Boot 默认的 名字 Spring.log

    logging:
    path: /spring/log

    这里 / 代表项目所在盘符的根目录 ;

  3. logging.pattern.console

    指定在控制台输出的日志的格式

  4. logging.pattern.file

    指定文件中日志的格式;

  5. 指定配置文件

    首先 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日志的更多相关文章

  1. Springboot 系列(四)Spring Boot 日志框架

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 Spring 框架选择使用了 JCL 作为默 ...

  2. Spring Boot日志集成实战

    Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...

  3. Spring Boot 日志配置

    Spring Boot 日志配置 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很 ...

  4. Spring Boot 日志记录 SLF4J

    Spring Boot 日志记录 SLF4J 2016年01月12日 09:25:28 阅读数:54086 在开发中打印内容,使用 System.out.println() 和 Log4j 应当是人人 ...

  5. Spring Boot日志集成

    Spring Boot日志框架 Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用 ...

  6. 让你的spring-boot应用日志随心所欲--spring boot日志深入分析

    1.spring boot日志概述 spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配 ...

  7. 54. spring boot日志升级篇—logback【从零开始学Spring Boot】

    在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...

  8. 52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】

    在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需 ...

  9. 50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】

    如果你使用的是spring boot 1.4.0版本的话,那么你可能需要配合以下文章进行学习 90.Spring Boot 1.4 使用log4j错误[从零开始学Spring Boot] Log4j是 ...

  10. Spring Boot日志使用

    前言: 这是我第一次仔细研究Spring Boot相关的知识,就拿日志下手了,欢迎大家指点 Spring Boot日志关系 这个是Spring Boot的启动器,我们点击spring-boot-sta ...

随机推荐

  1. LeetCode之打家劫舍

    1. 问题 在一条直线上,有n个房屋,每个房屋中有数量不等的财宝,有一个盗 贼希望从房屋中盗取财宝,由于房屋中有报警器,如果同时从相邻的两个房屋中盗取财宝就会触发报警器.问在不触发报警器的前提下,最多 ...

  2. LAMP企业架构读写分离

    1.1  LAMP企业架构读写分离 LAMP+Discuz+Redis缓解了MYSQL的部分压力,但是如果访问量非常大,Redis缓存中第一次没有缓存数据,会导致MYSQL数据库压力增大,此时可以基于 ...

  3. Nginx介绍和使用

    Nginx介绍和使用 一.介绍 Nginx是一个十分轻量级并且高性能HTTP和反向代理服务器,同样也是一个IMAP/POP3/SMTP代理服务器. 二.特性 HTTP服务器 反向代理服务器 简单的负载 ...

  4. 记Oracle中regexp_substr的一次调优(速度提高95.5%)

    项目中需要做一个船舶代理费的功能,针对代理的船进行收费,那么该功能的第一步便是选择进行代理费用信息的录入,在进行船舶选择的时候,发现加载相关船舶信息十分的慢,其主要在sql语句的执行,因为测试的时候数 ...

  5. 数据库中的blob是什么类型?

    数据库中的blob是什么类型? BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器. 在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类 ...

  6. Springmvc request response log

    Log Incoming Requests In Spring | Java Development Journalhttps://www.javadevjournal.com/spring/log- ...

  7. openpyxl代码案例

    import datetimefrom random import choicefrom time import timefrom openpyxl import load_workbookfrom ...

  8. Web.Config中配置字符串含引号的处理

    配置文件中往往要用到一些特殊的字符, Web.Config默认编码格式为UTF-8,对于XML文件,要用到实体转义码来替换.对应关系如下: 字符 转义码 & 符号 & & 单引 ...

  9. 零基础学Python-第二章 :Python基础语法-04.Python程序的书写规则

    #号后面的都是注释 import是导入一个模块 结束

  10. Spring cloud微服务安全实战-3-7API安全机制之数据加密

    这一节来聊一下密码的加密. 加密盐,为了避免两个相同的面加密出来的密文是一样的,每个人的盐不一样, 首先引入工具包,lambdaworks <!-- https://mvnrepository. ...