我想以编程方式决定推出新的日志文件。
我的应用程序呼叫远程服务,每次打电话时都会发送大量邮件。
我想在每次远程呼叫时将此消息记录到日志文件中,例如msg.0.log
和msg.1.log
。
我的应用程序确实基于file size
滚动,但我如何基于自定义通知实现滚动。
Logger logger = Logger.getLogger(RolllingLogs.class.getName());
try {
//
// Creating an instance of FileHandler with 5 logging files
// sequences.
//
FileHandler handler = new FileHandler("myapp.log", 1024, 5, true);
handler.setFormatter(new SimpleFormatter());
logger.addHandler(handler);
logger.setUseParentHandlers(false);
logger.info("Logging information message.");
logger.warning("Logging warning message.");
} catch (IOException e) {
logger.warning("Failed to initialize logger handler.");
}
答案 0 :(得分:0)
我实现了自定义附加程序,
让我解释一下,每条日志消息都会通过publish
内部的FileHandler
方法进行处理。
因此,从理论上讲,如果我们实现可以实用地翻转的触发器,那么我们可以在需要时切换文件。
执行以下简单步骤,它将起作用,
FileHandler
复制代码并放入我们的课程。Publish
方法进行了以下更改。代码
@Override
public synchronized void publish(LogRecord record) {
if (!isLoggable(record)) {
return;
}
super.publish(record);
flush();
// `changeFile` variable is declared by me
// whenever i set true for this variable
// new log file will be created
if (limit > 0 && changeFile) {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
@Override
public Object run() {
rotate();
return null;
}
});
// once log file is created turn the flag back to false.
changeFile = false;
}
}
谢谢。
答案 1 :(得分:-1)
考虑使用observer设计模式。每次远程调用后发送内部通知并在处理时更改log.output文件名。