嵌入式Jetty和复杂日志记录
Jetty 9用于嵌入式服务器,一切运行良好。 剩下的一件事是记录问题。
在此之前,mvn:jetty-run带有自己的日志记录设置并登录到控制台。 这有利于发展。 在生产环境中,我们需要更特别的东西。
目前在初创公司SLF4J抱怨说,没有绑定可用,所以我们可以自由选择。
这就是我们想要存档的内容:
- 如果我们在非生产环境中启动,我们需要登录到控制台。
- 在生产环境中,日志记录应该在一个日志文件中完成,但是每天使用命名模式完成: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.jar
或slf4j-log4j12.jar
。 至于配置输出,您需要依赖这些库提供的文档。
- Logback文档
- Log4j Wiki
所以最后这里是完整的图片。
以编程方式完成所有日志记录配置后,此处仅描述: http : //logback.qos.ch/manual/configuration.html#joranDirectly
我正如Joakim所说的那样使用logback API。 一旦您学会了如何使用JoranConfigurator对象以编程方式对其进行编程,一切都非常简单。 玩它,你得到的图片。
我设法完成了手头的所有任务。
感谢Joakim的帮助。 我错过了JoranConfigurator的东西。 谢谢!
更新:
我使用了StringReader并将xml配置文件直接嵌入到Logging配置类中。 这样我就不必管理其他文件和日志记录按预期工作。