gradle - 调试SLF4J Post Gradle转换

标签 gradle log4j slf4j

非常烦人...我们将项目转换为Gradle,日志记录不再起作用。我选择了与当前版本1.6.6匹配的导入,但我们得到的唯一输出就是时间信息,如下所示:

Thu Aug 14 18:51:53 EDT 2014



SLF4J是实现,我们正在使用log4j.xml文件进行存储在classes目录中的设置。如果我从Eclipse运行单元测试,则日志记录机制可以正常工作,但是在将其部署到Tomcat之后我就没有运气了。我也尝试更新到最新版本,但这并不能解决问题。

这是当前的gradle条目:
compile 'org.slf4j:slf4j-api:1.7.7'
compile 'org.slf4j:slf4j-log4j12:1.7.7'

就像我说的,我们正在使用log4jxml.file进行配置,这很长,可能不是必需的(只是因为,就像我说的那样,这在以前是可行的),但这是一个不起作用的简短版本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <param name="Threshold" value="info"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n LOGTEST" />
    </layout>
</appender>

    <appender name="file" class="org.apache.log4j.RollingFileAppender">
      <param name="append" value="false"/>
      <param name="Threshold" value="info"/>
      <param name="file" value="${catalina.base}/logs/application.log"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>

    <logger name="org.springframework.ws">
        <level value="trace" />
    </logger>

    <!-- Root Logger -->
    <root>
        <priority value="trace" />
        <appender-ref ref="file" />
        <appender-ref ref="errorFile" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

这确实适用于在Eclipse中运行单元测试。但是,如果将其部署到Tomcat并从Eclipse启动服务器,我将不再获得输出。请注意上面的“LOGTEST”字符串。这是我的控制台日志输出如下所示:
LOGTESTINFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
LOGTESTINFO : com.mycompany.cerp.app.MyApp - Loading trusted certs from C:\tomcat\webapps\ROOT\WEB-INF\validcerts
LOGTESTINFO : com.mycompany.cerp.app.MyApp - Loading Certificate: C:\tomcat\webapps\ROOT\WEB-INF\validcerts\certs_output.crt
LOGTESTINFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'mvc-dispatcher': initialization completed in 874 ms
LOGTESTAug 18, 2014 6:34:56 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8000"]
Aug 18, 2014 6:34:56 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Aug 18, 2014 6:34:56 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 8561 ms
Aug 18, 2014 6:35:06 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Thu Aug 14 18:51:53 EDT 2014
Thu Aug 14 18:51:53 EDT 2014

请注意,最后两行反射(reflect)了自定义记录器的消失

最佳答案

这个问题的性质以及我无法看到的解决方案表示对依赖性的某种故意的无知。如果我将slf4j与log4j用作基础实现,那么为什么需要两个单独的导入?换句话说,就其本质而言, slf4j-log4j12:1.7.7 既需要slf4j又需要log4j,因此这些后者不需要作为依赖项列出。

我在OP中使用的两个import语句不兼容,我通过将import更改为just来解决此问题:

compile 'org.slf4j:slf4j-log4j12:1.7.7'

关于gradle - 调试SLF4J Post Gradle转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25373017/

相关文章:

java - 如何使用 gradle 正确地向另一个项目添加依赖项?

java - log4j 控制台和 SMTPAppender : How use multiple appenders

java - log4j 可以在文件大小超过 2MB 后压缩日志文件吗

java - 修剪 Log4J 消息

groovy - 在 Gradle 中聚合任务

android - Proguard 与 Gradle 混淆了 id 的定义

docker - 容器化Spring Boot应用程序时的Docker错误

java - MDC 值未传递给请求

Grails:用 logback 替换 log4j

java - SLF4J:无法加载类 "org.slf4j.impl.StaticLoggerBinder"