日志框架的选择
目前市面上的日志框架:
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.xml
或logback-spring.groovy
或logback.xml
或logback.groovy
- Log4j2:
log4j2-spring.xml
或log4j2.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>
来源:CSDN
作者:forgiveyourself
链接:https://blog.csdn.net/Piconjo/article/details/104899746