Обработчик ведения журнала использует встроенную среду ведения журнала для регистрации своих сообщений, поэтому вы также можете изменить его назначение ведения журнала, используя такие вещи:
Logger log = Logger.getLogger(LoggingHandler.class.getName());
log.setUseParentHandlers(false);
log.addHandler(new FileHandler());
В то время как FileHandler
являетсяБыстрое решение для регистрации файлов, на самом деле это довольно раздражает в использовании, учитывая тот факт, что он принимает свои свойства ведения журнала (например, целевой файл) из системных свойств, а не через конструктор.
Так что это означает, что у вас естьнаписать свой собственный обработчик для записи вещей так, как вы хотите их записать:
Writer writer = Files.newBufferedWriter(FileSystems.getDefault().getPath("test.log"));
log.addHandler(new Handler() {
@Override
public void close() throws SecurityException {
synchronized (this) {
try {
writer.close();
} catch (IOException ex) {
// TODO: better error handling
ex.printStackTrace();
}
}
}
@Override
public void flush() {
synchronized (this) {
try {
writer.flush();
} catch (IOException ex) {
// TODO: better error handling
ex.printStackTrace();
}
}
}
@Override
public void publish(LogRecord record) {
// TODO: Format the logrecord better
String formatted = record.getLevel() + ": " + record.getMessage() + "\n";
synchronized (this) {
try {
writer.write(formatted);
} catch (IOException ex) {
// TODO: better error handling
ex.printStackTrace();
}
}
}
});