gpt4 book ai didi

slf4j - 如何在 Dropwizard 服务关闭时强制进行日志轮换?

转载 作者:行者123 更新时间:2023-12-05 07:57:14 25 4
gpt4 key购买 nike

我的服务每小时都有一个日志。事件日志文件是 service.log 。存档文件名类似于 service-2014-12-15-03.log.gz但是,如果我在 10:59 停止服务并在 11:01 开始,该服务将继续写入 service.log 并且只会在 11:59 进行轮换并拥有 service-2014-12-15-11.log .gz 包含 2 小时的日志。我想在服务关闭时强制执行日志轮换。

我认为我的问题由 3 个部分组成:

  1. 如何 Hook 到 Dropwizard 服务的关闭?
  2. 如何访问 Logback 实例(我在这里可能完全错了)?
  3. 如何强制日志轮换?

我用 Google 搜索了几个小时,但没有找到任何答案。我还查看了 GitHub 上的 Dropwizard 源代码。

请帮忙。我使用的是 Dropwizard 0.6.2,但如果 0.7.x 中存在解决方案,我可以升级

====更新====

main 方法中的关闭钩子(Hook)有效。托管对象停止也有效。仅供引用,托管对象在关闭 Hook 后停止调用。

^Cshutdown Hook called
INFO [2014-12-17 20:35:07,861] org.eclipse.jetty.server.Server: Graceful shutdown SocketConnector@0.0.0.0:9051
INFO [2014-12-17 20:35:07,862] org.eclipse.jetty.server.Server: Graceful shutdown InstrumentedBlockingChannelConnector@0.0.0.0:9050
INFO [2014-12-17 20:35:07,863] org.eclipse.jetty.server.Server: Graceful shutdown o.e.j.s.ServletContextHandler{/,null}
INFO [2014-12-17 20:35:07,864] org.eclipse.jetty.server.Server: Graceful shutdown o.e.j.s.ServletContextHandler{/,null}
INFO [2014-12-17 20:35:09,918] org.eclipse.jetty.server.handler.ContextHandler: stopped o.e.j.s.ServletContextHandler{/,null}
INFO [2014-12-17 20:35:09,918] org.eclipse.jetty.server.handler.ContextHandler: stopped o.e.j.s.ServletContextHandler{/,null}
Managed object stop called

我仍然需要有关问题 2 和 3 的帮助。

最佳答案

我也在寻找当 dropwizard 应用程序停止运行时关闭资源的方法。我在 dropwizard 应用程序类(即您的应用程序开始具有 main 方法的类)中注册了一个关闭 Hook 。

        Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("shutdown Hook called");
//database.close();
}
});

here强制 logback 旋转。如果这可行,您无需担心获取 logback 实例。

编辑:

link将进一步帮助您,唯一的区别是它们在应用程序启动时轮换,而不是在关闭时轮换。

关于slf4j - 如何在 Dropwizard 服务关闭时强制进行日志轮换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com