我初始化記錄是這樣的:Java的日誌格式是復位
public static void init() {
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new LogFormatter());
Logger.getLogger(TrackerConfig.LOGGER_NAME).setUseParentHandlers(false);
Logger.getLogger(TrackerConfig.LOGGER_NAME).addHandler(handler);
}
的LogFormatter的格式功能:
@Override
public String format(LogRecord record) {
StringBuilder sb = new StringBuilder();
sb.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").format(new Date(record.getMillis())))
.append(" ")
.append(record.getLevel().getLocalizedName()).append(": ")
.append(formatMessage(record)).append(LINE_SEPARATOR);
return sb.toString();
}
使用的日誌我用下面的方法:
private static void log(Level level, String message) {
Logger.getLogger(TrackerConfig.LOGGER_NAME).log(level, message);
if (level.intValue() >= TrackerConfig.DB_LOGGER_LEVEL.intValue()) {
DBLog.getInstance().log(level, message);
}
}
DBLog.log方法:
public void log(Level level, String message) {
try {
this.logBatch.setTimestamp(1, new Timestamp(Calendar.getInstance().getTime().getTime()));
this.logBatch.setString(2, level.getName());
this.logBatch.setString(3, message);
this.logBatch.addBatch();
} catch (SQLException ex) {
Log.logError("SQL error: " + ex.getMessage()); // if this happens the code will exit anyways so it will not cause a loop
}
}
現在正常的日誌輸出看起來像這樣:
2013年4月20日18時00分59秒+0200信息:啓動跟蹤
它工作了一段時間,但LogFormatter似乎因爲任何原因被重置。
有時只有一個日誌條目正確顯示,之後顯示類似的日誌條目:
2013年4月20日下午6時01分01秒package.util.Log登錄INFO:
加載了33266個數據庫條目。
再次。
我試了一下:
對於調試目的,我補充說,每輸出x秒JVM的內存使用一個線程。 輸出與正確的日誌格式,直到更改了保留的內存值的工作(空閒內存值的變化並沒有清除日誌格式)是這樣的:
二零一三年四月二十零日十八時16分24秒+0200警告:內存使用:23 /二百二十七分之七十四MIB
2013年4月20日18點16分25秒0200警告:內存使用:20支/二百二十七分之七十四MIB
2013年4月20日18:16: 26 +0200警告:內存使用情況:18/74/227 MiB
2013年4月20日6:16:27 package.util.Log log警告:
內存使用69/96/227 MIB
2013年4月20日下午6時16分27秒package.util.Log登錄INFO:
調度運行
2013年4月20日6 :16:27 PM package.Log日誌警告:
內存使用67/96/227 MIB
還要注意的是,日誌級別似乎到b在此處將警告重置爲信息。
那裏的問題似乎是:
當我註釋掉這樣的數據庫日誌功能:
private static void log(Level level, String message) {
Logger.getLogger(TrackerConfig.LOGGER_NAME).log(level, message);
if (level.intValue() >= TrackerConfig.DB_LOGGER_LEVEL.intValue()) {
// DBLog.getInstance().log(level, message);
}
}
的日誌格式正確。
任何想法什麼可能是錯誤的DBLog的日誌功能或爲什麼日誌突然重置?