2013-12-10 110 views
0

我想使用java util logging以下面的格式爲每個請求創建日誌文件。如何使用java util日誌記錄框架爲特定格式的每條記錄創建日誌文件

YYYYMMDD_HHMMSS.log 

有人請讓我知道我該如何使用java util logging來實現這一點?

+0

根據哪個要求?你有使用日誌記錄可以看到的現有代碼嗎? – user1277546

+0

請詳細解釋 –

+0

我有一個獨立的SE應用程序。當我每次想根據時間格式創建不同的日誌文件時,執行該應用程序。 –

回答

1

FileHandler不支持從LogManager生成date and time的文件名。

如果您想在啓動時生成文件名,您可以繼承FileHandler並創建一個靜態方法來使用SimpleDateFormat生成文件名。 LogManager支持'config'選項,它還允許您安裝自定義代碼來設置和安裝FileHandler。

public class RollingFileHandler extends FileHandler { 

    public RollingFileHandler() throws IOException { 
     super(fileName(), 0, 1, true); 
    } 

    private static String fileName() { 
     return new SimpleDateFormat("'%h'yyyyMMdd_HHmmss").format(new Date(System.currentTimeMillis())); 
    } 
} 

如果你想生成每個每個的LogRecord一個文件名,你必須創建一個自定義Handler將創建並在每個發佈關閉的FileHandler。

public class DatedFileHandler extends Handler { 

    @Override 
    public synchronized void publish(LogRecord r) { 
     if (isLoggable(r)) { 
      try { 
       FileHandler h = new FileHandler(fileName(r), 0, 1, true); 
       try { 
        h.setLevel(getLevel()); 
        h.setEncoding(getEncoding()); 
        h.setFilter(getFilter()); 
        h.setFormatter(getFormatter()); 
        h.setErrorManager(getErrorManager()); 
        h.publish(r); 
       } finally { 
        h.close(); 
       } 
      } catch (IOException | SecurityException jm) { 
       this.reportError(null, jm, ErrorManager.WRITE_FAILURE); 
      } 
     } 
    } 

    @Override 
    public void flush() { 
    } 

    @Override 
    public void close() { 
     super.setLevel(Level.OFF); 
    } 

    private String fileName(LogRecord r) { 
     return new SimpleDateFormat("'%h'yyyyMMdd_HHmmss").format(new Date(r.getMillis())); 
    } 
} 
+0

非常感謝。它解決了我的問題。 –