Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序中的SLF4j和Logback可嵌入_Java_Logging_Slf4j_Logback - Fatal编程技术网

Java 应用程序中的SLF4j和Logback可嵌入

Java 应用程序中的SLF4j和Logback可嵌入,java,logging,slf4j,logback,Java,Logging,Slf4j,Logback,我正在应用程序中使用SLF4j和Logback。现在我要求我的应用程序应该嵌入到其他应用程序中。这意味着,该应用程序可以在其他应用程序中用作库。除记录器部件外,所有部件均按预期工作。我只是不知道如何完全禁用Logback(这是因为用户应该自带自己的记录器实现)。我还尝试查找信息,看是否可以以类似“委派模式”的方式运行Logback,以允许其他SLF4j实现挂接,但我没有找到任何信息 另一种方法是编写自定义类加载器,在应用程序启动时去掉logback,但这非常复杂(如果没有黑客,在应用程序运行时从

我正在应用程序中使用
SLF4j
Logback
。现在我要求我的应用程序应该嵌入到其他应用程序中。这意味着,该应用程序可以在其他应用程序中用作库。除记录器部件外,所有部件均按预期工作。我只是不知道如何完全禁用
Logback
(这是因为用户应该自带自己的记录器实现)。我还尝试查找信息,看是否可以以类似“委派模式”的方式运行
Logback
,以允许其他
SLF4j
实现挂接,但我没有找到任何信息

另一种方法是编写自定义类加载器,在应用程序启动时去掉logback,但这非常复杂(如果没有黑客,在应用程序运行时从类加载器中删除加载的类是不可能的)


是否有人认为可以在不将我的应用程序拆分到不同模块的情况下执行此操作?

在编译时,您的类路径中应该只有slf4j api

在运行时,您可以选择在运行时类路径中添加logback,slf4j将使用它

如果其他应用程序使用log4j,则需要添加slf4j-log4j而不是logback,以及slf4j api和您的模块

如果使用java.util.logging,则需要添加slf4j-jdk14而不是logback


在这两种情况下,您可能希望告诉他们您使用的日志记录类别,以便他们可以将其添加到log4j或java.util.logging配置中。

谢谢您的快速回答。不幸的是,我的类路径中确实有Logback。我正在寻找一种方法,a)在应用程序运行时从类路径中删除Logback,或B)禁用Logback,以便其他实现可以挂接。我认为,您的类路径由应用程序决定。不能在(嵌入)应用程序启动之前替换logback吗?将构建代码步骤与组装应用程序步骤分开。在后一种情况下,使用Logback。