1

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

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

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

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

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

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

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

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

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

4

2 回答 2

3

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

您需要了解一些关于您的应用程序的信息,然后才能在此处选择合适的配置。

您的代码如何记录事件?码头服务器?和所有第 3 方库?

然后你想回答,你想用什么日志框架来处理日志架构的输出(到磁盘和控制台)部分?

这记录在码头: 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 中的 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 事件路由到 jakarta commons-logging)
    • 还需要commons-logging.jar和您选择的公共日志记录实现。
    • 如果jcl-over-slf4j.jar从上面使用,请勿使用

全部配置:

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

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

于 2013-09-26T16:04:01.730 回答
1

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

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

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

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

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

更新:

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

于 2013-09-26T22:11:27.750 回答