Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.jboss.logging.Logger,而不是根据运行时环境打印在日志中的类名_Logging_Jboss_Log4j_Slf4j - Fatal编程技术网

org.jboss.logging.Logger,而不是根据运行时环境打印在日志中的类名

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

我有一个运行在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 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