Log4j в Websphere

#servlets #log4j #websphere #websphere-ce

#сервлеты #log4j #websphere #websphere-ce

Вопрос:

Недавно я взял на себя управление проектом веб-приложения с использованием websphere и log4j, работающим под управлением AIX. Чтобы создать среду разработки, я настраиваю все компоненты в Windows, используя eclipse для компиляции файла WAR и его развертывания.

Все работает нормально, за исключением того, что файл журнала не создается. Я изменил файл журнала в log4j.properties на что-то вроде приведенного ниже и предоставил всем разрешение на полный доступ к каталогу:

 log4j.appender.F1.File=/abc/def/logs/admin.log
  

Для

 log4j.appender.F1.File=c:/logs/admin.log
  

Что еще я могу проверить?

Я создаю простое автономное тестовое приложение, которое использует тот же log4j.properties, и оно может создать файл журнала, но когда сервлет развернут в websphere, он не работает. Пожалуйста, помогите! Спасибо!

Комментарии:

1. Вы поместили log4j.properties в WEB-INF/classes в свой WAR-файл? Вы искали admin.log в другом месте файловой системы? Показывает ли журнал stdout или stderr (я не знаю, где они находятся в CE) какие-либо ошибки, связанные с log4j? То, что вы делаете, должно работать, поэтому я бы предположил, что файл log4j.properties не используется.

2. Да, log4j.properties находится внутри WEB-INF/classes в файле WAR. Я думаю, что log4j.properties в порядке, поскольку я изменил шаблоны вывода, и он работает для вывода на консоль.

3. Log4j.properties находится внутри, но каким-то образом он не читается log4j. Я принудительно ввел этот код и работает, но как заставить tomcat использовать тот, что есть в WEB-INF / classess, без жесткого кодирования? Код: PropertyConfigurator.configure(«C:\test\log4j.properties «);

Ответ №1:

Хорошо, я думаю, эта статья должна вам помочь. Похоже, что WebSphere CE использует log4j по умолчанию и управляет им с помощью файла глобальных свойств. Существует раздел о том, как использовать файлы свойств, зависящие от приложения.

Комментарии:

1. Спасибо dbreaux, блестяще! Это именно та проблема! Новичку действительно сложно все это знать, теперь перейдем к изучению того, как составить план развертывания, вздох!

Ответ №2:

Вот что я пытаюсь сделать для устранения подобных проблем.

  1. Включите отладку log4j, чтобы увидеть, откуда он фактически получает файл. Вам нужны доказательства того, какой файл выбран (поэтому включение отладки является полезным занятием) Это предоставляет вам информацию о том, что log4j пытается сделать, чтобы найти файл конфигурации.

    -Dlog4j.debug=true

  2. Я бы не стал жестко указывать местоположение log4j в коде. Вместо этого я бы использовал свойство log4j.configuration System и указал это в аргументах JVM. Таким образом, даже мне не нужно прикасаться к моему коду.

    -Dlog4j.configuration=файл:///home/manglu/log4j.properties

Я бы использовал этот подход независимо от используемого мной сервера выполнения (будь то Tomcat или WAS CE или WAS)

Надеюсь, это поможет

Комментарии:

1. Спасибо Manglu, где указать этот переключатель? Извините за мой вопрос новичка!

2. В аргументах jvm. -D поместит ссылку на файл, доступный для log4j. См. раздел Настройка аргументов jvm в Google для используемого сервера

3. Я использую подход anove в своем приложении. Могу ли я указать местоположение файла в пользовательских свойствах вместо аргументов JVM. Я использую websphere 6.1

Ответ №3:

Я предлагаю вам использовать переменные среды, установленные на вашем сервере, следующим образом :

Вы должны получить доступ к консоли администратора вашего сервера. В разделе пользовательские свойства

Server_path=/abc/def/logs

В вашем log4j используйте это: {$server_path}/log.txt

Убедитесь, что пользователь, запускающий приложение, имеет доступ к этому каталогу.

Комментарии:

1. Спасибо за ваш ответ. Я совершенно новичок в websphere, как правильно установить env, я прочитал всю консоль администратора, но не нашел там ничего? Лучшее, что я пытаюсь сделать, это установить этот env var в C:Program FilesIBM WebSphere AppServerCommunityEdition bin и измените log4j, как было предложено, это тоже не работает.

2. Настройка переменных выполняется в разделе сервер — определение процесса — пользовательские свойства

3. Я не получаю «Определение процесса» под сервером, только информацию, системную информацию Java, журналы сервера, завершение работы, веб-сервер, пулы потоков и т.д. Я использую Community Edition в Windows, а консоль находится на локальном хосте: 8080

4. @John: так что на самом деле это не WebSphere, а Apache Geronimo.

5. Спасибо home, я действительно не знаю, я использую IBM websphere CommunityEdition и, возможно, он использует Apache Geronimo. В любом случае, я хочу создать файл журнала только из log4j, но не удалось: ~(