如何统一java堆栈中的日志记录格式

Cha*_*ick 6 java formatting logging

使用Jetty Web服务器,从maven开始,包括iBatis,Spring,Jersey,以及其中的一小部分,我得到了一系列格式的日志记录输出.

有些人来自maven:

[INFO] [war:war]
[INFO] Exploding webapp...
Run Code Online (Sandbox Code Playgroud)

有些人来自码头:

2009-03-25 21:01:27.781::INFO:  jetty-6.1.15
2009-03-25 21:01:28.218:/example:INFO:  Initializing Spring root WebApplicationContext
Run Code Online (Sandbox Code Playgroud)

一些来自Spring:

INFO  ContextLoader - Root WebApplicationContext: initialization started (189)
INFO  XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml] (323)
Run Code Online (Sandbox Code Playgroud)

有些人来自泽西岛:

Mar 25, 2009 9:01:29 PM com.sun.jersey.spi.spring.container.SpringComponentProviderFactory register
Run Code Online (Sandbox Code Playgroud)

还有一些来自我的代码:

INFO  ExampleApp - [User@14ef239 ...stuff] (69)
Run Code Online (Sandbox Code Playgroud)

我希望他们都使用标准的日志包(log4j,commons-logging,java-logging ......)

  • 是否可能,以及将所有这些配置为使用相同格式的最简单方法是什么?
  • 将它们以不同的格式留下有什么好处吗?

  • Miq*_*uel 5

    使用logback库及其桥接器可以实现这一点.它基本上包括从类路径中删除任何log4j公共或类似的jar,坚持logback jar文件和为log4j和类似的桥接jar.Spring,jersey和maven将使用桥工厂实例化logger,而logger将使用logbak生成统一日志记录.

    查看http://logback.qos.ch/http://www.slf4j.org/legacy.html

    关键是将其他日志实用程序与单个全局记录器链接起来的桥梁.

    • 这是最好的方法,但这里的描述以错误的方式翻转.*SLF4J*库桥接java.util.logging,Jakarta Commons Logging,Log4J和SLF4J API,以便它们都映射到SLF4J API上的调用.然后,您可以使用其他*SLF4J*桥接库将这些调用映射到日志记录实现.我们直到最近才使用*Logback*日志记录实现,然后用java.util.logging实现替换了Logback(使用面向JUL的Sun Glassfish服务器的日志查看器可以更好地实现).所以我们现在仍然使用SLF4J,但不使用Logback. (2认同)