org.jboss.logging.Logger,而不是根据运行时环境打印在日志中的类名
我有一个运行在JBoss5.1上的大型应用程序,通过slf4j使用log4j。在本地docker容器中进行测试时,我可以在日志中看到通常的package.class名称:org.jboss.logging.Logger,而不是根据运行时环境打印在日志中的类名,logging,jboss,log4j,slf4j,Logging,Jboss,Log4j,Slf4j,我有一个运行在JBoss5.1上的大型应用程序,通过slf4j使用log4j。在本地docker容器中进行测试时,我可以在日志中看到通常的package.class名称: 03 Dec 15 09:45:39, DEBUG my.fancy.app.filters.TicketValidationFilter:doFilter:30 Ticket was verified with data: uniqueID=gfd, idnumber=sdf, mid=11246986. 03 Dec 1
03 Dec 15 09:45:39, DEBUG my.fancy.app.filters.TicketValidationFilter:doFilter:30 Ticket was verified with data: uniqueID=gfd, idnumber=sdf, mid=11246986.
03 Dec 15 09:45:39, DEBUG my.fancy.app.MyServlet:doGet:30 Request for secret data with uniqueId=gfd
03 Dec 15 09:45:39, WARN my.fancy.app.MyServlet:doGet:36 Could not retrieve SecretData with uniqueId=gfd
但是,当我将相同的代码部署到开发环境(可能没有那么干净…)时,我得到:
我比较了两种环境中的jboss-log4j.xml,它们是相同的。我还检查了启动标志以查看是否设置了日志提供程序,但这两种环境中都没有
下一步我该去哪里
更新
我还应该提到,以前我们一直直接使用log4j,所以我们仍然有直接的log4j导入和实例化,分散在各处。奇怪的是,使用log4j记录的条目在所有环境中都能正确显示,而使用slf4j记录的条目仅在某些环境中正确显示。这应该是slf4j在有问题的环境中没有正确配置的线索。问题是我应该在哪里修复它
更新2
这是appender配置:
记录器申报:
import org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
...
公共类MyServlet扩展了HttpServlet{
私有记录器log=LoggerFactory.getLogger(MyServlet.class.getName());
...
debug(“请求uniqueId={}的机密数据”,secretDataVO.getUniqueId());
...
}
在pom.xml中,我有:
log4j
log4j
1.2.14
假如
org.slf4j
slf4j api
1.5.10
假如
org.slf4j
slf4j-log4j12
1.5.10
假如
对log4j的依赖是存在的,因为在应用程序代码的其他地方,我们仍然直接使用log4j。slf4j-log4j12被标记为已提供,因为它是由同一jboss实例中的另一个工件加载的
更新3
启动jboss时显示错误:
2015-12-07 16:16:50127错误[STDERR]log4j:错误“org.jboss.logging.appender.FileAppender”对象不能分配给“org.apache.log4j.appender”变量。
2015-12-07 16:16:50127错误[STDERR]log4j:ERROR类“org.apache.log4j.Appender”是由
2015-12-07 16:16:50127错误[STDERR]日志4J:错误[BaseClassLoader@14a33aa{vfszip:/my jboss root/jboss/server/default/deploy/fancyApp.ear/fancyApp web.war/}]
2015-12-07 16:16:50127错误[STDERR]log4j:org.jboss.logging.appender.FileAppender加载了错误“org.jboss.logging.appender.FileAppender”。NoAnnotationURLClassLoader@15b0afd].
2015-12-07 16:16:50127错误[STDERR]log4j:错误无法实例化名为“FILE”的appender。
其中fancyApp-web.war是加载slf4j-log4j12的。我以前看到过这个错误,但没有提到它,因为它出现在本地(docker)和开发环境(甚至在prod中)中。尝试使用
LoggerFactory.getLogger(MyServlet.class)
,如这里所述:
如果clazz参数与调用方的名称不同,则
由SLF4J内部计算,将显示记录器名称不匹配警告
仅当slf4j.detectLoggerNameMismatch系统属性不匹配时才打印
设置为true。默认情况下,未设置此属性,并且没有警告
即使在记录器名称不匹配的情况下也将打印
还可以在log4j.xml中设置
debug=“true”
,并观察log4j初始化。将生产环境的调试器设置为true,也可以设置为配置文件 请附上您的slf4j配置文件(主要用于日志格式),并说明如何声明记录器。您还应该重新检查应用程序依赖项,以便它们包括slf4j和log4j所需的文件。您使用的是legacy log4j吗?@Taavi:请参阅添加的信息。我不知道你所说的“遗留”log4j是什么意思。你的意思是获取调试日志?我应该找什么?你说的是哪个配置文件?JBoss_HOME\server\default\conf\JBoss-log4j.xml这可能会给你一些启示:为什么这会改变什么?您的意思是,我应该查看当启用调试时,日志中是否会出现某些特定错误?是的,您应该检查日志环境是如何设置的,很抱歉没有明确指出。
03 dec 15 10:45:22, DEBUG org.jboss.logging.Logger:debug:228 Ticket was verified with data: uniqueID=sdg, idnumber=sdf, mid=11738149.
03 dec 15 10:45:22, DEBUG org.jboss.logging.Logger:debug:228 Request for secret data with uniqueId=sdg
03 dec 15 10:45:22, WARN org.jboss.logging.Logger:warn:352 Could not retrieve SecretData with uniqueId=sdg