如何在运行时创建RollingFileAppender(Web应用程序侦听器)并替换在配置xml中定义的ConsoleApender

时间:2013-02-16 12:14:20

标签: java log4j2

我正在使用log4j2 beta 4.正确设置log4j2.xml,一切正常。但我需要在运行时更改appender。从xml中定义的控制台到具有特定文件位置的RollingFileAppender。

我正在努力处理文档并无处可去。有谁解决了这个问题?

3 个答案:

答案 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();