【问题标题】:How to force a log rotation when Dropwizard service is shut down?Dropwizard服务关闭时如何强制日志轮换?
【发布时间】:2014-12-18 05:03:32
【问题描述】:

我的服务每小时都有一个日志。活动日志文件是 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. 如何挂钩 Dropwizard 服务的关闭?
  2. 如何访问 Logback 实例(我可能完全错了)?
  3. 如何强制日志轮换?

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

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

====更新====

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

^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 的帮助。

【问题讨论】:

    标签: slf4j logback dropwizard


    【解决方案1】:

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

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

    查看 here 以强制 logback 轮换。如果这可行,您无需担心获取 logback 实例。

    编辑:

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

    【讨论】:

    • 我将它添加到我的服务的主要方法中,它就像一个魅力。感觉很奇怪,就像我在写 JavaScript。这绝对解决了问题 1。但即使在我阅读了您给我的链接之后,我仍然不知道如何访问文件记录器并强制日志轮换。我不知道如何覆盖触发器,我认为 Dropwizard 没有 logback.xml 供我编辑。
    • 使用托管对象也可以,并且在关闭钩子之后被调用。
    • 谢谢卡提克。您提供的第二个链接与我的情况仍然有很大不同。我在 Dropwizard。我没有要修改的 logback.xml 文件。我不知道如何覆盖触发策略。
    • 还是没有回答问题。
    【解决方案2】:

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

    【讨论】:

    • 这也有效。但是,这仍然只能解决问题 1。我仍然需要问题 2 和 3 的帮助。
    • 我只是提到了“setShutdownHook”的答案,没有看到其他两个方面。可能是一个很好的指标,尽管这应该是两个不同的问题(至少)。抱歉,我无法为您提供 logback 帮助。
    • 没有回答问题
    猜你喜欢
    • 2016-10-10
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2022-08-14
    • 2021-06-15
    相关资源
    最近更新 更多