嵌入式码头和复杂的日志记录



Jetty 9用于嵌入式服务器,一切正常。剩下的一件事是日志记录问题。

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

目前在启动时,SLF4J抱怨说,没有可用的绑定,所以我们可以自由选择。

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

  1. 如果我们在非生产环境中启动,我们需要登录到控制台。
  2. 在生产环境中,日志记录应在单个日志文件中完成,但每天轮换一次,命名架构为:logs/logname-date.log(例如 logs/application-20130926.log(

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

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

那么我们有什么选择,我们如何才能以最好的方式做到这一点呢?

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

这里有数百个配置选项。

您需要

先了解有关应用程序的一些信息,然后才能在此处选择适当的配置。

如何从代码发出日志记录事件? 码头服务器? 以及所有第三方库?

然后,您要回答,您希望处理日志记录体系结构的输出(到磁盘和控制台(部分的日志记录框架?

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

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

所需的日志记录 jar 文件:

基本的 api jar:

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

日志捕获罐:

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

  • log4j-over-slf4j.jar(log4j 事件的 slf4j 处理(
  • jul-to-slf4j.jar (slf4j 处理 java.util.logging 事件(
  • jcl-over-slf4j.jar(雅加达共享资源日志记录事件的SLF4J处理(

日志输出罐:

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

  • 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事件路由到雅加达共享资源日志记录(
    • 还需要commons-logging.jar和您选择的共享资源日志记录实现。
    • 如果使用上面的jcl-over-slf4j.jar,请勿使用

全部配置:

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

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

  • 登录文档
  • Log4j 维基

所以最后这是完整的画面。

毕竟,这里

只是描述了以编程方式进行的所有日志记录配置:http://logback.qos.ch/manual/configuration.html#joranDirectly

我使用日志API,就像Joakim所说的那样。一旦你学会了如何使用JoranConfigurator对象以编程方式编程它,一切都很容易。玩它,你就会明白。

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

谢谢乔基姆的帮助。我错过了JoranConfigurator的东西。谢谢!

更新:

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

最新更新