2

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

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

logback 能做到这一点吗?当日志记录暂停时,我应该避免在我的类中调用 Logger,还是 logback 可以处理这个?

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

我认为这意味着可以停止它们,以便我可以移动文件,但后来它继续:

如果 appender 无法启动或已停止,则会通过 logback 的内部状态管理系统发出警告消息。经过多次尝试,为了避免内部状态系统被相同警告消息的副本淹没,doAppend() 方法将停止发出这些警告。

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

4

1 回答 1

1

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

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

<configuration>
    <jmxConfigurator />
    ...

这暴露了ch.qos.logback.classic.jmx.JMXConfigurator具有名为 的操作的 bean reloadDefaultConfiguration。当我在运行时按下它时,日志文件会重新打开。请参阅下面的 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);

我要做的是将日志文件重命名为不同的名称,然后发出重新加载配置命令。然后可以在创建新文件后归档或删除重命名的文件。

希望这可以帮助。

在此处输入图像描述

于 2016-01-27T17:42:24.800 回答