日志系统分为两部分,一部分是日志抽象层,一部分是日志实现层。常见的日志抽象层JCL,SLF4J,JBoss-Logging,日志实现层有logback,log4j,log4j2,JUL。日志抽象层的功能是提供一个统一的调用入口,而真正得日志实现功能有日志实现层来做。如果需要使用日志功能,则需要选取一个日志抽象层和一个日志实现层。

slf4j 是一个日志抽象层框架,他需要和其他日志实现框架配合才能实现日志功能,如下图所示,如果单独使用slf4j则会输出空,slf4j和logback配合使用的话,还需导入logback相关的jar包,如果和其他的日志实现框架配合使用的话,不仅需要导入日志实现框架还需要导入一个转换层,如log4j 的slf4-log4j12.jar。不管使用哪种日志实现框架,日志的配置文件还是需要使用日志实现框架的配置文件,这个文件是被日志框架直接读取的。

1.SLF4J的使用

2.如何统一使用slf4j 记录日志

由于系统导入很多依赖,每个依赖可能已经在依赖其他的的日志框架(如spring 依赖 Commons logging),如何让他们统一使用slf4j记录日志呢?sjf4j 的官方文档 中https://www.slf4j.org/legacy.html 有介绍

如上图,具体做法是:

(1)将框架已经依赖的其他日志框架先排除掉

(2)导入中间的适配层jar包(jul-to-slf4j.jar等等)

(3)再导入需要的日志实现jar包。

3.spring boot 的日志实现

Spring boot 底层的日志实现是通过slf4j + logback实现的。下图是spring boot 的依赖关系,spring-boot-starter-logging是spring boot 的日志启动器。它又分别依赖了logback-classic 和 log4j-to-slf4j,jul-to-slf4j ,这两个jar包的作用就是上面讲的,讲其他的日志框架转换成slf4j,作为一个中间适配层来使用的。

spring boot 会为我们自动适配成slf4j + logback 的日志记录框架,如果需要引入其他额外的jar包,怎么能让新引入的jar也使用上slf4j+logback 来记录日志呢?

只需要做一件就够了:如果新引入的jar包中含有其他日志框架,我们只要将这个日志框架从jar包中排除即可。spring boot 已经导入相应的适配层的包,会自动顶替被排除包的功能。例如 spring 排除commons-logging 包

    <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

4.spring boot 的日志使用

spring boot 已经默认配置好了日志

Logger logger = LoggerFactory.getLogger(xxx.class);

获取日志记录器,使用loger.info 、logger.debug 等方法记录日志,如果需要调整默认的日志配置,则在全局配置文件中修改配置即可,spring boot 默认的root级别为info 级别,输出info及以上级别的日志信息。同时也可以日志的输出格式。

        %d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符

logging.file 和 logging.path 如果都不指定,则只会在控制台输出,不会在文件输出。

logging.file 可以指定生成日志文件的名称或者日志文件的名称及位置,如果不指定位置只指定了名称,在会在当前的项目路径下生成日志文件。

logging.path 指定日志文件的位置,默认使用spring.log 作为日志文件的名称。

# 在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

#指定日志文件大小,超过指定的值,则新建一个,默认10M

logging.file.max-size=20M

#要保存的存档日志文件的最大数量

logging.file.max-history=10

5.使用自定义的配置文件

官方文档的26.5章节开始介绍了使用自定义配置文件的办法。使用方法是在类路径上放日志框架的配置文件即可

官方推荐使用带-spring 的配置文件,带-sping 后缀的和不带后缀的区别是:带后缀的后被spring 识别,可以使用一些spring 的高级特性,不带后缀的只会被日志框架实现。

官方文档的26.6.1 和26.6.2介绍了两种告诫特性,分别是profile 和 Environment ,规定了再特殊条件下才可生效。

6.更改spring boot 默认的日志框架

如果不想使用spring boot 默认的日志框架,想切换成其他的日志实现框架。

1.从spring-boot-starter 中排除logback 的jar包

2.引入其他日志实现框架的jar包

