【问题标题】:Tomcat maven plugin - Failed to load class "org.slf4j.impl.StaticLoggerBinder"Tomcat Maven 插件 - 无法加载类“org.slf4j.impl.StaticLoggerBinder”
【发布时间】:2013-07-12 19:22:07
【问题描述】:

当我在独立的 tomcat 容器中启动我的 web 应用程序时,我看到 Flyway 日志记录正常(如果找到它使用 commons-logging,否则如下 Axel 所述)。

但是,当我使用 apache tomcat maven 插件 (tomcat7-maven-plugin) 时,我看到以下内容:

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.

这里没什么特别的。完整代码如下:

public void contextInitialized(ServletContextEvent sce) {
    Flyway flyway = new Flyway();
    flyway.setDataSource(...);
    flyway.migrate();
}

<listener>
    <listener-class>com.blah.conf.FlywayListener</listener-class>
</listener>

我正在使用 logback-classic 进行日志记录。 Jersey 和 Guice 都可以正常记录(尽管我删除了它们以缩小问题范围)。

这是我在类路径中看到的唯一与日志记录相关的 jar:

logback-classic-1.0.13
logback-core-1.0.13
slf4j-api-1.7.5

这是 slf4j 的依赖树:

mvn dependency:tree -Dverbose -Dincludes=org.slf4j
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ hello ---
[INFO] com.hello:hello:war:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.13:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.5:compile

所以我更新的问题是,为什么使用 tomcat maven 插件与独立使用有区别?我在临时部署的“目标”文件夹中看不到任何其他 jar。

更新: 添加 jcl-over-slf4j 后问题就消失了。

【问题讨论】:

  • 添加 jcl-over-slf4j 后问题消失了。

标签: java logging tomcat7 slf4j logback


【解决方案1】:

此警告由 tomcat7-maven-plugin 发出。

将插件声明为:

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.1</version>
  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.5</version>
    </dependency>
  </dependencies>
</plugin>

将为插件的类路径提供特定的日志记录绑定,使警告消失。

【讨论】:

    【解决方案2】:

    Flyway-core logging 的工作原理如下:如果发现 commons-logging,则使用它,否则使用 System.out。

    如果您想要原生 SLF4J 支持,请在问题跟踪器中提交功能请求。

    至于你的例外,那是来自别的东西。

    【讨论】:

    • 谢谢阿克塞尔。奇怪的是,SLF4J 警告仅在我添加这三行 Flyway 代码时出现。如果我删除它们,警告就会消失 - 所以我认为它是 Flyway。我会尝试进一步缩小问题范围。
    • 我缩小了问题的范围 - 简单的 webapp,带有一个执行 Flyway 迁移的上下文侦听器。 tomcat maven 插件(tomcat7-maven-plugin)似乎是根本原因。我会更新问题。谢谢。
    猜你喜欢
    • 2011-12-18
    • 2011-11-17
    • 2017-02-19
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多