【问题标题】:How to Rollout new log file based on programmatic trigger?如何基于编程触发器推出新的日志文件?
【发布时间】:2018-06-18 17:06:00
【问题描述】:

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

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

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

【问题讨论】:

  • log4j和log4j2不一样,你实际用的是哪一个?
  • @D.B.我删除了 log4j2 标签。我只使用 log4j
  • 感谢您的更新,您是否有机会升级到 log4j2 或者您需要使用 log4j?
  • @D.B.项目只有 log4j 依赖。我现在做不到(未来的环境升级我们可以考虑)
  • @D.B.截至目前,我的问题是我们能否实现可以支持此类活动的新文件处理程序?

标签: java logging log4j


【解决方案1】:

我实现了自定义追加器,

让我解释一下每条日志消息都通过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;
    }
} 

谢谢。

【讨论】:

    【解决方案2】:

    考虑使用observer 设计模式。每次远程调用后发送内部通知并在处理时更改您的 log.output 文件名。

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 2016-06-05
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多