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

log4j2以编程方式更改滚动文件追加最大文件

颛孙子民
2023-03-14

我正在处理一个使用log4j2(使用log4j2.xml初始化参数)并加载记录器的应用程序。当应用程序运行时,我需要以编程方式重写一些参数,例如更改日志级别和滚动文件附加器属性。我可以使用以下方法更改日志级别:

/**
         * @param logger Logger instance
         * @param level New log level to be applied on the logger instance
         */
        private void setLoggerLevel(Logger logger, Level level) {
            LoggerContext context = (LoggerContext) LogManager.getContext(false);
            Configuration config = context.getConfiguration();
            LoggerConfig loggerConfig = getLoggerConfig(logger.getName());


            Logger rootLogger = LogManager.getRootLogger();
            if(logger !=  rootLogger && loggerConfig != config.getLoggerConfig(rootLogger.getName()))
            {
                loggerConfig.setLevel(level);
                context.updateLoggers();
            }
        }

现在我尝试使用RollingFile appender的属性来解决同样的问题。然而,我仍然停留在如何修改现有的RollingFile appender的属性上

Logger applicationLogger = LogManager.getLogger(logName);

if (applicationAppender instanceof RollingFileAppender) {

    // Configure max properties of rolling file appender here
    if (maxLogFiles != null) {

        LoggerContext context = (LoggerContext) LogManager.getContext(false);
        Configuration config = context.getConfiguration();
        // Copied code from lib
        DefaultRolloverStrategy newStrategy = DefaultRolloverStrategy.createStrategy(String.valueOf(maxLogFiles), null, null,
                String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);

        // How to modify the existing appender?

    }

}

共有1个答案

齐栋
2023-03-14

你走对了。创建新策略后,请执行以下操作:

Appender appender = config.getAppender("MyRollingFile");
if (appender != null && appender instanceof RollingFileAppender) {
    ((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
}

如果要修改所有RollingFileAppenders,请执行以下操作:

Map<String, Appender> appenders = config.getAppenders();
for (Appender appender : appenders.values()) {
    if (appender instanceof RollingFileAppender) {
        ((RollingFileAppender) appender).getManager().setRolloverStrategy(newStrategy);
    }
}
 类似资料:
  • 问题内容: 我想以编程方式从应用程序中加载Log4j2 XML配置文件。 试过这个: 还有这个: 但是什么都没有。 问题答案: 自己找到答案。有人可能会觉得有用。

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

  • 我的组织正在从Log4j1迁移到Log4j2。我们有一个自定义的滚动文件追加器,当应用程序中发生某个事件时,它会在运行时更改它记录到的文件名。这是为了便于在日志目录中查找日志文件而实现的。例如,日志文件目录可能如下所示; mylog-2021-08-02。日志 mylog-2021-08-03.log 特殊事件(mylog-2021-08-03)。日志 mylog-2021-08-04.log m

  • 在Java中,我动态地创建一组文件,我希望在Linux/UNIX文件系统中更改这些文件的文件权限。我希望能够执行的Java等价物。这可能是Java5吗?如果是,怎么做? 我知道在Java6中,对象有/方法。我也知道我可以通过一个系统调用来实现这一点,但如果可能的话,我希望避免这样做。

  • 问题内容: 在Java中,我正在动态创建一组文件,并且想更改文件系统上这些文件的文件许可权。我希望能够执行的Java等效项。那可能是Java 5吗?如果是这样,怎么办? 我知道在对象具有方法。我也知道我可以进行系统调用来做到这一点,但是如果可能的话,我想避免这种情况。 问题答案: 作为“新” New IO工具(NIO.2)的一部分,Java 7中提供了对文件属性的完全控制。例如,POSIX权限可以

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