嵌入式Jetty和复杂日志

时间:2013-09-26 10:49:43

标签: java logging jetty embedded-jetty

Jetty 9用于嵌入式服务器,一切运行良好。剩下的一件事就是记录问题。

在此之前,mvn:jetty-run带有自己的日志记录设置并记录到控制台。这有利于发展。在生产环境中,我们需要更特别的东西。

目前在初创公司SLF4J抱怨说,没有绑定可用,所以我们可以自由选择。

这就是我们要归档的内容:

  1. 如果我们在非生产环境中启动,我们需要登录控制台。
  2. 在生产环境中,日志记录应在单个日志文件中完成,但应使用命名模式进行每日轮换:logs / logname-date.log(例如logs / application-20130926.log)
  3. 我们使用命令行参数'-production'区分生产模式和非生产模式。

    由于jetty服务器是嵌入式的,我希望有一个解决方案,我们可以完全配置记录器,而无需管理xml或属性文件,使日志配置方面脱离部署过程。

    那么我们有什么选择?我们如何以最佳方式做到这一点?

    更新:似乎退回是可行的方法。它支持日志文件轮换,也可以使用控制台输出。剩下的难题是如何以编程方式执行此操作而无需其他文件。

2 个答案:

答案 0 :(得分:3)

这里有数百个配置选项。

在此处选择适当的配置之前,您需要了解有关应用程序的一些信息。

如何从代码中发出日志记录事件?码头服务器?和所有第三方图书馆?

然后你想回答一下,你想要处理哪些日志框架来处理日志架构的输出(到磁盘和控制台)?

Jetty记录了这一点: http://www.eclipse.org/jetty/documentation/current/example-logging-logback-centralized.html

是的,该文档不适用于嵌入模式,但它仍然相关。

您所需的日志jar文件:

基本api jar:

  • slf4j-api.jar(必填,无论您在下面选择什么)

日志捕获罐子:

(在这里挑选[0..n]罐子)

  • log4j-over-slf4j.jar(slf4j处理log4j事件)
  • jul-to-slf4j.jar(slf4j处理java.util.logging事件)
  • jcl-over-slf4j.jar(slf4j处理jakarta commons-logging事件)

日志输出jar:

仅选择以下输出罐中的一个:

  • slf4j-simple.jar(这是一个超级简单的日志记录实现,不适合制作)
  • logback-classic.jar(slf4j自己的输出日志框架)
    • 还需要logback-core.jar
  • slf4j-log4j12.jar(将slf4j事件路由到log4j进行处理)
    • 还需要log4j.jar
    • 如果使用上面的log4j-over-slf4j.jar
    • ,请不要使用
  • slf4j-jdk14.jar(将slf4j事件路由到java.util.logging进行处理)
    • 如果使用上面的jul-to-slf4j.jar
    • ,请不要使用
  • slf4j-nop.jar(将slf4j事件路由到无处,默默地丢弃它们)
  • slf4j-jcl.jar(将slf4j事件路由到jakarta commons-logging)
    • 还需要commons-logging.jar以及您选择的commons-logging实现。
    • 如果使用上面的jcl-over-slf4j.jar
    • ,请不要使用

全部配置:

请务必阅读每个罐子上的slf4j manual,因为有时您可能需要了解一些额外的设置细节。

对于您描述的情况,最合适的输出jar将是logback-classic.jarslf4j-log4j12.jar。至于配置输出,您需要依赖这些库提供的文档。

答案 1 :(得分:1)

所以最后这里是完整的图片。

以编程方式完成所有日志记录配置后,请在此处进行说明:http://logback.qos.ch/manual/configuration.html#joranDirectly

我正如Joakim所述使用logback API。一旦您学会了如何使用JoranConfigurator对象以编程方式对其进行编程,一切都非常简单。玩它,你得到了图片。

我设法完成了手头的所有任务。

感谢Joakim的帮助。我错过了JoranConfigurator的东西。谢谢!

<强>更新

我使用了StringReader并将xml配置文件直接嵌入到Logging配置类中。这样我就不必按预期管理其他文件和日志记录。