我想使用java util logging以下面的格式爲每個請求創建日誌文件。如何使用java util日誌記錄框架爲特定格式的每條記錄創建日誌文件
YYYYMMDD_HHMMSS.log
有人請讓我知道我該如何使用java util logging來實現這一點?
我想使用java util logging以下面的格式爲每個請求創建日誌文件。如何使用java util日誌記錄框架爲特定格式的每條記錄創建日誌文件
YYYYMMDD_HHMMSS.log
有人請讓我知道我該如何使用java util logging來實現這一點?
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()));
}
}
非常感謝。它解決了我的問題。 –
根據哪個要求?你有使用日誌記錄可以看到的現有代碼嗎? – user1277546
請詳細解釋 –
我有一個獨立的SE應用程序。當我每次想根據時間格式創建不同的日誌文件時,執行該應用程序。 –