Java 已迁移到weblogic上的logback,但未进行日志记录

Java 已迁移到weblogic上的logback,但未进行日志记录,java,logback,Java,Logback,我正在运行一个POC,以查看将j2ee应用程序迁移到logback的影响。 我在官方网站上花了一些时间,显然,除了新JAR之外,唯一的变化就是logback.xml文件。不幸的是,这看起来还不够,部署工作正常,日志文件也已创建,但没有任何内容记录为空 我的代码有以下语句 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger log = LoggerFactory.getLogge

我正在运行一个POC,以查看将j2ee应用程序迁移到logback的影响。 我在官方网站上花了一些时间,显然,除了新JAR之外,唯一的变化就是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());
xml现在有以下内容

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version>0.9.18</version>
 </dependency>
使用官方网站上的web实用程序创建logback.xml

<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>
有什么想法吗? 谢谢

更新 我没有按照建议做更多的修改。这个问题仍然悬而未决,但是我能够获得更多的信息。 我记录了一个错误,而不是一个简单的调试。我从项目中删除了所有log4j jar或依赖项,并添加了log4j桥。我修改了logback.xml,使用了另一篇文章中的一个泛型,并在控制台上使用了一个appender来添加文件

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

SLF4J:类路径包含多个SLF4J绑定。SLF4J:已找到 装订 [zip:/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!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:在中找到绑定 [zip:/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!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:有关详细信息,请参阅 解释11:40:17.902[[ACTIVE]ExecuteThread:'12'用于队列: “weblogic.kernel.Default自调优”]错误 c、 l.d.s.customer.CustomerServiceBean-测试日志返回-客户ID 6107576


这也许让我想到了weblogic中的log4j。

正如您前面提到的,logger factory返回log4j的实例,而不是logback。这意味着类路径上仍然有log4j。它可以直接提供并错误地留在那里,也可以作为对您正在使用的库的依赖。如果您使用的是maven,请尝试调查log4j Existantnce的有效POM,并将其排除在外。否则,您必须手动执行此操作。如果您将找到该依赖项,那么删除它就可以了


您应该查找的jar可能是slf4j桥log4j-over-slf4j。jcl-over-slf4j也可能相关。

Log4jLoggerAdapter存在于slf4j Log4J包装器实现中。最有可能的情况是,您的类路径中有slf4j-log4j12,因此在LogBack和Log4J impl的同时,slf4j有两个日志后端impl


另一个答案是关于log4j-over-slf4j的,它用于将呼叫重定向到log4j以使用slf4j,如果您使用的是LogBack,那么它应该存在,如果希望JavaEE应用程序的log4j消息通过SLF4J

,那么如果应用程序直接写入文件系统,则会违反规范,因为在多个JVM容器上会破坏规范

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


而应考虑使用SLF4J JavaUTIL日志记录桥,并让容器捕获和管理日志记录。

LogLog.xml是什么样子的?在类路径中是LogBase.xml吗?你的程序在运行时找到它了吗?我想是的,因为文件是创建的,但是是空的。它位于ear的ejb部分内,与log4j以前的级别相同。但是在调试时,我看到了记录器的org.slf4j.impl.Log4jLoggerAdapter。您是否尝试记录与调试不同的级别?尝试在错误级别上记录一些内容,看看会发生什么。这不太可能发生,但您可能会将其他日志框架错误地留在类路径上。请仔细检查一下log4j,apache日志,jboss日志我认为你说的是错的。。。请参考我的另一个答案