未创建slf4j / log4j日志文件

时间:2016-06-27 08:01:32

标签: java maven log4j slf4j

我的maven项目导致在Tomcat上部署了WAR文件

我已将依赖项包含在slf4j-log4j中,就像我的pom.xml

中那样
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

log4j.properties文件看起来像那样(我确保它实际上部署在war文件中并最终在WEB-INF / classes中):

log4j.rootLogger = DEBUG, MyFile

# Define the file appender
log4j.appender.MyFile=org.apache.log4j.FileAppender
log4j.appender.MyFile.File=${catalina.base}/logs/MyFile.log
log4j.appender.MyFile.ImmediateFlush=true

log4j.appender.MyFile.Threshold=DEBUG

log4j.appender.MyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.MyFile.layout.ConversionPattern=%-5p [%t]: %m%n

以下代码应该在名为MyFile.log的tomcat日志文件夹中生成一个日志文件,该文件夹还包含我的日志输出...但它没有。甚至没有创建该文件。

EDIT2:相反我发现日志条目正在写入STDOUT而不是FileAppender的日志文件......

EDIT3:我测试了两个不同的Tomcats(一个在Suse Linux上,另一个在Windows上作为服务)。结果基本相同

private Logger logger = LoggerFactory.getLogger(MyClass.class);

...

logger.info("User {} not found", cn);

编辑:

  • 我检查了log4j的jar文件是否也在部署
  • 用户权限足以创建日志文件。在我的第一次测试中,我甚至看到了正在创建的文件(但仍然是空的)。在后续测试中,不再创建日志文件

我做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试将文件路径更改为log4j.appender.MyFile.File=logs/MyFile.log。由于Tomcat安装目录是应用程序的当前目录,因此它必须在没有参数${catalina.base}的情况下工作,这可能在您的应用程序的上下文中不存在。

答案 1 :(得分:0)

我设法使用以下log4j.xml而不是log4j.properties来解决问题。我不确定为什么......

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="MyFile" class="org.apache.log4j.FileAppender">
        <param name="file" value="${catalina.base}/logs/MyFile.log"/>
        <param name="Append" value="true"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss.SSS} [%t] %-5p %c{1}:%M - %m%n"/>
        </layout>
    </appender>

    <root>
        <priority value="info"/>
        <appender-ref ref="MyFile"/>
    </root>

</log4j:configuration>