2017-05-25 82 views
1

我一直在主題中解決這個問題。如何將當前客戶端目錄添加到日誌文件名?

我想是這樣的:

String sCurrDir = System.getProperty("user.dir"); 
int nLastBSlash = sCurrDir.lastIndexOf('/'); 
System.setProperty("current.folder", sCurrDir.substring(nLastBSlash + 1)); 

,並增加了以下的log4j.properties:

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="Threshold" value="DEBUG" /> 
    <param name="append" value="true" /> 
    <param name="maxFileSize" value="10MB" /> 
    <param name="maxBackupIndex" value="50" /> 

    <param name="File" value="./log/${current.folder}-wcss-simulator-${current.date}.log"/> 

    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}\t %-5p\t [%X{ThreadId}]\t %X{MethodName}\t - %m%n" /> 
    </layout> 
</appender> 

但文件名只能用連字符開始。

+0

Log4j在應用程序啓動時被初始化。如果你真的想要實現這一點,你需要添加你自己的Appender,它擴展了org.apache.log4j.RollingFileAppender。 –

+0

你的問題不明確。首先,你必須清楚地指定log4j2而不僅僅是log4j,因爲這兩個API是非常不同的。您已經在代表當前文件夾的文件參數中有一個DOT(。)。您應該使用log4j2.properties而不是log4j.properties。 – VivekRatanSinha

回答

1

你實現不工作,因爲日誌已經之前已經開始你設置current.folder屬性。您有權訪問程序的main方法,或者這是一個基於容器的應用程序嗎?

如果您有權訪問main方法,則必須在創建第一個Logger實例之前確保您的第一件事是設置該屬性。

0

您可以嘗試實現自己的追加程序,如:

import org.apache.log4j.RollingFileAppender;  
public class CustomFileAppender extends RollingFileAppender { 

     public CustomFileAppender() { 
      super(); 
      String sCurrDir = System.getProperty("user.dir"); 
      int nLastBSlash = sCurrDir.lastIndexOf('/'); 
      System.setProperty("current.folder", sCurrDir.substring(nLastBSlash + 1)); 
     } 
    } 

配置log4j屬性/ xml文件爲:

<appender name="fileAppender" class="CustomFileAppender"> 
     <param name="Threshold" value="DEBUG" /> 
     <param name="append" value="true" /> 
     <param name="maxFileSize" value="10MB" /> 
     <param name="maxBackupIndex" value="50" /> 

     <param name="File" value="./log/${current.folder}-wcss-simulator-${current.date}.log"/> 

     <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS}\t %-5p\t [%X{ThreadId}]\t %X{MethodName}\t - %m%n" /> 
     </layout> 
    </appender> 
+0

我正在使用Log4j2,它無法識別RollingFileAppender。我如何修改代碼來工作?謝謝 – dushkin

+0

即使你使用log4j2,這個類也應該在那裏。我更新了代碼中的導入。請試試這個。 –

+0

沒有。它仍然顯示一個錯誤。我添加了log4j api 2.82和log4j core 2.8.2的依賴關係。那是對的嗎?另外,它提供了我將基類更改爲RollingFileManager。 – dushkin

相關問題