我正在与昨天的一些事情作斗争。
我想在java中记录一个webapp(WAR)。
我创建一个日志,附加一个 FileHandler,然后发送日志消息。但是,就像我们都知道的那样,文件处理程序会一直锁定新文件,直到我调用 fush() 和 close(),所以,当我重新部署战争时(或者如果我在开发中运行它,我会继续部署应用程序)它每次部署创建一个文件(丑陋)。
所以,我试图避免这种行为,(我不确定它是否是通过这种方式完成的,也许每次打开和关闭文件都很昂贵,我不确定)但我想附加处理程序并刷新/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:但是在重新部署战争时,我调用了记录器类,它创建了一个新的记录器,但最后一个保持关闭。这就是困扰我的事情(我认为)