2012-11-07 125 views
2

我看到奇怪的行为使用log4j,我完全难住。这是我第一次将它用于BlazeDS,我希望这是我错过的一个小问题。log4j日志记录到控制台但不是文件blazeDS

在这个Web应用程序中,我使用log4j从2个java类以及blazeDS进行日志记录。我通过org.springframework.flex.core.CommonsLoggingTarget将BlazeDS挂接到commons-logging,然后使用log4j作为基础的日志记录器。

我已经在blazeds记录器下为“Console”和“MyFile”设置了appender,而控制台输出按预期工作时,没有任何内容写入MyFile。该文件实际上已创建,但保持在0KB。另一方面,我的两个java类对控制台及其滚动文件都记录得很好。我在本地测试和部署到Tomcat时都看到了这种行为。

最后一个细节 - 在本地测试时,我将MyFile路径更改为绝对路径,并且看到文件被附加到了后面。这会让我相信这是相对路径的问题,但它对我的java日志记录工作正常。

commons-logging.properties:

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl 
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 

的log4j.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="trace" debug="true"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 

    <RollingFile name="RollingFile" fileName="logs/ImpactTradeQuery.log" 
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout> 
     <pattern>%d %p %C{1.} [%t] %m%n</pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="25 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="25"/> 
    </RollingFile> 

    <File name="MyFile" immediateFlush="true" fileName="logs/app.log"> 
     <PatternLayout> 
     <pattern>%d %p %C{1.} [%t] %m%n</pattern> 
     </PatternLayout> 
    </File> 
    </appenders> 
    <loggers> 
    <root level="trace"> 
     <appender-ref ref="Console"/> 
    </root> 
    <logger name="flex.samples.trade.tradeService" level="trace" additivity="False"> 
     <appender-ref ref="RollingFile"/> 
     <appender-ref ref="Console"/> 
    </logger> 
    <logger name="flex.samples.ConnectionHelper" level="trace" additivity="False"> 
     <appender-ref ref="RollingFile"/> 
     <appender-ref ref="Console"/> 
    </logger> 
    <logger name="blazeds" level="trace" additivity="True"> 
     <appender-ref ref="MyFile"/> 
     <appender-ref ref="Console"/> 
    </logger> 
    </loggers> 
</configuration> 

服务-config.xml文件:

<logging> 
     <target class="flex.messaging.log.ConsoleTarget" level="Error"> 
      <properties> 
       <prefix>[BlazeDS] </prefix> 
       <includeDate>false</includeDate> 
       <includeTime>false</includeTime> 
       <includeLevel>false</includeLevel> 
       <includeCategory>false</includeCategory> 
      </properties> 
      <filters> 
       <pattern>Endpoint.*</pattern> 
       <pattern>Service.*</pattern> 
       <pattern>Configuration</pattern> 
      </filters> 
     </target> 
     <target class="org.springframework.flex.core.CommonsLoggingTarget" level="All"> 
      <properties> 
       <categoryPrefix>blazeds</categoryPrefix> 
      </properties> 
      <filters> 
       <pattern>Endpoint.*</pattern> 
       <pattern>Service.*</pattern> 
       <pattern>Configuration</pattern> 
      </filters> 
     </target> 
    </logging> 

回答

1

原来是在缺少jar文件导致问题的Tomcat(log4j-jcl)。一旦库与应用程序一起正确打包,日志记录按预期工作。

+0

刚刚遇到同样的问题。我目前正在研究一个struts2 web应用程序,并且无法将struts正确记录到文件中。我已经2天试图绝望地修复它,现在幸运地找到了你的答案。很高兴你写下来!非常感谢你,包括'log4j-jcl'依赖性解决了这个问题。一百万再次感谢:) – JorgeGRC

相关问题