1

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

我在文档方面苦苦挣扎,却一无所获。有人解决了这个问题吗?

4

3 回答 3

0

您可以编写一个代码,该代码将在您的应用程序启动时调用,然后您可以从根记录器列表中删除附加程序。

它是这样的。我不太确定。

Logger.getRootLogger().removeAppender("stdout")

我可以看看 log4j.properties 文件吗?

于 2013-02-16T12:39:32.120 回答
0

敬启者。

创建自定义附加程序作为插件(基本上是 RollinfFileAppender 的副本),这给了我更改文件位置的机会。并创建了 RootLogger(再次作为插件),它让我有机会更改日志级别并根据服务器在 sysout 和文件之间切换。

现在听起来很容易:-)

于 2013-02-17T17:28:58.160 回答
0

使用 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();
于 2013-03-08T23:47:44.323 回答