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

Log4j2删除旧日志不起作用

戚勇
2023-03-14

我正在尝试以编程方式配置log4j2v2。11.1作为DefaultRolloverStrategy的一部分,使用新的删除操作删除旧文件。

正如您可以从下面的代码中看到的,我已将系统设置为每天创建日志文件,并在文件大小达到1MB时滚动该文件。

我尝试使用两个条件将删除操作添加到DefaultRolloverStrategy中—IfFileName和IfLastModified。IfFileName指定文件名必须为app.*。日志和IfLastModified组件指定文件也必须有一天才能删除。

无论出于什么原因,这都不起作用。日志文件每天正确创建,并根据大小滚动,但不删除超过一天的文件。应用服务器日志中没有错误表明我在配置中犯了错误。

static Configuration createConfiguration(String name, ConfigurationBuilder<BuiltConfiguration> builder) {
    builder.setConfigurationName(name);
    LayoutComponentBuilder layoutBuilder  = builder.newLayout("PatternLayout").addAttribute("pattern", "%d [%t] %-5level: %msg%n");
    ComponentBuilder triggeringPolicy = builder.newComponent("Policies");
    triggeringPolicy.addComponent(builder.newComponent("TimeBasedTriggeringPolicy").addAttribute("interval", "1").addAttribute("modulate", "true"));
    triggeringPolicy.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size", "1 MB"));

    ComponentBuilder rolloverStrategy = builder.newComponent("DefaultRolloverStrategy");

    ComponentBuilder ifFileName = builder.newComponent("IfFileName").addAttribute("glob", "app.*.log");
    ComponentBuilder ifLastModified = builder.newComponent("IfLastModified").addAttribute("age", "1d");

    ComponentBuilder deleteAction = builder.newComponent("Delete").addAttribute("basePath", "C:\\applogs\\").addAttribute("maxDepth", "1");
    deleteAction.addComponent(ifFileName).addComponent(ifLastModified);

    rolloverStrategy.addComponent(deleteAction);

    AppenderComponentBuilder appenderBuilder = builder.newAppender("rolling", "RollingFile")
            .addAttribute("fileName", "C:\\applogs\\app.log")
            .addAttribute("filePattern", "C:\\applogs\\app_%d{yyyy-MM-dd}-%i.log")
            .add(layoutBuilder)
            .addComponent(triggeringPolicy)
            .addComponent(rolloverStrategy);
    builder.add(appenderBuilder);
    builder.add(builder.newRootLogger(Level.INFO).add(builder.newAppenderRef("rolling")).addAttribute("additivity", false));
    Configuration config = builder.build();
    Configurator.initialize(config);
    return config;
}

另一方面,如果我删除了delete操作的代码并添加了以下行,那么系统会正确地删除最旧的日志文件,并保留最新的三个日志文件。

ComponentBuilder rolloverStrategy = builder.newComponent("DefaultRolloverStrategy").addAttribute("max", "3");

知道为什么我的年龄删除设置不起作用吗?我尝试删除IfLastModify组件,以查看是否删除了所有文件,但这也不起作用。

提前感谢您可以提供的任何建议。

共有1个答案

百里胜泫
2023-03-14

如果有人偶然发现我的问题,我想提供一个答案。我没有对问题中列出的原始代码进行任何更改。但是,当由于触发时间或大小策略而发生滚动事件时,删除操作最终被触发。这导致基于上次修改日期的超过一天的日志文件被删除。

另一个注释。有人回答说,我应该打开log4j2调试,以便查看有关日志系统如何处理配置和文件滚动的内部详细信息。我的应用程序运行的应用服务器是JBoss,我注意到添加了log4j2。具有值跟踪的调试JVM参数未启用此内部日志记录。

相反,我没有设置如下所示的log4j2.debug参数的值。

-Dlog4j2.debug

当添加到单机版中的JAVA_OPTS变量时,这就实现了。JBoss中的bat脚本文件。

 类似资料:
  • 删除7天前的日志文件与log4j.xml 我正在尝试使用删除旧的日志文件,但它不起作用。 但是它在我的计算机上工作,但在Linux服务器上不工作。日志文件在Linux服务器上的存储路径是。 有人能帮忙吗。

  • 这是我的log4j2.yaml。现在,这个记录器在一天内创建一个文件,当这一天结束时,记录器将创建一个文件夹“归档”,并将旧的日志文件放在这个文件夹中。我需要删除7天前创建的所有旧日志。我做错了什么?请帮帮我

  • (F.Y.I.我已经在互联网上搜索了很多文档。我正在使用storm-0.10.0-beta1。storm中log4j2的配置文件是worker.xml) 现在,我尝试使用log4j2。 我正在寻找删除旧日志的方法,但我找不到。部分配置如下。 起初,我期望删除超过3天的日志文件。 但事实上,事实并非如此。 所以,我想知道是否有办法删除旧日志。 如果有一条路我还没有找到,请通知我。

  • 我使用下面的log4j2。xml 我想要的是旧的日志文件被删除,如果累积的大小超过。但是log4j2首先删除最近修改的文件。https://logging.apache.org/log4j/2.x/manual/appenders.html说有一个路径排序参数可以做到这一点。有人能告诉我如何指定相反的将逻辑排序为默认值?

  • 问题内容: 我正在尝试将 log4j 配置为仅保留指定数量的备份文件或保留不超过一定年龄的文件。最终,我希望有 时间(每天)基于触发策略, 并保留30个备份文件或删除早于30天的文件。 经过一些研究后,我了解到在使用 时间策略 时无法指定备份文件的最大数量,但是遇到了这个问题https://issues.apache.org/jira/browse/LOG4J2-435和此文档片段http: //

  • 我在SpringBoot中使用logback,但无法删除旧的日志文件。 我在logback-spring.xml文件中定义了以下appender: 即使我设置了“MaxHistory”和“CleanHistoryonStart”,超过10天的日志文件也不会被删除。既不是翻转也不是启动。