Показывать URL в журналах ошибок Catcatina Tomcat - PullRequest
4 голосов
/ 24 августа 2010

Я новичок в мире Java, и мне нужно отладить спокойное приложение Javax Web Service.

Некоторые страницы вызывают исключения, и они регистрируются правильно, но я хотел быURL страницы, которая вызвала код, внутри моих логов, а также трассировку стека.

Информация GET и POST также будет иметь жизненно важное значение.

Возможно ли это?

Ответы [ 2 ]

7 голосов
/ 24 августа 2010

Поскольку вы хотите, чтобы это было в ваших журналах ошибок вместе с трассировкой стека (или близко к ней), вам, вероятно, потребуется Filter.

Реализуйте метод doFilter(), чтобы проверять и регистрировать вызывающий URL для каждого запроса.Я дал пример кода ниже.

Получив доступ к объекту HttpServletRequest, вы можете вызывать любой из его методов. См. getRequestURI() и getMethod(), которые вам нужны.

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
  {

HttpServletRequest hsr = (HttpServletRequest) request;


String incomingUrl=hsr.getRequestURI(); // fetch URL
String method =hsr.getMethod(); // fetch GET/POST method
logger.debug ("The caller was " + incomingUrl + method); // Send the output to any logger which you have defined
chain.doFilter(request, response);
}

Я предполагаю, что у вас есть регистратор, и вы можете отправить вывод в файл журнала, который вы хотите.

Отобразите это Filter на URL-шаблон, такой как /mywebserviceв web.xml, чтобы он не вызывался для других запросов, а только для вашего веб-сервиса.

<filter>
        <filter-name>Logging_URL_Filter</filter-name>
        <filter-class>com.mysite.URLFilter</filter-class>
    </filter>
<filter-mapping>
          <filter-name>Logging_URL_Filter</filter-name>
          <url-pattern>/mywebservice</url-pattern>
    </filter-mapping>
1 голос
/ 24 августа 2010

Да ... используйте AccessLogValve .

Например, в c:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml вставьте что-то вроде следующего в ваш элемент <Host>:

   <Valve className="org.apache.catalina.valves.AccessLogValve"
        directory="logs/access-logs/" prefix="localhost_access_log."
        suffix=".log"
        pattern="%h %l %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; %T"
        resolveHosts="false"/> 

См. документы для получения информации о полях%.Например, вы запросили информацию GET и POST;метод отображается в поле% r (или% m).Если вам нужны параметры запроса, они будут частью строки запроса (% q) для GET.

Приведенная выше информация попадет в указанный вами журнал доступа.Если вы запрашиваете эту информацию в журналах ошибок всякий раз, когда (и только когда) возникает ошибка: некоторые компоненты уже делают это, но я не знаю, как это сделать иначе.Когда я получаю сообщение об ошибке и URL не указан, я использую временные метки из журналов ошибок и журналов доступа, чтобы сопоставить их.

Вы можете установить степень детализации ведения журнала для различных средств: см. Вход в систему.Tomcat .Это может помочь вам получить больше информации, которая может относиться или не относиться к любым возникающим ошибкам.

...