当前位置: 首页 > 知识库问答 >
问题:

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

孙玺
2023-03-14

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

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

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

我使用slf4j。记录器当前。在手册中,我看到Appender对象实现了LifeCycle接口,这意味着它们实现了start()、stop()和isStarted()。

我以为这意味着可以停止它们,这样我就可以移动文件,但后来它发生了:

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

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

共有1个答案

汲品
2023-03-14

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

我不知道如何通过编程实现这一点,但如果您已将jmxConfigurator添加到日志中,则可以通过JMX实现这一点。xml配置文件。

<configuration>
    <jmxConfigurator />
    ...

这会公开ch.qos.logback.classic.jmx.JMXConfiguratorbean,其中有一个名为reloadDefaultConfiguration的操作。当我在运行时按下它时,日志文件会重新打开。请参阅下面的J控制台图像。这意味着jmx客户端(例如我的SimpleJMX库中的客户端)将能够从命令行执行此操作。

如果您试图从同一应用程序内部以编程方式调用它,那么您应该能够控制mbean并自己触发调用。这对我来说似乎很管用:

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

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

希望这有帮助。

 类似资料:
  • 问题内容: 我当时正在帮助一个朋友编写一些Java代码,而他们对Java并不了解很多。因此,我给他写了一些辅助函数,以轻松地完成在他眼中有些古怪的事情。其中一个函数是将String写入的函数。看一看: 现在,您可以轻松地以各种方式使用它,在任何地方书写。例如,您可以这样做: 这样做后,我发现之后不再向外壳写入任何内容。所以我认为也许也会自动关闭,我想知道如何重新激活它,以便在该功能再次完成后可以使

  • 我使用在文件中配置的logback来管理应用程序的日志。我想: 创建日志文件,这些日志文件在应用程序启动时贴上时间戳,并在应用程序的生命周期内作为单个日志文件保留。(我们可能同时运行一个应用程序的多个实例,或者在一天内运行多个实例,它们可能会运行几天。) 保持干净的日志文件目录,以便删除超过给定期间的日志。 实现第二个建议使用和,如下所示--这将日志文件保存7天。但是,这将使用一个文件来记录给定日

  • 问题内容: 我有一个多线程控制台应用程序,它从两个不同的来源获取输入。一种是用户在控制台中键入内容,另一种是网络。我使用BufferedReader.readline()从用户那里获取输入,并且该输入被阻止,这很好,除非在等待时收到网络输入。在那种情况下,我需要通过取消readline()来解除对用户线程的阻塞。 我想最好的取消方法是关闭System.in并使readline()抛出异常。在那之后

  • 本文向大家介绍详解C#打开和关闭可执行文件,包括了详解C#打开和关闭可执行文件的使用技巧和注意事项,需要的朋友参考一下 一、打开程序 先介绍System.Diagnostics.Process类:用来启动和停止进程的。 还可以简单点:Process的静态方法Start(); 二、以刚才的QQ为例,进行解释 1、 2、 这个方法是有点耗资源,还有没有if判断就全部kill了,可以尝试进行使用。 三、

  • 目前,我的Spring-boot应用程序日志到一个名为:的文件,这是按预期工作,但是我希望日志文件在其末尾有一个,并在每次运行时创建一个新文件。 我尝试在<code>logback测试中实现这一点。xml文件如下所示,但它只是给出了文件名:myLog。没有时间戳的日志。 我该如何解决这个问题? 日志回测.xml:

  • 在关机时尝试手动翻转,而不使用DelayingShutdownHook,这最终会创建一个。tmp文件,并且不会干净地完成翻转过程。 添加延迟1分钟的延迟关机钩子,但似乎logback compress的asyncCompress方法返回一个在30秒后超时的未来,因此我得到以下错误 我别无选择。有人知道如何实现我在这里寻找的东西吗?