我的整个系统都是由slf4j记录的,带有log4j实现。
当一个新模块使用logback-classic深度进行日志记录时,我遇到了问题,因为它破坏了pom.xml文件,所以不能将它排除在日志文件之外。
首先,我试图在第三面寻找解决方案,但没有找到任何解决方案,所以我想,也许在他们之间架起一座桥梁来解决这个问题。
我主要想要的是将我的日志拆分到我自己的log4j.xml记录器和追加器之间,这样我就可以使用separetly了。
是否有任何桥梁,以便我可以同时使用logback-classic和log4j在slf4j下的例子?
谢谢!
发布于 2017-09-03 05:59:46
你说过:
当一个新模块使用logback-经典的日志记录时出现了问题,因为它破坏了pom.xml文件,所以不能将它排除在日志文件之外。
这是假设还是你试过了?另外,如果您确实尝试过,您是否也删除了logback核心依赖项?消除这些依赖关系的唯一方法是,如果模块依赖于日志实现,因为logback本机实现了slf4j API。如果模块确实依赖于实现,而不是依赖于API/接口,那么我认为,如果不删除这些依赖项(更改模块源代码)或编写模块所依赖的实现类的一些简单版本,您就无能为力了。
在编写遵循登录手册模式的代码时,只要不引入对logback实现类的依赖关系,就可以将实现从logback交换到log4j2,而不会出现任何问题。
下面是我写的例子:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
Main main = new Main();
main.main();
}
public void main(){
log.trace("trace msg");
log.debug("debug msg");
log.info("info msg");
log.warn("warn msg");
log.error("Error msg");
log.info(log.getClass().getName());
}
}下面是pom中的依赖项:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>这是输出:
00:48:26.378 [main] DEBUG blah.Main - debug msg
00:48:26.380 [main] INFO blah.Main - info msg
00:48:26.380 [main] WARN blah.Main - warn msg
00:48:26.380 [main] ERROR blah.Main - Error msg
00:48:26.380 [main] INFO blah.Main - ch.qos.logback.classic.Logger现在,我将pom更改为用log4j2替换logback jars:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>以下是进行此更改后的输出:
2017-09-03 00:52:21,630 INFO b.Main [main] info msg
2017-09-03 00:52:21,631 WARN b.Main [main] warn msg
2017-09-03 00:52:21,631 ERROR b.Main [main] Error msg
2017-09-03 00:52:21,632 INFO b.Main [main] org.apache.logging.slf4j.Log4jLogger因此,基于这一点,我认为,如果事情是以“正确的方式”实现的,那么您应该能够用log4j2交换logback jars,并且它应该“只是有效的”。
你还说:
我主要想要的是将我的日志拆分到我自己的log4j.xml记录器和追加器之间,这样我就可以使用separetly了。
现在,我完全清楚您在问什么,但我认为您希望让来自模块的日志消息转到控制台,以及您在log4j2配置中使用的任何日志。如果这种情况与修改log4j2配置一样简单--添加一个具有适当名称的记录器并分配适当的附加程序。例如,如果您的模块的类是com.my.package.Class1、com.my.package.Class2、com.my.package.Class3等,那么您可以为com.my.package创建一个记录器,并为它提供一个控制台附录以及适当的文件附加程序。
希望这能有所帮助!
https://stackoverflow.com/questions/45976551
复制相似问题