Как избежать и контролировать приращение файлов app.log.X в JAVA LOGGIN
Я борюсь с чем-то со вчерашнего дня.
Я хочу войти в веб-приложение (WAR) в Java.
Я создаю журнал, добавляю FileHandler и отправляю сообщения журнала. Но, как все мы знаем, обработчик файлов сохраняет блокировку над новым файлом до тех пор, пока я не вызову fush() и close(), поэтому, когда я повторно развертываю войну (или если я запускаю ее в разработке, и я постоянно развертываю приложение) создает один файл за развертывание (безобразно).
Итак, я пытался избежать этого поведения (я не уверен, что это делается с помощью производительности, может быть, открывать и закрывать файл каждый раз дорого, я не уверен), но я хочу подключить обработчик и очистить / закрывать каждый раз, когда Logger регистрирует сообщение. (Так что у меня есть только один файл).
Но я не могу найти способ сделать это. Я пытаюсь расширить класс java.util.Logger, и это очень сложно... (и против этого некоторые люди).
Кто-то знает, как я могу подойти к этой ситуации?
Заранее спасибо!
public class LogUtil {
public static String name = "app%g.log";
public static Logger obtenerLogger(String eid, String path, Level levelToLog) {
Logger logger = Logger.getLogger(eid);
if (levelToLog != null) {
logger.setLevel(levelToLog);
}
//I create the folder if not exist
File dirFile = new File(path);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
//I remove the handlers and close after each logg call (doing this i can use the same file lof after log)
for (Handler handler : logger.getHandlers()) {
logger.removeHandler(handler);
handler.close();
handler.flush();
}
//I Create the FileHandler
FileHandler f;
try {
f = new FileHandler(
path + name, //pattern
10485760, //limit
3, // count
true); //append
//f.setFormatter(new SimpleFormatter());
f.setFormatter(new MyFormatter());
f.setLevel(levelToLog);
} catch (Exception ex) {
return null;
}
logger.addHandler(new ConsoleHandler());
logger.addHandler(f);
return logger;
}
PD1: Но при повторном развертывании войны я вызываю класс логгеров, он создает нового логгера, но последний остается открытым. И это то, что беспокоит меня (я думаю)
2 ответа
Ответ здесь: Как создать файл журнала для каждой записи в определенном формате, используя среду ведения журнала утилит Java
Я должен расширить обработчик и переопределить метод публикации. (Я пытался реализовать класс Logger для закрытия после каждого вызова журнала. НЕ ДЕЛАЙТЕ ЭТО! Jeje).
Спасибо за ваш интерес!
Я создаю журнал, добавляю FileHandler и отправляю сообщения журнала. Но, как все мы знаем, обработчик файлов сохраняет блокировку над новым файлом до тех пор, пока я не вызову fush() и close(), поэтому, когда я повторно развертываю войну (или если я запускаю ее в разработке, и я постоянно развертываю приложение) создает один файл за развертывание (безобразно).
Если вы программно настраиваете дерево логгеров и обработчик, вы должны реализовать собственный ServletContextListener и зарегистрировать его в своем веб-приложении. Вот пример.
Также убедитесь, что вы держите сильную ссылку на ваши регистраторы