无法使用log4j2处理RollingFile

时间:2014-01-14 13:49:00

标签: spring glassfish log4j2

我试图配置log4j2将滚动日志文件写入磁盘,但我无法让它工作。在给定路径上没有显示日志文件,Glassfish server.log根本不显示任何Spring日志记录。我已经在SO上阅读了很多类似的问题,但是没有提出的解决方案在这种情况下有效。谁能帮我?我在Glassfish 3.1应用服务器上使用Spring 3.0。

从我的pom.xml:

<properties>
    <junit.version>4.11</junit.version>
    <tiles.version>3.0.3</tiles.version>
    <slf4j.version>1.7.5</slf4j.version>
    <log4j.version>2.0-beta9</log4j.version>
</properties>
<dependencies>
    <dependency>
        <artifactId>jcl-over-slf4j</artifactId>
        <groupId>org.slf4j</groupId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
    </dependency>
</dependencies>

这是我的log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Properties>
        <Property name="fileName" value="C:/temp/rolling-file.log"/>
        <Property name="fileNamePattern" value="C:/temp/rolling-file-$d{dd-MM-yyyy}-%i.log"/>
        <Property name="logPattern" value="%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n"/>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${logPattern}"/>
        </Console>
        <RollingFile name="RollingFile" fileName="${fileName}" filePattern="${fileNamePattern}">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="my.root.package" level="info" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

2 个答案:

答案 0 :(得分:2)

除了M. Deinum提出的优点之外,事实证明我的log4j2.xml需要更改为以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Properties>
        <Property name="fileName">C:/temp/rolling-file.log</Property>
        <Property name="fileNamePattern">C:/temp/rolling-file-%d{dd-MM-yyyy}-%i.log</Property>
        <Property name="logPattern">%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${logPattern}"/>
        </Console>
        <RollingFile name="MyRollingFile" fileName="${fileName}" filePattern="${fileNamePattern}">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="my.root.package" level="info" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="MyRollingFile"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

执行更改:

  • value元素的Property属性未正确解析。将它们指定为Property元素的主体似乎可以解决这个问题。
  • fileNamePattern属性的值存在错误。我使用$d来表示日期,但应该是%d
  • 显然,log4j2不喜欢名为“RollingFile”的RollingFile元素。更改后,日志开始工作。

答案 1 :(得分:0)

您可能需要将log4j-api包含在pom依赖项(http://logging.apache.org/log4j/2.x/faq.html#which_jars)中。

关于属性:如果问题消失,可以直接在配置中输入值:

<RollingFile name="RollingFile" fileName="C:/temp/rolling-file.log" 
             filePattern="C:/temp/rolling-file-$d{dd-MM-yyyy}-%i.log">
    <PatternLayout pattern="%d{dd-MM-yyyy HH:mm:ss,SSS} [%t] %-5p %c - %m%n"/>

然后你可能发现了一个错误。在这种情况下,你可以在log4j2 Jira issue tracker中提出这个问题吗?