嵌入式Jetty和复杂日志记录

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

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

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

这就是我们想要存档的内容:

  1. 如果我们在非生产环境中启动,我们需要登录到控制台。
  2. 在生产环境中,日志记录应该在一个日志文件中完成,但是每天使用命名模式完成:logs / logname-date.log(例如logs / application-20130926.log)

我们使用命令行参数’-production’来区分生产模式和非生产模式。

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

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

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

您在这里有数百个配置选项。

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

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

那么您想回答一下,您想要处理哪些日志框架来处理日志记录体系结构的输出(到磁盘和控制台)?

这在Jetty中有记录: http : //www.eclipse.org/jetty/documentation/current/example-logging-logback-centralized.html

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

您所需的日志记录jar文件:

基本api jar:

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

日志捕获jar子:

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

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

日志输出jar子:

仅选择以下输出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 ,请不要使用

全部配置:

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

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

  • Logback文档
  • Log4j Wiki

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

以编程方式完成所有日志记录配置后,此处仅描述: http : //logback.qos.ch/manual/configuration.html#joranDirectly

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

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

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

更新:

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