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

Log4j2自动滚动调度程序

涂飞航
2023-03-14

如何配置log4j2,使其每30秒翻转一次?

例如,如果今天是2019-01-09 09:45:00,我通过命令将数据写入日志文件

log.info("test")

10分钟内没有更多数据进入日志,但我需要2019-01-09 09 09:45:30 30 30秒后自动翻转日志文件。

如果我这样配置log4j2:

<RollingFile name="RollingFile">
  <FileName>C:/log/mylog.log</FileName>
  <FilePattern>C:/log/time-based-logs/%d{yyyy-MM-dd-hh-mm}.log.zip</FilePattern>
  <PatternLayout>
    <Pattern>%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n</Pattern>
  </PatternLayout>
  <Policies>
    <TimeBasedTriggeringPolicy interval="2" modulate="true" />
  </Policies>
  <DefaultRolloverStrategy max="5" />
</RollingFile>

我必须通过命令写入日志数据

log.info("test1")      // 2019-01-09 09:55:00

然后在10分钟后滚动文件,但我需要每30秒,甚至不再将数据写入日志。

我该怎么做呢?

我为我糟糕的英语道歉。

共有2个答案

南门洋
2023-03-14

我想到了这个选择

public class Utils {
public static void rollover(LoggerContext loggerContext) {
    Map<String, Appender> appendersByName = loggerContext.getConfiguration().getAppenders();

    appendersByName.values().forEach(appender -> {
        if (appender instanceof RollingFileAppender) {
            ((RollingFileAppender) appender).getManager().checkRollover(new RolloverLogEvent());
        }
    });
}
}

@Plugin(name = "OnTriggeringPolicy", category = "Core", printObject = true)
public class OnCustomTriggeringPolicy implements TriggeringPolicy {

private RollingFileManager manager;

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

@Override
public void initialize(RollingFileManager manager) {
    this.manager = manager;
}

@Override
public boolean isTriggeringEvent(LogEvent logEvent) {

    return manager.getFileSize() > 0;
}
}
单于扬
2023-03-14

使用RollingFileAppenderhttps://logback.qos.ch/manual/appenders.html#RollingFileAppender

和TimeBasedRollingPolicyhttps://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy

但这允许你将颗粒细化到每分钟(以及每秒钟,但不是30秒)。

如果这还不够,请编写自己的自定义滚动策略https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/RollingPolicy.html

或者只是扩展TimeBasedRollingPolicy以包含其他功能https://logback.qos.ch/apidocs/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.html

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

  • 我有一个使用log4j1的应用程序。我在log4j.properties中的配置工作正常,它为日志创建文件。 我迁移到log4j2,现在没有创建文件,尽管我遵循了文档。我在这里尝试了所有不同的解决方案,但我无法实现。 这是我的应用程序中的log4j2.xml内部资源 这是我pom.xml的依赖 我厌倦了用完整路径更改文件的路径,在权限问题时更改文件夹。 我没有任何错误,但是当应用程序运行时,我看不

  • 我阅读了log4j2的官方文档,并得到了一个关于RollingFileAppender的问题。 文件上是这么说的: 下面是一个示例配置,它使用基于时间和大小的触发策略的RollingFileAppender,将在同一天(1-100)创建多达100个存档,这些存档存储在基于当前年份和月份的目录中,并将压缩每个存档使用gzip并将每小时滚动一次。在每次翻转期间,此配置将删除与"/app.log.gz"

  • 我正在编写一个将以编程方式创建log4j2配置的程序。我在log4j2.xml文件中有一个默认配置。基于列表中的某些数据类型,我必须为每种类型创建/复制log4j配置。配置是为这些类型复制的dailyrolling appender。创建记录器配置,根据数据类型将日志消息写入不同的文件。但每天的滚动并没有发生。 下面是基于数据类型生成log4j配置的代码。如果我需要更改为基于尺寸的滚动,也可以帮助

  • 我在研究这个问题时发现的几乎所有内容都是针对Log4J1.x的,并讨论了一个似乎在2.0中不存在的datePattern参数。 下面是我的log4j2.xml文件: 我正在将信息和以上内容写入日志文件,并将调试写入控制台(目前)。这些文件被写得很好,但它们似乎每天都在滚动(这似乎是默认的)。

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