我正在运行POC,以了解将我们的j2ee应用程序迁移到logback的影响。我花了一些时间在官方网站上,显然,除了新的jars之外,唯一的改变就是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>知道吗?谢谢
更新
我没有像建议的那样做更多的改变。这个问题仍然没有解决,但是我获得了更多的信息。
我记录了一个错误,而不是简单的调试。我从项目中删除了所有log4j jars或依赖项,并添加了log4j桥。我更改了logback.xml,使用了另一篇文章中的多个泛型,并在控制台上使用了一个除了文件之外的一个附录。
现在,在我的IDE中,Logger实例看起来是由ch.qos.locback.classic.Logger实现的。日志文件仍然是空的,但是如果我删除它,就会在服务器启动时重新创建它。在服务器日志中,我现在可以看到我的测试消息如下:
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:有关解释,请参见bindings。11:40:17.902 [活动ExecuteThread:'12‘用于队列:'weblogic.kernel.Default (自调优)’]错误c.l.d.s.customer.CustomerServiceBean -测试日志返回-客户ID 6107576
这也许会让我想到weblogic中的log4j。
发布于 2013-08-08 05:44:35
如前所述,记录器工厂返回log4j而不是logback的实例。这意味着类路径上仍然有log4j。它可能是直接提供的,也可能是错误地留在那里的,或者它是您正在使用的库的依赖项。如果您正在使用maven,请尝试调查log4j存在的有效POM,并将它们排除在外。否则你必须手动完成。如果您会发现这个依赖项,那么删除它就可以了。
您应该查找的jar可能是log4j-over-slf4j.桥slf4j。jcl-over-slf4j也可能是相关的。
发布于 2013-08-08 06:22:25
Log4jLoggerAdapter存在于SLF4J Log4J包装器实现中。很可能您的类路径中有 SLF4J -log4j12,因此在SLF4J中同时有2个日志后端impl (LogBack和Log4J Impl)。
另一个答案是提到Log4J -over SLF4J,它用于将调用重定向到log4j以使用SLF4J,如果您正在使用LogBack (当然,如果您希望log4j消息通过SLF4J),则应该存在这种情况。
发布于 2016-10-14 15:20:25
对于Java应用程序,如果应用程序直接写入文件系统(因为这会破坏多JVM容器),则会违反规范。
这从根本上排除了在战争中/在耳内进行日志记录的可能性。
相反,可以考虑使用slf4j java.util.logging桥,让容器捕获和管理日志记录。
https://stackoverflow.com/questions/18105085
复制相似问题