如何在 Dropwizard 服务关闭时强制日志轮换



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

我相信我的问题由三部分组成:

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

我用谷歌搜索了几个小时,但根本没有找到答案。我还在GitHub上查看了Dropwizard源代码。

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

====

更新====

主方法中的关闭钩子有效。托管对象停止也有效。仅供参考,托管对象停止在关闭钩子后被调用。

^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方法的类(中注册了一个关闭钩子。

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

查看此处以强制回转。如果这有效,则无需担心获取回日志实例。

编辑:

此链接将进一步帮助您,唯一的区别是它们在应用程序启动时而不是在关闭时旋转。

您可以使用 dropwizards 托管对象来注册需要在 dropwizard 生命周期内启动/停止时执行的组件。

最新更新