2014-01-14 49 views
0

我試圖將log4j2配置爲將滾動日誌文件寫入磁盤,但我無法使其正常工作。在給定路徑上沒有日誌文件出現,並且Glassfish server.log根本不顯示任何Spring日誌。我已經閱讀了很多關於SO的類似問題,但是沒有一個提出的解決方案在這種情況下起作用。誰能幫我?我在Glassfish 3.1應用程序服務器上使用Spring 3.0。無法使用log4j2獲得RollingFile

從我的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> 
+1

將'Configuration'元素的'status'屬性設置爲「debug」時,你會得到任何有用的輸出嗎? – mthmulders

+0

試過了,沒有區別。我只是得到一些有關應用程序啓動和配置數據源的Glassfish日誌記錄。沒有什麼與Spring或我自己的日誌記錄相關。 – Hanno

+2

您正在使用log4j 2,因此應將該配置命名爲「log4j2.xml」而不是「log4j.xml」。請參閱http://logging.apache.org/log4j/2.x/manual/configuration.html(自動配置,第5項)。 –

回答

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元素。我改變它後,日誌開始工作。
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中提出這個問題嗎?

+0

感謝您的回答,Remko。事實證明,當您包含log4j-core時,依賴關係log4j-api將被autommaticaly包括在內。我得到了一些改變的屬性,我會張貼它們作爲未來參考的答案。 – Hanno