我正在使用log4j2 beta 4.正确设置log4j2.xml,一切正常。但我需要在运行时更改appender。从xml中定义的控制台到具有特定文件位置的RollingFileAppender。
我正在努力处理文档并无处可去。有谁解决了这个问题?
答案 0 :(得分:0)
您可以编写一个代码,该代码将在您的应用启动时调用,并且您可以从根记录器列表中删除appender。
它是这样的。我不太确定。
Logger.getRootLogger().removeAppender("stdout")
我可以查看log4j.properties文件吗?
答案 1 :(得分:0)
可能涉及到谁。
创建自定义appender作为插件(基本上是RollinfFileAppender的副本),它给了我改变文件位置的机会。并创建了RootLogger(再次作为插件),它给了我改变日志级别的机会,并根据服务器在sysout和文件之间切换。
现在听起来很简单: - )
答案 2 :(得分:0)
使用log4j2.xml文件中系统属性定义的文件名/文件路径定义记录器。
<appenders>
<File name="MyFile" fileName="${sys:logFilename}.log">
<PatternLayout pattern="%d{${datestamp}} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
在您的程序中,从用户输入中读取文件名,使用您在配置文件中用于文件名的密钥将其保存到系统属性。更新上下文以重新加载配置文件。 - &GT;文件名是在运行时动态创建的。
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();