Исключить определенные запросы из журнала Tomcat - PullRequest
0 голосов
/ 12 декабря 2018

Мой журнал доступа Tomcat в настоящее время загроможден запросами проверки работоспособности от балансировщика нагрузки, поэтому довольно сложно понять, что происходит.Например, используя GoAccess, я вижу некоторую вводящую в заблуждение статистику:

Hits      h% Vis.    v%   Bandwidth Mtd Proto    Data
 ----- ------ ---- ----- ----------- --- -------- ----
 46221 81.20%    2 0.02%   30.72 MiB GET HTTP/1.1 /geoserver/index.html
 16     0.03%    1 0.01%   50.23 KiB GET HTTP/1.1 /geoserver/wms?SERVICE=WMS&VERSION=1.1.0&REQUEST=GetMap&FORMAT=image/jpeg.
 16     0.03%    1 0.01%  338.80 KiB GET HTTP/1.1 /geoserver/wms?SERVICE=WMS&VERSION=1.1.0&REQUEST=GetMap&FORMAT=image/png.

Журнал создается с использованием стандартного Tomcat Access Log Valve .Предполагается, что клапан имеет параметр conditionUnless, который я пытаюсь использовать для того, чтобы избавиться от всех этих запросов на index.html (вот где проходит проверка работоспособности, поэтому я могу безопасно отфильтровать все из них),

Согласно документации, conditionUnless:

Включает условное ведение журнала.Если установлено, запросы будут регистрироваться, только если ServletRequest.getAttribute() равно null.Например, если для этого значения задано значение «мусор», то конкретный запрос будет зарегистрирован только в случае, если ServletRequest.getAttribute("junk") == null.Использование фильтров - это простой способ установить / снять атрибут в запросе ServletRequest для множества различных запросов.

Но я не могу понять, как использовать фильтры для фильтрации всех запросов к index.html и помечать их в некоторых чем.Очевидно, что в server.xml недостаточно:

<Valve  className="org.apache.catalina.valves.AccessLogValve" 
        directory="/var/log/tomcat8/accesslogs"
        prefix="node1" suffix=".log"
        pattern="combined"
        renameOnRotate="true"
        conditionUnless="index.html" />

Как я могу исключить все запросы к index.html?

1 Ответ

0 голосов
/ 08 апреля 2019

Вам необходимо создать фильтр, как это предлагается в группе tomcat , который добавляет атрибут как doLog

public final class LoggingFilter implements Filter { 

  private FilterConfig filterConfig = null; 

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

    request.setAttribute(filterConfig.getInitParameter("doLog"), "true");         
    chain.doFilter(request, response); 
  } 
  public void destroy() { 
    this.filterConfig = null; 
  } 
  public void init(FilterConfig filterConfig) { 
    this.filterConfig = filterConfig;   
  } 
}

, а затем проверяет имя атрибута с помощью conditionIf

conditionIf="doLog"

conditionIf
Включает условное ведение журнала.Если установлено, запросы будут регистрироваться, только если ServletRequest.getAttribute () не является нулевым.Например, если для этого значения установлено значение важный, то конкретный запрос будет регистрироваться только в том случае, если ServletRequest.getAttribute ("Important")! = Null.Использование фильтров - это простой способ установить / сбросить атрибут в ServletRequest для множества различных запросов.

и добавить фильтр в web.xml:

<filter>  
    <filter-name>LoggingFilter</filter-name>  
    <filter-class>com.yourpackage.LoggingFilter</filter-class>  
    <init-param>  
        <param-name>logParam</param-name>  
        <param-value>doLog</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>LoggingFilter</filter-name>  
    <url-pattern>/geoserver/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
<filter-mapping>  
...