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