当前位置: 首页 > 知识库问答 >
问题:

log4j2:如何强制滚动文件附加器滚动?

雷锋
2023-03-14

据我所知,log4j2中的RollingFileAppender不会在指定的时间(比方说-在一小时结束时)回滚,而是在超过时间阈值后到达的第一个日志事件时回滚。

有没有一种方法可以触发一个事件,一方面会导致文件滚动,另一方面不会附加到日志中(或者会附加一些无关紧要的东西,比如空字符串)?

共有3个答案

林念
2023-03-14

如果您可以访问Object RollingFileAppender,您可以执行以下操作:

rollingFileAppender.getManager().rollover();

在这里您可以看到经理类:

https://github.com/apache/logging-log4j2/blob/d368e294d631e79119caa985656d0ec571bd24f5/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java

锺离嘉容
2023-03-14

按照Remko的想法,我写了下面的代码,它正在工作。

package com.stony;

import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.rolling.*;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;

@Plugin(name = "ForceTriggerPolicy", category = "Core")
public class ForceTriggerPolicy implements TriggeringPolicy {
private static boolean isRolling;

@Override
public void initialize(RollingFileManager arg0) {
    setRolling(false);
}

@Override
public boolean isTriggeringEvent(LogEvent arg0) {
    return isRolling();
}

public static boolean isRolling() {
    return isRolling;
}

public static void setRolling(boolean _isRolling) {
    isRolling = _isRolling;
}

@PluginFactory
public static ForceTriggerPolicy createPolicy(){
    return new ForceTriggerPolicy();
}

}
冯枫
2023-03-14

不,没有任何(内置)方法可以做到这一点。没有后台线程监视滚动时间。

编辑:您可以创建一个实现org的log4j2插件。阿帕奇。登录中。log4j。果心阿佩德。滚动的。TriggeringPolicy(有关示例代码,请参阅内置的基于时间的TriggeringPolicy和SizeBadeTriggeringPolicy类。)

如果配置自定义触发策略,log4j2将检查每个日志事件是否应触发滚动(因此在实现isTriggeringEvent方法时要小心,以免影响性能)。请注意,要获取自定义插件,需要在log4j2的Configuration元素的packages属性中指定类的包。xml文件。

最后,如果这对您很有效,并且您认为您的解决方案对其他人也很有用,请考虑将您的自定义触发策略贡献回log4j2代码库。

 类似资料:
  • 有办法得到滚动文件名吗?我写了自定义插件,信号文件滚动,但我需要得到滚动文件的文件名。我的插件从java代码发出信号: 自定义插件:

  • 我使用log4j2并试图日志与对数旋转。具体来说,我想以10MB的最大大小登录,并无限制地旋转。下面的配置生成3代滚动文件,因为“DefaultRolloverStrategy max”设置为3。你能指导我如何在最大10MB的大小下记录无限数量的文件吗?

  • 日志似乎会正常滚动和存档,但在指定的触发器时间或附近,我注意到tomcat catalina.out中出现了一个异常(有时一次,其他时候它以每秒1次的速度泛洪日志)。感谢任何帮助。 null null

  • 这是我的log4j2.xml 我想实现每小时滚动的每日滚动文件,到目前为止,我还没有能够产生适当格式的日志,正如我所记得的,间隔参数似乎是按天而不是按小时递增。 我想实现这一点: 路由器。日志-- 路由器。日志2014-06-20-00 路由器。日志2014-06-20-01 ... 路由器。日志2014-06-20-23 路由器。日志2014-06-21-00 ... 相反,我做到了这一点: r

  • 问题内容: 我试图将滚动条附加到“文本”字段,但无法这样做。这是代码段: 这段代码在我的文本字段旁边放置了一个非常小的滚动条(并且非常小,我的意思是您可以看到向上和向下箭头,但中间没有看到)。当文本字段填满时,我可以使用它滚动,但是至少有一种方法可以设置滚动条的高度,以使其看起来与文本字段的高度相同吗? 问题答案: Tkinter具有三个 几何管理器 :包装,网格和位置。 通常建议将包装和网格放在

  • 我正在使用log4j2和滚动appender文件。我想使用自定义布局,但它不能正常工作。 我在JBoss工作。我已将具有cusotmize布局的lib放在libs目录中,因此它位于类路径中。 在log4j2.xml,我已经把以下配置: 但是没有正确记录! 提前谢谢 贾米拉