我正在使用 log4j2 beta 4。log4j2.xml 设置正确,一切正常。但我需要在运行时更改附加程序。从 xml 中定义的控制台到具有特定文件位置的 RollingFileAppender。
我在文档方面苦苦挣扎,却一无所获。有人解决了这个问题吗?
您可以编写一个代码,该代码将在您的应用程序启动时调用,然后您可以从根记录器列表中删除附加程序。
它是这样的。我不太确定。
Logger.getRootLogger().removeAppender("stdout")
我可以看看 log4j.properties 文件吗?
敬启者。
创建自定义附加程序作为插件(基本上是 RollinfFileAppender 的副本),这给了我更改文件位置的机会。并创建了 RootLogger(再次作为插件),它让我有机会更改日志级别并根据服务器在 sysout 和文件之间切换。
现在听起来很容易:-)
使用 log4j2.xml 文件中的系统属性定义的文件名/文件路径定义记录器。
<appenders>
<File name="MyFile" fileName="${sys:logFilename}.log">
<PatternLayout pattern="%d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
在您的程序中,从用户输入中读取文件名,使用您在配置文件中为文件名使用的密钥将其保存到系统属性中。更新上下文以重新加载配置文件。--> 文件名是在运行时动态创建的。
String filnameInput = "GetInputLikeYouWantIt";
System.setProperty("logFilename", filnameInput);
//update the Logger context to relead the filename with the lookup
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
ctx.reconfigure();