Создание log4j2 Logger приводит к сбою извлечения контекста именования JNDI при запуске веб-приложения Tomcat - PullRequest
0 голосов
/ 23 октября 2018

У меня есть веб-приложение на Java 7. Я пытаюсь начать работу на сервере под управлением Tomcat 7.0.53.Прежде чем пытаться использовать Log4j, мое веб-приложение было в состоянии запускаться и работать без проблем.

Теперь я пытаюсь добавить и использовать Log4j2 в моем приложении.Закомментировав строку кода, которая создает Log4j Logger, я обнаружил, что он вызывает сбой моего веб-приложения, когда Tomcat пытается запустить мое веб-приложение.Вот конкретная ошибка от catalina.out:

Oct 22, 2018 4:28:37 PM org.apache.catalina.deploy.NamingResources cleanUp WARNING: Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/db-status-checker]] so no cleanup was performed for that container javax.naming.NamingException: No naming context bound to this class loader

Исключение NamingException происходит из-за сбоя при поиске java:comp/env.

Это конкретная строка кодачто вызывает приведенное выше предупреждение и последующее исключение:

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

IDE, которую я использую - Intellij IDEA.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация,Спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Задавая вопросы о Tomcat, важно указать какую именно версию (xyz) выИспользуем.Я надеюсь, что вашей версии Tomcat 7.0.z не n лет.

это вызывает сбой моего веб-приложения, когда Tomcat пытается запустить мое веб-приложение.

В сообщении об ошибке указывается, что оно регистрируется методом "org.apache.catalina.deploy.NamingResources cleanUp".Как можно догадаться по названию, это происходит не при запуске, а при завершении работы.

Какие есть другие сообщения в файле журнала и в других файлах журнала (в частности, localhost.log)?

Я предполагаю, что что-то еще мешает запуску, и ошибка очистки является лишь следствием этого.

static Logger log

Why "static«?Это имеет смысл, только если у вас есть несколько экземпляров этого класса (и вы хотите совместно использовать регистратор между экземплярами).Если существует только один экземпляр (сервлет, контроллер обычно существует как один экземпляр), использование поля экземпляра имеет больше смысла.

Общие примечания:

  1. Общеесоветы по устранению неполадок .Вы можете попытаться установить точку останова в классе NamingResources и посмотреть, как он запускается.Вы можете попытаться установить точку останова в классе StandardContext и посмотреть, как он запускается.JNDI инициализируется на определенном этапе последовательности запуска StandardContext.
  2. Вы можете попытаться упростить настройку Log4J.(Чтобы убедиться, что он не использует JNDI в своей конфигурации.)
  3. Обычно доступ к JNDI осуществляется путем создания InitialContext и поиска в нем.InitialContext выбирает дерево JNDI в соответствии с веб-приложением, в котором оно выполняется.Это делается путем просмотра Thread.getContextClassLoader () текущего потока (также известного как TCCL).Если TCCL неверен, JNDI не будет доступен.(Класс NamingResources является исключением, поскольку он имеет доступ к внутренним компонентам Tomcat).
...