Tomcat 使用slf4j/logback时如何打包webapp?

Tomcat 使用slf4j/logback时如何打包webapp?,tomcat,maven,packaging,slf4j,logback,Tomcat,Maven,Packaging,Slf4j,Logback,我有很多web应用程序要构建/打包,我想分享它们的公共库 关于日志记录,我想将SLF4JAPI与每个应用程序捆绑在一起,但是考虑由我的容器(当前是Tomcat)提供的实现。 为此,我将两个JAR,logback classic和logback core复制到$CATALINA\lib目录中 不幸的是,在运行时,slf4j与其实现之间的绑定失败,并显示以下错误消息: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". S

我有很多web应用程序要构建/打包,我想分享它们的公共库

关于日志记录,我想将SLF4JAPI与每个应用程序捆绑在一起,但是考虑由我的容器(当前是Tomcat)

提供的实现。 为此,我将两个JAR,logback classic和logback core复制到$CATALINA\lib目录中

不幸的是,在运行时,slf4j与其实现之间的绑定失败,并显示以下错误消息:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
我设法使它工作的唯一方法是在war文件中绑定jar


有什么想法吗?

这不会像预期的那样起作用。日志框架使用大量静态变量(也称为全局变量)


因此,每次加载日志配置时,它都会替换部署到容器中的所有应用程序的日志配置。这通常不是你想要的

将日志实现与WAR捆绑在一起,这样web容器就可以确保每个web应用程序都有自己的全局变量集

[编辑]如果您确实希望使用相同的日志配置控制所有应用,则必须将所有日志类移动到容器中。这包括
slf4j

我强烈建议将日志配置放在JAR中,并将其放在JAR中。或者部署一个虚拟web应用程序,其中只包含尽可能少的代码(以便Tomcat加载),再加上
logback.xml

否则,应用程序的启动顺序将决定当您到达日志配置必须更改的点时,日志记录将是什么。

您是否尊重

将slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar中的一个(且仅一个)放在类路径上应该可以解决问题

?

如果使用例如hibernate,它可能会在类路径中引入slf4j-log4j12.jar,因此在类路径中可能有多个slf4j实现


对我来说,它与slf4j和log4j一起工作

我们将slf4j和Logback的所有jar放回Tomcat的shared/lib中。然后,我们将一个全局logback.xml放入共享/类中

但我仍然不知道这是否是一个好的做法。 我们必须按用户管理日志,所以我们设置了MDC以便使用SiftingAppender。
我有一个问题正在等待回答:(

“它将替换部署到容器中的所有应用程序。”这正是我想要的。好的……在这种情况下。您必须将所有日志类(包括slf4j)移动到
$CATALINA/lib
。事实上,这就是方法。谢谢