我正在处理一个使用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?
}
}
你走对了。创建新策略后,请执行以下操作:
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代码发出信号: 自定义插件: