Невозможно сделать журнал tomcat основным сообщением об ошибке типа 404

Мне нужен журнал, в котором tomcat помещает ошибки типа 404. Я использую: tomcat 6 на Centos 5.2

Я получаю 404 ошибки в приложениях, развернутых на tomcat. Мне не удалось найти журналы, в которых tomcat помещает сообщения, когда не может найти запрошенные файлы и другие простые ошибки. - Я не говорю о вещах, регистрируемых приложениями, просто о вещах типа 404.

Я проверил /logs и нашел следующие типы файлов

  • catalina.out : содержит сообщения о запуске и завершении работы (в основном сообщения INFO)
  • catalina..log: содержит те же данные, что и указанный выше файл, для своей даты.
  • host-manager.year-mm-dd.log : пусто (кажется, предназначено для tomcat manger, я его не использовал)
  • localhost.year-mm-dd.log : некоторое сообщение журнала, связанное с приложением (сообщения org.apache.catalina.core.ApplicationContext... INFO)
  • manager.year-mm-dd.log : пустой

Таким образом, ни один из них не содержит ошибок 404. Поскольку я установил tomcat, просто распаковав его в /usr/share, я почти уверен, что у него нет журналов в /var/log (я проверял и ничего для catlina или tomcat).

Я попытался, как и предложил JoseK, настроить клапан в server.xml.

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
     prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

Это создало файл /logs/localhost_access_log.txt, который содержит сведения о поступающих запросах, например.

192.168.40.1 - - [23/Jul/2010:09:14:13 +0500] "GET /<project url>/files/file1.html HTTP/1.1" 404 1084

Он содержит URL-адрес запроса: //files/file1.html Мне нужен путь к файлу, который он не смог найти: /usr/share...../files/file1.html JoseK также предложил написать собственный клапан для этого , но кажется, что слишком много работы для небольшого требования. Кто-нибудь знает более простой способ???


person sundoe    schedule 23.07.2010    source источник


Ответы (1)


Tomcat не регистрирует запросы по умолчанию, но это можно сделать, если вы раскомментируете эту строку в conf/server.xml:

<Valve className="org.apache.catalina.valves.AccessLogValve"
    directory="logs" prefix="localhost_access_log." suffix=".txt"
    pattern="common" resolveHosts="false"/>

Это также зарегистрирует ваши ошибки 404.

Судя по комментариям OP, решение состоит в том, чтобы написать собственный AccessLogValve. Расширение Tomcat и добавление желаемого формата вывода.

См. http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html и http://www.devx.com/Java/Article/32730/1954 для идей.

person JoseK    schedule 24.07.2010
comment
Я пытался сделать это, но это записывает такие строки, как: все, что мне нужно, чтобы tomcat регистрировал путь к локальному файлу, который искал и не нашел - person sundoe; 25.07.2010
comment
Да, как показывает журнал, в этом случае /‹my-project-url›/ регистрируется как 404. Попробуйте использовать другой несуществующий URL-адрес, например wrongURL/wrong/jpg и см., он появится в этом журнале как 404 с полным путем. - person JoseK; 25.07.2010
comment
Для такого запроса, как localhost/‹имя проекта›/files/file1.html, он помещает URL-адрес в журнал, а не путь к файлу, который не может найти. Мне нужно сказать: /usr/share/....../file1.html не найден - person sundoe; 26.07.2010
comment
@sundoe: Tomcat всегда регистрирует URL-адрес, а не путь к файлу. см. мое обновление о пользовательском клапане журнала доступа. - person JoseK; 26.07.2010
comment
JoseK Я проверил ссылки в вашем обновлении, запись/изменение класса для получения имени файла кажется слишком трудоемким, по крайней мере, на данный момент. Я думаю, что опубликую это в списке рассылки tomcat или где-то в этом роде, а затем обновлю эту страницу, если получу более простое решение. - person sundoe; 26.07.2010