迁移到weblogic上的logback,但不记录

时间:2013-08-07 13:44:00

标签: java logback

我正在运行POC,以了解将j2ee应用程序迁移到logback的影响。 我花了一些时间在官方网站上,显然,新罐子旁边唯一的变化是logback.xml文件。不幸的是看起来不够,部署工作也创建了日志文件,但没有记录任何内容(空)。

我的代码有以下声明

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger log = LoggerFactory.getLogger(CustomerServiceBean.class);
log.debug("test Log Back - customer ID  " + input.getCustomerId());

pom.xml现在有以下内容

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version>0.9.18</version>
 </dependency>

logback.xml(使用官方网站上的web实用程序创建)

<configuration>
   <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
   <File>/var/log/dcs-3/dcs3.log</File>
   <encoder>
     <pattern>%d{ABSOLUTE} %5p %c{1}:%L - %m%n</pattern>
   </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
     <maxIndex>1</maxIndex>
     <FileNamePattern>/var/log/dcs-3/dcs3.log.%i</FileNamePattern>
   </rollingPolicy>
   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
     <MaxFileSize>1MB</MaxFileSize>
   </triggeringPolicy>
 </appender>
 <logger name="com.lgi.dcs" level="DEBUG" />
 <root level="debug">
   <appender-ref ref="file"/>
 </root>
</configuration>

任何想法? 感谢

更新
我按照建议做了一些更改。这个问题仍然存在,但我能够获得更多信息 我记录了一个ERROR而不是一个简单的DEBUG。我从项目中删除了所有log4j jar或依赖项,并添加了log4j-bridge。我更改了logback.xml,其中一个更通用,取自另一篇文章,并在控制台上使用了appender以及文件。

现在在我的IDE中看起来像Logger实例是由ch.qos.locback.classic.Logger实现的。 日志文件仍为空,但如果我删除它,则不会在服务器启动期间重新创建。 在服务器日志中,我现在可以看到我的测试消息,如:

  

SLF4J:类路径包含多个SLF4J绑定。 SLF4J:找到了   绑定   [邮编:/opt/oracle-soa/user_projects/domains/osb/servers/AdminServer/tmp/_WL_user/dcs3-ear-3/9yhkv9/APP-INF/lib/logback-classic-0.9.18.jar /组织/slf4j/impl/StaticLoggerBinder.class]   SLF4J:发现绑定   [邮编:/opt/oracle-soa/user_projects/domains/osb/servers/AdminServer/tmp/_WL_user/dcs3-ear-3/9yhkv9/APP-INF/lib/logback-classic-0.9.18.jar /组织/slf4j/impl/StaticLoggerBinder.class]   SLF4J:请参阅http://www.slf4j.org/codes.html#multiple_bindings   说明。 11:40:17.902 [[ACTIVE] ExecuteThread:'12'表示队列:   'weblogic.kernel.Default(自我调整)']错误   c.l.d.s.customer.CustomerServiceBean - 测试Log Back - 客户ID   6107576

其中一些如何让我考虑weblogic中的log4j。

3 个答案:

答案 0 :(得分:0)

如上所述,logger factory返回log4j的实例,而不是logback。这意味着你仍然在classpath上有log4j。它可以直接提供并且错误地留在那里,或者它是对你正在使用的库的依赖。如果您正在使用maven,请尝试调查有效的POM for log4j存在,并排除它们。否则你必须手动完成。如果你会发现这种依赖性,删除它应该可以解决问题。

你应该寻找的jar可能是slf4j bridge log4j-over-slf4j jcl-over-slf4j 也可能相关。

答案 1 :(得分:0)

Log4jLoggerAdapter存在于SLF4J Log4J包装器实现中。很可能你的类路径中有 slf4j-log4j12 ,因此SLF4J同时有2个日志后端impl(LogBack和Log4J Impl)

另一个答案提到了log4j-over-slf4j,它用于将调用重定向到Log4J以使用SLF4J,如果你使用的是LogBack,那应该存在(当然,如果你想让log4j消息通过SLF4J)< / p>

答案 2 :(得分:0)

对于Java EE应用程序,如果应用程序直接写入文件系统(因为它在多JVM容器上中断),则会破坏规范。

这基本上排除了战争中/入耳式记录。

相反,请考虑使用slf4j java.util.logging网桥,让容器捕获并管理日志记录。