在Gradle转换后调试SLF4J

时间:2014-08-18 22:27:22

标签: 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

请注意,最后两行反映了自定义记录器消失

1 个答案:

答案 0 :(得分:0)

这个问题的本质以及我无法看到解决方案代表了对依赖关系的某种故意无知。如果我使用slf4j和log4j作为底层实现,为什么我需要两个单独的导入?换句话说,就其性质 slf4j-log4j12:1.7.7 而言,需要slf4j和log4j,因此后者不应该被列为依赖项。

我在OP中使用的两个import语句是不兼容的,我通过将导入更改为仅修复此问题:

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