提交 4d816945 编写于 作者: X xuml

fix: 修复slf4j-simple-binding-demo中关于log4j2的处理不正确的问题

上级 80b1992d
...@@ -47,12 +47,19 @@ ...@@ -47,12 +47,19 @@
``` ```
## `Log4j2` Over 处理 ## `Log4j2` Over 处理
`log4j2` 由于有自己的门面接口,无法通过Over方法重定向到`slf4j`,只能通过修改代码使用。 `log4j2` 引入`log4j-to-slf4j` 这个包。
将原来的`LogManager.getLogger(LogLog4j2Tests.class)` 修改为`slf4j``LoggerFactory.getLogger(LogBackTests.class)`方式来改造,
但这样改造后就是直接实现了`slf4j`,而不是Over了。 `Log4j2`Over 无法测试
>注意不要使用`log4j-to-slf4j` 包,这个不是Over包,是把`slf4j`转换成`log4j2`的。 还需要排除`log4j-core` 包,当然如果同时存在`logback-classic` 则不排除也可以正常运行,否则会抛出异常`org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext`
>不然会抛出`org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext` 异常 。因为Spring 默认会优先加载Logback的`LoggingSystem`的一个实现`LogbackLoggingSystem`,当没有的时候才会选择`Log4J2LoggingSystem`,但当没有`Logback`实现,并且存在`log4j-core`时,
将会使用`Log4J2LoggingSystem`作为日志的实现,其实也就是一个动态的加载日志实现系统的处理。但`log4j-core`不能直接转换到`Slf4j`,因此才会抛出上面的异常。
```xml
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-core</artifactId>-->
<!-- <version>${log4j2.version}</version>-->
<!-- </dependency>-->
```
## `Jul` Over 处理 ## `Jul` Over 处理
引入`jul-to-slf4j` 包。 引入`jul-to-slf4j` 包。
...@@ -91,47 +98,55 @@ Spring Boot环境下,简单配置`slf4j-simple` 方式就是在`application.pr ...@@ -91,47 +98,55 @@ Spring Boot环境下,简单配置`slf4j-simple` 方式就是在`application.pr
## 没有引入对应over依赖包的情况下的输出 ## 没有引入对应over依赖包的情况下的输出
日志各自使用各自的输出。 Spring Boot中当运行环境有`Log4j`时,`Jcl`的默认使用`Log4j`的实现。 日志各自使用各自的输出。 Spring Boot中当运行环境有`Log4j`时,`Jcl`的默认使用`Log4j`的实现。
```log ```log
2023-10-27 09:47:35 DEBUG (com.feiyizhan.LogJclTests:21) - LogJclTests 这是debug日志... 2023-11-03 18:38:01 DEBUG (com.feiyizhan.LogJclTests:21) - LogJclTests 这是debug日志...
2023-10-27 09:47:35 INFO (com.feiyizhan.LogJclTests:23) - LogJclTests 这是info日志... 2023-11-03 18:38:01 INFO (com.feiyizhan.LogJclTests:23) - LogJclTests 这是info日志...
2023-10-27 09:47:35 WARN (com.feiyizhan.LogJclTests:24) - LogJclTests 这是warn日志... 2023-11-03 18:38:01 WARN (com.feiyizhan.LogJclTests:24) - LogJclTests 这是warn日志...
2023-10-27 09:47:35 ERROR (com.feiyizhan.LogJclTests:25) - LogJclTests 这是error日志... 2023-11-03 18:38:01 ERROR (com.feiyizhan.LogJclTests:25) - LogJclTests 这是error日志...
2023-10-27 09:47:35 INFO (com.feiyizhan.LogJclTests:26) - LogJclTests public class org.apache.commons.logging.impl.Log4JLogger 2023-11-03 18:38:01 INFO (com.feiyizhan.LogJclTests:26) - LogJclTests public class org.apache.commons.logging.impl.Log4JLogger
[2023-10-27 09:47:35.072] - 41064 INFO [main] --- com.feiyizhan.LogJulTests: LogJulTests 这是info日志... 十一月 03, 2023 6:38:01 下午 com.feiyizhan.LogJulTests printLog
[2023-10-27 09:47:35.076] - 41064 INFO [main] --- com.feiyizhan.LogJulTests: LogJulTests public class java.util.logging.Logger 信息: LogJulTests 这是info日志...
2023-10-27 09:47:35 DEBUG (com.feiyizhan.LogLog4jTests:21) - LogLog4jTests 这是debug日志... 十一月 03, 2023 6:38:01 下午 com.feiyizhan.LogJulTests printLog
2023-10-27 09:47:35 INFO (com.feiyizhan.LogLog4jTests:23) - LogLog4jTests 这是info日志... 信息: LogJulTests public class java.util.logging.Logger
2023-10-27 09:47:35 WARN (com.feiyizhan.LogLog4jTests:24) - LogLog4jTests 这是warn日志... 2023-11-03 18:38:01 DEBUG (com.feiyizhan.LogLog4jTests:21) - LogLog4jTests 这是debug日志...
2023-10-27 09:47:35 ERROR (com.feiyizhan.LogLog4jTests:25) - LogLog4jTests 这是error日志... 2023-11-03 18:38:01 INFO (com.feiyizhan.LogLog4jTests:23) - LogLog4jTests 这是info日志...
2023-10-27 09:47:35 INFO (com.feiyizhan.LogLog4jTests:26) - LogLog4jTests public class org.apache.log4j.Logger 2023-11-03 18:38:01 WARN (com.feiyizhan.LogLog4jTests:24) - LogLog4jTests 这是warn日志...
2023-10-27 09:47:35.098 [main] DEBUG LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是debug日志... 2023-11-03 18:38:01 ERROR (com.feiyizhan.LogLog4jTests:25) - LogLog4jTests 这是error日志...
2023-10-27 09:47:35.103 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志... 2023-11-03 18:38:01 INFO (com.feiyizhan.LogLog4jTests:26) - LogLog4jTests public class org.apache.log4j.Logger
2023-10-27 09:47:35.104 [main] WARN LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是warn日志... 2023-11-03 18:38:02.008 [main] DEBUG LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是debug日志...
2023-10-27 09:47:35.104 [main] ERROR LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是error日志... 2023-11-03 18:38:02.010 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志...
2023-10-27 09:47:35.104 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志...test 2023-11-03 18:38:02.010 [main] WARN LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是warn日志...
2023-10-27 09:47:35.111 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests public class org.slf4j.simple.SimpleLogger 2023-11-03 18:38:02.010 [main] ERROR LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是error日志...
2023-11-03 18:38:02.010 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志...test
2023-11-03 18:38:02.010 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests public class org.slf4j.simple.SimpleLogger
18:38:02.022 [main] ERROR com.feiyizhan.LogLog4j2Tests - LogLog4j2Tests 这是error日志...
``` ```
## 引入对应over依赖包的情况下的输出 ## 引入对应over依赖包的情况下的输出
全部统一一种日志输出格式了。 全部统一一种日志输出格式了。
```log ```log
2023-10-27 09:56:12.670 [main] DEBUG LogJclTests - LogJclTests 这是debug日志... 2023-11-03 18:39:39.271 [main] DEBUG LogJclTests - LogJclTests 这是debug日志...
2023-10-27 09:56:12.670 [main] INFO LogJclTests - LogJclTests 这是info日志... 2023-11-03 18:39:39.271 [main] INFO LogJclTests - LogJclTests 这是info日志...
2023-10-27 09:56:12.670 [main] WARN LogJclTests - LogJclTests 这是warn日志... 2023-11-03 18:39:39.271 [main] WARN LogJclTests - LogJclTests 这是warn日志...
2023-10-27 09:56:12.670 [main] ERROR LogJclTests - LogJclTests 这是error日志... 2023-11-03 18:39:39.271 [main] ERROR LogJclTests - LogJclTests 这是error日志...
2023-10-27 09:56:12.670 [main] INFO LogJclTests - LogJclTests public class org.apache.commons.logging.impl.SLF4JLog 2023-11-03 18:39:39.271 [main] INFO LogJclTests - LogJclTests public class org.apache.commons.logging.impl.SLF4JLog
2023-10-27 09:56:12.673 [main] INFO LogJulTests - LogJulTests 这是info日志... 2023-11-03 18:39:39.274 [main] INFO LogJulTests - LogJulTests 这是info日志...
2023-10-27 09:56:12.673 [main] INFO LogJulTests - LogJulTests public class java.util.logging.Logger 2023-11-03 18:39:39.274 [main] INFO LogJulTests - LogJulTests public class java.util.logging.Logger
2023-10-27 09:56:12.685 [main] DEBUG LogLog4jTests - LogLog4jTests 这是debug日志... 2023-11-03 18:39:39.277 [main] DEBUG LogLog4jTests - LogLog4jTests 这是debug日志...
2023-10-27 09:56:12.686 [main] INFO LogLog4jTests - LogLog4jTests 这是info日志... 2023-11-03 18:39:39.277 [main] INFO LogLog4jTests - LogLog4jTests 这是info日志...
2023-10-27 09:56:12.686 [main] WARN LogLog4jTests - LogLog4jTests 这是warn日志... 2023-11-03 18:39:39.277 [main] WARN LogLog4jTests - LogLog4jTests 这是warn日志...
2023-10-27 09:56:12.686 [main] ERROR LogLog4jTests - LogLog4jTests 这是error日志... 2023-11-03 18:39:39.277 [main] ERROR LogLog4jTests - LogLog4jTests 这是error日志...
2023-10-27 09:56:12.686 [main] INFO LogLog4jTests - LogLog4jTests public class org.apache.log4j.Logger 2023-11-03 18:39:39.277 [main] INFO LogLog4jTests - LogLog4jTests public class org.apache.log4j.Logger
2023-10-27 09:56:12.686 [main] DEBUG LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是debug日志... 2023-11-03 18:39:39.278 [main] DEBUG LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是debug日志...
2023-10-27 09:56:12.686 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志... 2023-11-03 18:39:39.278 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志...
2023-10-27 09:56:12.686 [main] WARN LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是warn日志... 2023-11-03 18:39:39.278 [main] WARN LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是warn日志...
2023-10-27 09:56:12.686 [main] ERROR LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是error日志... 2023-11-03 18:39:39.278 [main] ERROR LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是error日志...
2023-10-27 09:56:12.686 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志...test 2023-11-03 18:39:39.278 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests 这是info日志...test
2023-10-27 09:56:12.687 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests public class org.slf4j.simple.SimpleLogger 2023-11-03 18:39:39.278 [main] INFO LogSlf4jSimpleTests - LogSlf4jSimpleTests public class org.slf4j.simple.SimpleLogger
2023-11-03 18:39:39.378 [main] DEBUG LogLog4j2Tests - LogLog4j2Tests 这是debug日志...
2023-11-03 18:39:39.379 [main] INFO LogLog4j2Tests - LogLog4j2Tests 这是info日志...
2023-11-03 18:39:39.379 [main] WARN LogLog4j2Tests - LogLog4j2Tests 这是warn日志...
2023-11-03 18:39:39.381 [main] ERROR LogLog4j2Tests - LogLog4j2Tests 这是error日志...
2023-11-03 18:39:39.389 [main] INFO LogLog4j2Tests - LogLog4j2Tests 这是info日志...test
2023-11-03 18:39:39.390 [main] INFO LogLog4j2Tests - LogLog4j2Tests public class org.apache.logging.slf4j.SLF4JLogger
``` ```
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<slf4j.version>2.0.9</slf4j.version> <slf4j.version>2.0.9</slf4j.version>
<log4j2.version>2.21.1</log4j2.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
...@@ -60,6 +61,18 @@ ...@@ -60,6 +61,18 @@
<version>1.2</version> <version>1.2</version>
</dependency> </dependency>
<!--Log4j2相关的依赖包-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.logging.log4j</groupId>-->
<!-- <artifactId>log4j-core</artifactId>-->
<!-- <version>${log4j2.version}</version>-->
<!-- </dependency>-->
<!--添加Slfj 依赖--> <!--添加Slfj 依赖-->
<dependency> <dependency>
...@@ -68,6 +81,7 @@ ...@@ -68,6 +81,7 @@
<version>${slf4j.version}</version> <version>${slf4j.version}</version>
</dependency> </dependency>
<!--添加Slfj Simple依赖--> <!--添加Slfj Simple依赖-->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
...@@ -96,6 +110,13 @@ ...@@ -96,6 +110,13 @@
<version>${slf4j.version}</version> <version>${slf4j.version}</version>
</dependency> </dependency>
<!-- LOG4J2 over SLF4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>${log4j2.version}</version>
</dependency>
</dependencies> </dependencies>
......
package com.feiyizhan;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Log Log4j2 的测试
* @author 徐明龙 XuMingLong 2023-03-17
*/
public class LogLog4j2Tests {
//LOG4j2
static final Logger logger_log4j2 = LogManager.getLogger(LogLog4j2Tests.class);
//SLF4J
// static final Logger logger_log4j2 = LoggerFactory.getLogger(LogLog4j2Tests.class);
public static void printLog(){
logger_log4j2.trace("LogLog4j2Tests 这是trace日志..."); //跟踪轨迹
logger_log4j2.debug("LogLog4j2Tests 这是debug日志..."); //调试
//SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别(root级别)
logger_log4j2.info("LogLog4j2Tests 这是info日志...");
logger_log4j2.warn("LogLog4j2Tests 这是warn日志...");
logger_log4j2.error("LogLog4j2Tests 这是error日志...");
logger_log4j2.info("LogLog4j2Tests 这是info日志...{}","test");
logger_log4j2.info("LogLog4j2Tests " + logger_log4j2.getClass().toGenericString());
}
}
...@@ -16,5 +16,6 @@ public class LogSlf4jSimpleBindingTests { ...@@ -16,5 +16,6 @@ public class LogSlf4jSimpleBindingTests {
LogJulTests.printLog(); LogJulTests.printLog();
LogLog4jTests.printLog(); LogLog4jTests.printLog();
LogSlf4jSimpleTests.printLog(); LogSlf4jSimpleTests.printLog();
LogLog4j2Tests.printLog();
} }
} }
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
<Property name="LOG_LEVEL_PATTERN">%5p</Property>
<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${sys:LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${sys:LOG_LEVEL_PATTERN}} %clr{%pid}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} %pid --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" charset="${sys:CONSOLE_LOG_CHARSET}"/>
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
<Logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
<Logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册