文章目录
SLF4J
参考:
https://www.cnblogs.com/shenStudy/p/15806951.html
基础概念
java
是什么?
SLF4J(Simple Logging Facade for Java),是一个为Java日志系统提供标准化接口的框架。它的主要目的是为各种日志框架提供统一的API,从而简化日志记录的实现和管理。
使用该日志框架,需要用到 logback.xml 或者 logback-spring.xml 。
其具体的实现是由log4j或者logback等实现。
日志门面?
SLF4J,为日志系统提供一套门面,通过面向接口规范来进行开发,避免了直接依赖具体的日志框架,可轻松切换不同的日志实现框架并且不需要改动代码。
使用
java
实现方式:
单一存在的日志框架,例如JUL、Log4j、Logback、Log4j2(其本身也提供日志门面接口);
现阶段主流使用slf4j+logback;
未来趋势使用slf4j+log4j2;
日志架构:
采用slf4j作为门面,log4j或者logback作为实现框架,中间使用桥接器完成桥接。
日志的输出级别:
error、warn、info(默认级别)、debug、trace,从左到右级别依次降低;
其中error、warn、info信息会在控制台输出,其余信息不会输出。
输出形式
java
带有占位符的日志输出:
Logger.info("用户:{},{}",name,age);
输出系统异常:
try {
int i = 1 / 0;
} catch (Exception e) {
logger.error("出现异常:",e);
}
日志绑定
各种框架的日志输出信息:
java
🍇 logback-classic框架:
11:12:32.471 [main] ERROR com.date1.slf4jjTest - error
11:12:32.487 [main] WARN com.date1.slf4jjTest - warn
11:12:32.487 [main] INFO com.date1.slf4jjTest - info
11:12:32.487 [main] DEBUG com.date1.slf4jjTest - debug
11:12:32.487 [main] INFO com.date1.slf4jjTest - 用户:xxx,26
🍇 log4j框架:
引入依赖:slf4j-log4j12 (适配器) 以及 log4j
日志信息展示:
2024-01-22 14:11:51,695 - 0 ERROR [main] com.date1.slf4jjTest:21 - error
2024-01-22 14:11:51,695 - 0 WARN [main] com.date1.slf4jjTest:22 - warn
2024-01-22 14:11:51,695 - 0 INFO [main] com.date1.slf4jjTest:23 - info
2024-01-22 14:11:51,695 - 0 INFO [main] com.date1.slf4jjTest:29 - 用户:xxx,26
运行测试方法,报错:
log4j:WARN No appenders could be found for logger (com.date1.slf4jjTest).
log4j:WARN Please initialize the log4j system properly.
未进行log4j.proterties文件的配置;
参考修改博客:
https://www.cnblogs.com/Durant0420/p/14979620.html
文件配置:
具体配置文件内容 复制https://www.cnblogs.com/Durant0420/p/14979620.html 博客内容;
🍇 slf4j-simple框架:
[main] ERROR com.date1.slf4jjTest - error
[main] WARN com.date1.slf4jjTest - warn
[main] INFO com.date1.slf4jjTest - info
[main] INFO com.date1.slf4jjTest - 用户:xxx,26
🍇 slf4j-nop框架,关闭日志功能;
进程已结束,退出代码为 0
控制台无任何输出。
🍇 jul日志实现:
使用该实现需要引入适配器slf4j-jdbc,且jul已经被内置;
日志信息展示:
一月 22, 2024 2:31:05 下午 com.date1.slf4jjTest function1
严重: error
一月 22, 2024 2:31:05 下午 com.date1.slf4jjTest function1
警告: warn
一月 22, 2024 2:31:05 下午 com.date1.slf4jjTest function1
信息: info
一月 22, 2024 2:31:05 下午 com.date1.slf4jjTest function1
信息: 用户:xxx,26
🍎 特点:
绑定多个日志框架时,会默认使用依赖文件中第一个框架;
日志实现框架的绑定流程:
java
1.添加slf4j-api的依赖
2.使用slf4j的API在项目中进行统一的日志记录
3.绑定具体的日志实现框架
绑定已经实现了slf4i的日志框架直接添加对应依赖
绑定没有实现slf4i的日志框架先添加日志的适配器再添加实现类的依赖
4.slf4i有且仅有一个日志实现框架的绑定 (如果出现多个默认使用第一个依赖日志实现)
桥接旧的框架
java
是什么?
项目设计之初使用简单的日志框架log4j,在后期程序实现过程中需要logback,桥接器可以实现不修改原先log4j而达到升级的目的。
实现?
原始的log4j 升级为 logback
需要配置log4j的桥接器,即在pom文件中:log4j-over-slf4j
<!-- log4j 升级为 logback 配置桥接器-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
🍎 注意:
桥接器与适配器不能同时出现,即log4j-over-slf4j 与slf4j-log4j12 ,如果同时出现,会出现栈内存溢出的错误,会陷入死循环。
实战
logback
基础概念
是什么?
java
Logback是一个广泛用于Java应用的日志记录库。
Logback主要分为三个模块:
java
logback-core:其它两个模块的基础模块
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API
logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
日志级别有:error、warn、info、trace、debug(默认级别);
修改日志的默认信息需要通过配置文件;
组件之间的关系:
java
1. Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
2. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
3. Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Lavout对象被封装在encoder中
配置文件
参见的配置文件:
xml
logback会依次读取以下类型配置文件
logback.groovy
logback-test.xml
logback.xml如果均不存在会采用默认配置
控制台输出的appender配置文件:
xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--配置集中管理属性
我们可以直接改属性的 value 值格式: ${name} -->
<property name=" pattern " value="[%-5level] %d{yyyy-MM-dd HH;mm;ssSSS} %c %M %L [%thread] %m%n " > </property>
<!--
日志输出格式
%-5level
%dlyyyy-MM-dd HH;mm;ssSSS}日期
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<!--控制台日志输出的 appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--控制输出流对象 默认 System.out 改为 System.err-->
<target>System.err</target>
<!--日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--root logger 配置-->
<root level="ALL">
<appender-ref ref="console"></appender-ref>
</root>
</configuration>
日志文件输出的appender配置文件:
xml
<appender name="check_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定义一个名为check_log的日志输出目的地,类型是滚动日志记录器-->
<encoder><pattern>%msg%n</pattern><charset>UTF-8</charset></encoder>
<!-- encoder记录日志消息的格式,其中pattern消息格式,%msg%n=只记录消息体,charset字符集 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 使用基于时间的滚动策略,通过class配置-->
<fileNamePattern>${LOG_HOME}/check_log/%d{yyyy-MM-dd,aux}/check_log.%d{yyyy-MM-dd.HH}.log</fileNamePattern>
<!-- 文件路径,-->
</rollingPolicy>
</appender>
<appender name="check_log_async" class="ch.qos.logback.classic.AsyncAppender">
<!-- 定义异步日志文件器,通过class设置,该可以提高日志写入的性能,不会阻塞主线程-->
<discardingThreshold>0</discardingThreshold>
<!-- 队列满时,超出的事件被丢弃的阈值,0=意味着不丢弃任何事件 -->
<queueSize>512</queueSize>
<!-- 异步记录器使用的队列大小,512=队列大小 -->
</appender>
<logger name="com.unicom.associatedAuth.log.CheckLog" level="INFO" additivity="false">
<!-- 配置日志记录器,name=名称,及对应的类路径;level=日志级别,等于或高于info的会被处理; additivity=false表示日志记录器不会集成父日志记录器的输出目的地,仅输出到自己指定的appender -->
<appender-ref ref="check_log_async"/>
<!-- 日志记录器指定的appender-->
</logger>
Log4j
概述
Log4j 是一种基于 Java 的日志记录框架,它提供了强大的日志记录功能,包括日志级别、日志输出格式、日志滚动等。
- 使用:
采用maven形式,需要导入相应的依赖包;
配置在 properties 或 XML 文件进行。
案例:
java
# 输出到控制台
log4j.rootLogger=DEBUG, stdout
// 定义了一个根记录器(rootLogger),将其日志级别设置为 DEBUG,并将日志输出到控制台。
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
// 定义名stdout 的输出器(appender)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
// 其输出格式设置为 PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
// 输出格式的字符串(ConversionPattern)