切换成slf4j+log4j的方式:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<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>

切换成slf4j+log4j2 的方式:

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

spring boot-7.日志系统的更多相关文章

  1. Spring Boot系列——日志配置

    日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节.但是,这丝毫不影响它在任何一个系统中的重要的地位. 为了保证服务的高可用,发现问题一定要即使,解决问题一定要迅速,所以生 ...

  2. Spring Boot 之日志记录

    Spring Boot 之日志记录 Spring Boot 支持集成 Java 世界主流的日志库. 如果对于 Java 日志库不熟悉,可以参考:细说 Java 主流日志工具库 关键词: log4j, ...

  3. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  4. Spring Boot默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  5. Spring Boot与日志

    目录 1.日志框架 2.市面上的日志框架 2.1 下表行间无任何对应关系 2.2 日志门面:slf4j 2.3 日志实现:logback 2.4 Spring Boot怎么做的呢? 3.slf4j的使 ...

  6. Spring Boot 自定义日志详解

    本节内容基于 Spring Boot 2.0. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 2 种方式 Spring ...

  7. Spring Boot Log4j2 日志学习

    简介 Java 中比较常用的日志工具类,有: Log4j. SLF4j. Commons-logging(简称jcl). Logback. Log4j2(Log4j 升级版). Jdk Logging ...

  8. [日志] spring boot + logback 日志输出配置

    一.输出日志到控制台 springboot有很多starter(参考starter)方便快速构建项目依赖组件,logback是springboot默认的日志组件,启动即可看到打印在控制台输出的info ...

  9. Spring Boot Log 日志使用教程

    我们编写任何 Spring Boot 程序,可能绕不开的就是 log 日志框架(组件). 在大多数程序员眼中日志是用来定位问题的.这很重要. 本项目源码下载 注意本项目提供的源码已在后期重新编写,有部 ...

  10. Spring Boot的日志配置

    一.配置logback日志 Spring Boot默认使用logback打印日志 需要增加依赖 <groupId>org.springframework.boot</groupId& ...

随机推荐

  1. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置

    VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...

  2. @transient 注解 和 transient变量的作用

    @transient 和 transient是两码事 1.@transient的作用 @transient是hibernate和Morphia中的注解,hibernate都熟悉,Morphia是通过同 ...

  3. linux 系统的 cache 过大,解决方案

    linux buff/cache过大,清理脚本 2018年06月20日 13:44:53 taozhe666 阅读数:6500   三条指令: sync echo 1 > /proc/sys/v ...

  4. 一起学vue指令之v-once

    一起学vue指令之v-once 一起学 vue指令 v-once  指令可看作标签属性 v-once 口该指令后面不需要跟任何表达式(v-for后面接表达式) 口该指令表示元素和组件只渲染一次,不会随 ...

  5. .Net 无法打开Offie Open XML文件(上传和下载使用)

    代码: 首先,贴一个上传 public static string UploadFileIntoDir(FileUpload MyFile, string DirName) { if (IfOkFil ...

  6. 浏览器端-W3School-HTML:HTML DOM Object 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Object 对象 1.返回顶部 1. HTML DOM Object 对象 Object 对象 Object 对象代表 HTM ...

  7. CSS二级菜单

    0.需求:当鼠标hover到按钮上时,出现下拉菜单导航条. 1.问题拆解: (1)HTML应该如何组织比较方便合理 因为题中要求下拉菜单位于按钮的正下方,可以使用列表<li>中嵌套无序列表 ...

  8. LoadRunner遇到的问题

    1. :

  9. 十一:jinja2模板传参

    从后台传参到模板,模板再渲染到前端 传参的时候,可以在html后面加上关键字传参,在模板里面用{{ 参数 }}使用即可,可以传多个参数 也可以使用**传参,取值的时候就直接取内容

  10. Chrome OS支持在窗口中运行Linux了!!!

    借助Crouton Chrome扩展,Chrome OS可以在窗口中运行Linux了.在使用该扩展之前,你需要先将自己的Chromebook设置成开发者模式(Develeper Mode). 此前,C ...