我可以在运行时使用logback关闭并重新打开日志文件吗?

时间:2013-05-31 12:11:56

标签: java file slf4j logback

我是新手。我非常着迷,但我不确定它是否适合我的用例。

我想要一个可以停下来开始的记录器。当它被停止时,我想从文件系统中删除日志文件。重新启动日志记录时,应重新创建文件。

这是否具有logback功能?暂停日志记录时,我应该避免在我的类中调用Logger,还是可以使用logback来处理它?<​​/ p>

我目前使用的是slf4j.Logger。在manual我看到了Appender objects implement the LifeCycle interface, which implies that they implement start(), stop() and isStarted()

我认为这意味着他们可以停止,所以我可以移动文件,但稍后就可以了:

  

如果appender无法启动或已停止,a   警告消息将通过logback的内部状态发出   管理系统。经过多次尝试,以避免泛滥   内部状态系统包含相同警告消息的副本,   doAppend()方法将停止发出这些警告。

这是否意味着我可以阻止它,然后删除文件,然后重启?

1 个答案:

答案 0 :(得分:0)

  

我想要一个可以停下来开始的记录器。当它被停止时,我想从文件系统中删除日志文件。重新启动日志记录时,应重新创建文件。

我不确定如何以编程方式完成此操作但如果您已将jmxConfigurator添加到logback.xml配置文件,则可以通过JMX完成此操作。

<configuration>
    <jmxConfigurator />
    ...

这会公开具有名为ch.qos.logback.classic.jmx.JMXConfigurator的操作的reloadDefaultConfiguration bean。当我在运行时按下它时,会重新打开日志文件。请参阅下面的Jconsole图像。这意味着jmx客户端(例如SimpleJMX中的客户端)可以从命令行执行此操作。

如果你是从同一个应用程序内部以编程方式尝试它,那么你应该能够获得mbean并自己触发调用。似乎对我有用的东西:

ManagementFactory.getPlatformMBeanServer().invoke(new ObjectName(
    "ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator"),
    "reloadDefaultConfiguration", null, null);

我要做的是将日志文件重命名为其他名称,然后发出reload configuration命令。然后,可以在创建新文件后归档或删除重命名的文件。

希望这有帮助。

enter image description here