SLF4J + logback + JBoss 7?

9
有人成功将SLF4J / logback与JBoss 7配合使用吗?
以前,我曾经通过在[server]/conf中放置我的"logback.groovy"和在[server]/lib中放置logback核心、经典(0.9.28)和Groovy(1.8.0)JAR来使我的应用程序在JBoss 5.1中工作。
对于JBoss 7.0.1,我已经成功设置了Groovy和logback模块(.index文件已创建),我的EAR的MANIFEST.MF声明了对两个模块的依赖,并且我的"logback.groovy"部署在我的WAR模块的WEB-INF/classes中,在我的EAR中。 EAR的部署肯定没问题-指示灯是绿色的...
尽管如此,实际应用的唯一日志规则是在"standalone.xml"中设置的标准控制台/server.log规则。 是的,我可以看到我的日志语句(所以SLF4J有效),但我的logback规则、附加器等都被忽略了。 在任何日志记录中都没有提到logback或Groovy,因此我认为我还没有做足够的工作来触发logback的加载并找到我的脚本。
还有其他事情我可以尝试,但如果其他人尝试过这个,那就好了。 如果他们没有尝试过,也许这意味着我应该选择JBoss Logging?

你成功了吗?我遇到了类似的问题 - 我已经用两个logback jar替换了resource-root,但是部署时出现了很多错误,也许你可以帮我解决一下。 - kostja
2
很抱歉,我不得不放弃Logback并使用JBoss Logging。也许有答案,但我无法/没有时间找到它。使用最新的JBoss 7.1.x是否有任何区别? - Andrew Regan
2
很遗憾,不行。尝试使用7.1.1.Final但没有成功。关于这个主题的资源仍然非常稀缺,就像这样:“你真的应该使用jboss.logging,其他解决方案不受支持。如果有时间,我们将改变或甚至记录现有功能,但是不会有时间”:( - kostja
2
提示:https://dev59.com/6Wkw5IYBdhLWcg3w_Pbn - bratan
2个回答

9

你确定logback是激活的吗?如果logback无法找到配置文件,即logback.groovy或logback.xml,它将在控制台上打印警告消息。输出应类似于:

12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default configuration.

你在控制台上看到了这样的输出吗?如果没有,假设Jboss 7已经捆绑了一个slf4j绑定,那么你很可能已经在使用Jboss日志记录。 (您对slf4j api的调用被发送到jboss日志记录,而不是logback。)
应该联系Jboss人员,了解是否可以使用除jboss-logging之外的日志后端。
进一步研究后,我注意到JAS7附带了一个名为“slf4j-jboss-logmanager-1.0.0.GA.jar”的文件,位于“./modules/org/slf4j/impl/main/”文件夹下。此文件的内容显示它肯定是一个slf4j绑定。我不知道Jboss“模块”是如何工作的,但如果您希望slf4j选择logback-classic,则删除/禁用slf4j-jboss-logmanager是正确的方法。

谢谢。我在日志中没有看到任何与logback相关的内容,因此可能logback尚未实例化。这似乎在我之前的设置中自动发生,但现在也许我需要以编程方式来做这个?加载正确的类,其余的应该就会跟随了吧?今晚我会试一下看看情况如何。(对整个JBoss Logging的事情仍然有点困惑:我被告知它只是一个API,我可以使用自己选择的实现,但显然有某种默认实现,而且它挡住了我的路。) - Andrew Regan
3
slf4j会绑定到它找到的第一个实现方式,每次应用程序启动时都会这样做。如果slf4j绑定到例如slf4j-simple.jar,logback-classic将不会被实例化,因为已经有了slf4j绑定。如果jboss-logging也可以作为一个slf4j绑定,logback-classic也不会被激活。进一步调查表明,随JAS7一起提供的slf4j-jboss-logmanager-1.0.0.GA.jar是一个slf4j绑定。 - Ceki
1
谢谢,Ceki,我已经更改了 JBoss 的 org.slf4j.impl:main 中的 module.xml,将其指向 logback classic 和 core JARs,而不是 slf4j-jboss-logmanager。然后我添加了一个 Groovy 模块。现在,日志记录几乎与以前相同,但是 logback 必须已经加载,因为我可以在 console.log 中看到缩写的类名('o.h.v.xml.ValidationXmlParser')和 JAR 名称的堆栈跟踪。但是没有 LoggerContext 条目(没有任何 logback 或 Groovy 消息!),我的 "logback.groovy" 仍然没有被使用。非常奇怪。 - Andrew Regan
备注:当我最终让所有东西都正常工作时,我会适当地记录所有这些。 - Andrew Regan

6

JBoss AS7使用jboss-logmanager。我认为logback appenders需要一个能够处理它们的日志管理器。如果您更换日志管理器,我不确定会发生什么。

支持自定义java.util.logging.Handler,因此您可以编写一个处理程序中的appender包装器。我知道这可能不是理想的选择,但应该可以工作。

我鼓励任何人都使用JBoss Logging,不仅仅是因为我在其上工作 :-) 它确实具有一些很好的特性,比如var-arg日志方法,这也是我最初被吸引的地方。还支持通过接口进行i18n日志记录和消息。

此外,JBoss Logging不仅仅是一个API。它是一个完整的日志框架。在下一个版本的JBoss Logging中,我们将提供一种指定要使用的日志管理器的方法。这可能会使类似这样的事情变得更容易,但我必须承认我没有在AS7中测试过它。如果我有时间,我会尝试一下。


谢谢,jamezp,我之前听说过关于 i18n 支持的好消息。肯定会对即将到来的变化感兴趣。如果我不能解决 logback/groovy 的问题,我会尝试将脚本转换为适合 jboss-logmanager 的正确格式,并尝试使用它。顺便问一下,jboss-logmanager 是否免受 Log4J 在多个日志文件和大量并发日志条目中遇到的(死)锁定问题的影响?(https://dev59.com/7lrUa4cB1Zd3GeqPkoji) - Andrew Regan
@AndrewRegan 它肯定要免除死锁。这是我们自己实现的java.util.logging.LogManager。 - James R. Perkins
@James R. Perkins,对于这个问题有什么想法吗?http://stackoverflow.com/questions/11626897/jboss-server-log-output-customization - MaVRoSCy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接