代码之家  ›  专栏  ›  技术社区  ›  JBaba

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

  •  0
  • JBaba  · 技术社区  · 8 年前

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

    我的应用程序调用了远程服务,每次我调用它们时,它都会发送大量消息。

    我想将此消息记录到日志文件中,如 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.");
    }  
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   JBaba    7 年前

    我实现了自定义appender,

    让我解释一下,每个日志消息都会通过 publish 中存在的方法 FileHandler

    所以在理论上,如果我们实现了触发器,它实际上可以被翻转,那么我们可以在需要的时候切换文件。

    执行以下简单步骤即可,

    1. 创建您想要的自定义类名。
    2. 从复制代码 文件处理程序 并投入到我们的课堂中。
    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;
        }
    } 
    

    谢谢

        2
  •  -1
  •   Sergei Podlipaev    8 年前

    考虑使用 observer 设计模式。每次远程呼叫后,发送内部通知并更改日志。处理时输出文件名。