Как создать файл журнала для каждой записи в определенном формате, используя среду ведения журнала утилит Java
Я хочу создать файл журнала для каждого запроса в формате ниже, используя ведение журнала Java.
YYYYMMDD_HHMMSS.log
Кто-нибудь, пожалуйста, дайте мне знать, как я могу добиться этого с помощью ведения журнала Java утилита?
1 ответ
FileHandler не поддерживает создание имен файлов по дате и времени из LogManager.
Если вы хотите сгенерировать имя файла при запуске, вы можете создать подкласс 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, вы должны создать собственный обработчик, который будет создавать и закрывать 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()));
}
}