使用Jetty Web服务器,从maven开始,包括iBatis,Spring,Jersey,以及其中的一小部分,我得到了一系列格式的日志输出。
有些人来自maven:
[INFO] [war:war]
[INFO] Exploding webapp...
有些人来自Jetty:
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
有些来自Spring:
INFO ContextLoader - Root WebApplicationContext: initialization started (189)
INFO XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml] (323)
有些人来自泽西岛:
Mar 25, 2009 9:01:29 PM com.sun.jersey.spi.spring.container.SpringComponentProviderFactory register
还有一些来自我的代码:
INFO ExampleApp - [User@14ef239 ...stuff] (69)
我希望他们都使用标准日志包(log4j,commons-logging,java-logging ......)
答案 0 :(得分:5)
使用logback库及其桥接器可以实现这一点。它基本上包括从类路径中删除任何log4j公共或类似的jar,坚持logback jar文件和为log4j和类似的桥接jar。 Spring,jersey和maven将使用桥接工厂来实例化logger,而logger将使用logbak生成统一日志记录。
检查http://logback.qos.ch/和http://www.slf4j.org/legacy.html
关键是将其他日志实用程序与单个全局记录器链接的桥梁。
答案 1 :(得分:1)
您遇到的问题是应用程序正在使用不同的日志记录库。 Jersey将使用JUL,Spring将使用commons-logging(如果在你的类路径中,它将依次选择log4j),Jetty使用自己的记录器。您可以通过让所有组件登录JUL来解决此问题。
首先,您需要从类路径中获取log4j。使用排除或其他机制来确保不包含log4j。这将阻止公共日志记录通过JUL选择log4j并使Spring以与Jersey相同的格式登录。
接下来,您需要配置Jetty以使用commons-logging。您可以在Maven Jetty Plugin documentation页面上找到相关信息。
如果您的应用程序代码直接使用log4j,则需要切换到commons-logging或JUL。
Maven我不太确定,但它可能有类似的解决方案。
答案 2 :(得分:0)
我不知道以任何方式管理你所描述的内容。如果你很绝望,我可以做的最好的建议是写一些东西来统一不同的格式在一个伞下,并使用你喜欢的日志格式管理它。
答案 3 :(得分:0)
我认为您不能轻易统一所有这些,因为您不知道每个框架使用的是什么。
如果您确定了您感兴趣的那些,那么您可以将每个输出到中央位置/ var / log / app中的日志文件(例如在linux下)。从这里你可以编写一个简单的实用程序来解析每个日志文件,并按照你想要的格式将数据按摩到一个日志文件中。 Awk实用程序非常擅长做这类事情。
或者,您可以保留原样 - 并使用Splunk之类的东西来索引文件以供将来搜索和分析。这实际上取决于日后对日志文件的要求。希望有所帮助。
答案 4 :(得分:0)
如果他们使用标准日志包,当然你可以统一公共部分(“INFO”前缀,时间戳,类别名称(通常是类/包))。只需根据自己的喜好配置log4j / J.U.L / logback。 我不知道为什么你会得到不同的格式 - 日志格式不是由框架配置,而是由应用程序配置 - 所以他们可能使用不同的框架。但这可能是偶然的。
是否重要;好吧,只有你自动处理它(触发基于正则表达式的报警)。
答案 5 :(得分:0)
SLF4J允许您通过将日志记录路由到单个日志记录框架来整合日志记录。您可以将使用commons-logging,java.util.logging和log4j进行的旧式日志记录调用重定向,就好像它们是对SLF4J进行的一样。有关详细信息,请访问www.slf4j.org/legacy.html。
然后将所有日志记录委派给您选择的底层框架,例如logback,log4j,java.util.logging等。如果遇到麻烦,请联系slf4j-user邮件列表。
答案 6 :(得分:0)
我认为我们最终需要一个“logging api”logging api,它将所有统一的日志记录api连接在一起,例如slf4j和其他任何一个。谁知道,您可能需要更改一天处理所有类型的日志记录的日志框架......
答案 7 :(得分:0)
只需使用http://logback.qos.ch/translator/将log4j.properties转换为xml格式并将其粘贴到logback.xml中。这可以作为魅力指导您的日志配置为appender。