簡體   English   中英

如何讓log4j在啟動時清除日志?

[英]How do I make log4j clear a log at startup?

我希望只要應用程序正在運行就會滾動日志,但我希望在重新啟動應用程序時重新啟動日志。

更新:根據erickson的反饋,我的appender看起來像這樣:

   <appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
      <param name="File" value="my-server.log"/>
      <param name="Append" value="false" />
      <param name="MaxFileSize" value="10MB"/>
      <param name="MaxBackupIndex" value="10"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern"
            value="%d{ISO8601} %p - %t - %c - %m%n"/>
      </layout>
   </appender>

我只是添加了以下行:

<param name="Append" value="false" />

它現在在啟動時截斷基本日志文件,但它會單獨保留已滾動的文件。

如果將append參數設置為false ,則在應用程序重新啟動時,基本日志文件將“重新啟動”。 你的意思是你想要刪除任何“滾動”的日志文件嗎?

我已經編寫了一些自定義代碼來查找我的RollingFileAppender (在log4j中訪問它是不必要的!)然后我將其翻轉。 我已將我的代碼改編為一次使用。 我在應用程序啟動時使用與此類似的代碼來強制我的日志滾動(如果非空)所以我總是從一個新的日志開始,但從不刪除任何日志,但最舊的日志。

此代碼使用給定的Logger並循環記錄器層次結構,直到找到附加了Appender的Logger。 如果它永遠不會,那么它就會放棄。 如果是,它會遍歷連接到該Logger的所有Appender,並且對於每個作為RollingFileAppender的Appender,它會強制日志滾動。

在log4j中,這樣的東西應該更容易做,但我還沒有找到一種更簡單的方法。

public void rollLogFile(Logger logger) {
  while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
    logger = (Logger)logger.getParent();
  }

  if (logger == null) {
    return;
  }

  for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
    final Appender appender = (Appender)e2.nextElement();
    if (appender instanceof RollingFileAppender) {
      final RollingFileAppender rfa = (RollingFileAppender)appender;
      final File logFile = new File(rfa.getFile());
      if (logFile.length() > 0) {
        rfa.rollOver();
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM