当前位置: 首页 > 知识库问答 >
问题:

在启动Tomcat webapp时,创建log4j2记录器会导致检索JNDI命名上下文失败

姜玉泽
2023-03-14

我有一个Java7 webapp,我试图在运行Tomcat 7.0.53的服务器上工作。在尝试使用Log4j之前,我的webapp已经能够毫无问题地启动和运行。

现在,我试图在我的应用程序中添加和使用Log4j2。通过注释创建Log4j Logger的代码行,我发现当Tomcat试图启动我的webapp时,它会导致我的webapp失败。下面是来自catalina.out的具体错误:

2018年10月22日下午4:28:37组织。阿帕奇。卡塔琳娜。部署NamingResources清理警告:检索容器[StandardEngine[Catalina]的JNDI命名上下文失败。标准主机[本地主机]。StandardContext[/db status checker]]因此没有对该容器javax执行任何清理。命名。NamingException:没有绑定到此类加载器的命名上下文

NamingException发生的原因是查找java:comp/env失败。

这是导致上述警告和随后异常的特定代码行:

static Logger log=LogManager。getLogger(DBTest.class.getName())

我使用的IDE是Intellij IDEA。

如果你需要更多的信息,请告诉我。非常感谢。


共有1个答案

公羊子真
2023-03-14

如果你需要更多的信息,请告诉我。

当询问关于Tomcat的问题时,重要的是要指定您使用的确切版本(x. y. z)。我希望你的Tomcat 7.0. z版本不是n年前的。

当Tomcat试图启动我的webapp时,它会导致我的webapp失败。

错误消息表示它是通过方法“org.apache.catalina.deploy.NamingResources cleanUp”记录的。正如您可以从名称猜到的,它不是在启动时发生的,而是在关闭时发生的。

日志文件和其他日志文件(特别是localhost.log)中的其他消息是什么?

我的猜测是其他东西阻止了它的启动,清理错误只是其中的一个后果。

静态记录仪日志

为什么是“静态的”?只有当您有多个此类实例(并且希望跨实例共享记录器)时,这才有意义。如果只有一个实例(Servlet,控制器通常作为单个实例存在),那么使用实例字段更有意义。

一般说明:

  1. 常见故障排除提示。您可以尝试在NamingResources类中放置一个断点,并查看它是如何启动的。您可以尝试在StandardContext类中放置断点,并查看它是如何启动的。JNDI在StandardContext启动序列的特定步骤初始化
 类似资料:
  • 注意,这对我没有帮助Tomcat错误:警告:无法检索容器的JNDI命名上下文 当我在新的工作区上运行Apache tomcat V8.0服务器时,它会产生一个“服务器tomcat V8.0 server at localhost启动失败”。错误。 2016年8月19日上午8:50:33 org.apache.coyote.abstractProtocol destroy Info:Destroci

  • 我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说, 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4

  • 我在XML中指定log4j2 logger的文件名,如下所示。一切正常,但我得到了错误 2017-09-06 16:54:33,496主要错误未知的对象"RlandAccessFileAppender的类型org.apache.logging.log4j.core.appender.RlandAccessFileAppender被忽略:尝试嵌套它在其中之一:["Appender","Logger"

  • 如果使用ldapsearch在特定的LDAP服务器上搜索基本级别的命名上下文,则搜索效果良好。 然而,使用JNDI,我们得到以下响应: 这是我们的代码: 我们能够返回myhealthisp的基本目录的唯一方法。com是通过将目录名(dc=myhealthisp,dc=com)硬编码到基本目录搜索过滤器中(请参阅以下内容了解我们的代码依据:http://directory.apache.org/ap

  • 我在类方法中使用active record import gem来导入从csv文件读取的列表数组,如下代码所示: 根据active record导入文档,我正在尝试将列表的标题和VIN字段设置为冲突目标。如果列表的VIN字段发生冲突,我希望进行更新,而不是创建。 但是现在,每次我运行CSV上传时,它都在从isting.import创建一个新的列表,而不检查它是否冲突。 我哪里出错了?

  • 我有以下控制台附加器; 问题是我在这里使用的模式输出了一个空的ThreadContext()。我不想使用特定的密钥名称(例如,),因为系统非常广泛,密钥集也不同。示例输出: 2017-09-26 10:39:55396[main]信息:启动内部HTTP客户端{}