#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:
Вот что я пытаюсь сделать для устранения подобных проблем.
-
Включите отладку log4j, чтобы увидеть, откуда он фактически получает файл. Вам нужны доказательства того, какой файл выбран (поэтому включение отладки является полезным занятием) Это предоставляет вам информацию о том, что log4j пытается сделать, чтобы найти файл конфигурации.
-Dlog4j.debug=true
-
Я бы не стал жестко указывать местоположение 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, но не удалось: ~(