如何基于程序触发器推出新的日志文件?

时间:2018-06-18 17:06:00

标签: java logging log4j

我想以编程方式决定推出新的日志文件。

我的应用程序呼叫远程服务,每次打电话时都会发送大量邮件。

我想在每次远程呼叫时将此消息记录到日志文件中,例如msg.0.logmsg.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.");
        }  

2 个答案:

答案 0 :(得分:0)

我实现了自定义附加程序,

让我解释一下,每条日志消息都会通过publish内部的FileHandler方法进行处理。

因此,从理论上讲,如果我们实现可以实用地翻转的触发器,那么我们可以在需要时切换文件。

执行以下简单步骤,它将起作用,

  1. 根据需要创建自定义类名称。
  2. FileHandler复制代码并放入我们的课程。
  3. 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文件名。