我是新手。我非常着迷,但我不确定它是否适合我的用例。
我想要一个可以停下来开始的记录器。当它被停止时,我想从文件系统中删除日志文件。重新启动日志记录时,应重新创建文件。
这是否具有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()方法将停止发出这些警告。
这是否意味着我可以阻止它,然后删除文件,然后重启?
答案 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命令。然后,可以在创建新文件后归档或删除重命名的文件。
希望这有帮助。