SpringBoot专题学习Part11:SpringBoot中日志文件的配置及使用

雨燕双飞 提交于 2020-03-17 02:34:07

日志框架的选择

目前市面上的日志框架:
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
其中 使用日志分为日志的抽象层和日志的实现

日志的抽象层:

JCL(Jakarta  Commons Logging)(更新极慢 最后一次2014年更新)
SLF4j(Simple  Logging Facade for Java)★
jboss-logging(用的场景很少)

日志的实现:

Log4j(出的较早 没有Logback那么先进)
JUL(java.util.logging)(Java工具包自带)
Log4j2(适配性不太高)
Logback(更加先进★)

使用的时候 选择一个日志抽象层和日志的实现来使用

Spring底层是Spring框架
Spring框架的底层默认使用JCL
SpringBoot选用的是SLF4j和logback


使用方法

调用日志记录方法时 不应直接调用日志实现类 而是调用日志抽象层中的方法

首先须导入slf4j的jar和logback的实现类jar
使用案例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}
	

在这里插入图片描述
每一个日志的实现框架都有自己的配置文件
在使用slf4j以后 配置文件还是需要使用日志实现框架自己本身的配置文件
谁是日志实现框架 就用谁的配置文件


统一日志框架

部分框架的底层使用的日志框架并不是slf4j和logback 造成项目中日志框架繁多 不统一的问题
统一日志记录 这样 即使是别的框架 也一起统一使用slf4j进行输出

  • 1、将系统中其它的日志框架先排除出去
  • 2、用【中间包】来【替换】原有的日志框架
  • 3、导入slf4j其他的实现

在这里插入图片描述


日志排除

SpringBoot内部使用spring-boot-starter-logging这个启动类来执行日志功能
在这里插入图片描述
SpringBoot底层使用slf4j和logback进行日志记录
SpringBoot也用替换包其它的日志都替换为了slf4j

因而
SpringBoot已经做好了日志转换的功能
因而 若要引入其它框架 只须将该框架的默认了日志依赖移除即可
无须其它任何多余的配置
必须要移除 否则会出现jar包冲突问题

用法:
<exclusion>标签来排除
在这里插入图片描述


日志的默认配置

导入org.slf4j.LoggerFactory

// 用记录器工厂来获取记录器 参数传入本类的class
Logger logger = LoggerFactory.getLogger(getClass());

// 日志级别:由低到高
// trace < debug < info < warn < error
// 可很方便地调整输出的日志级别 日志只会在指定级别及更高级别中生效
// SpringBoot默认使用info级别的日志 未指定的就用SpringBoot默认规定的root级别
logger.trace("trace");// 跟踪轨迹
logger.debug("debug");// 调试信息
logger.info("info");// 自定义的信息
logger.warn("warn");// 警告信息
logger.error("error");// 异常信息

在配置文件中修改日志输出级别:

语法:logging.level.包路径=级别

例:logging.level.net.zjitc.springboot=trace

在配置文件中指定日志文件

若不指定路径 只填写文件名 则默认在当前项目根目录下生成
语法:logging.file=文件名

例:logging.file=springboot.log

在配置文件中指定日志文件保存位置 默认文件名为spring.log

语法:logging.path=路径

例:logging.path=/spring/log
意为在当前磁盘的根目录下创建spring文件夹和里面的log文件夹
并使用默认的spring.log文件作为存放的默认文件

指定日志输出格式

在控制台输出日志的格式

logging.pattern.console=格式

指定文件中日志输出的格式

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

例:

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

指定配置文件

给类路径下放上每个日志框架自己的配置文件即可
放置之后 SpringBoot就不用默认的了
放置规则:

  • Logback:logback-spring.xmllogback-spring.groovylogback.xmllogback.groovy
  • Log4j2:log4j2-spring.xmllog4j2.xml
  • JDK(Java Util Logging) :logging.properties

Profile:

若文件名形如logback.xml 则直接被识别 绕过SpringBoot
若形如logback-spring.xml 则不会被识别 而是可由SpringBoot加载
这样的话 就可以在不同的环境使用不同的配置

例:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <springProfile name="dev">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </springProfile>
        <springProfile name="!dev">
            <pattern>%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </springProfile>
    </layout>
</appender>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!