2016-05-05 13 views
0

アルフレコがクライアントから取得しているCMISクエリーを記録したいと思います。Alfresco 4.2+でCMISクエリーをログに記録

私は...情報の多くが、無クエリ文字列をデバッグするために、すべてのCMISのカテゴリを設定しようとしました:これが可能であれば

log4j.logger.org.alfresco.opencmis=debug 
log4j.logger.org.alfresco.opencmis.AlfrescoCmisServiceInterceptor=debug 
log4j.logger.org.alfresco.cmis=debug 
log4j.logger.org.alfresco.cmis.dictionary=debug 
log4j.logger.org.apache.chemistry.opencmis=debug 

誰でも知っていますか?私はソースでうんざりしていますが、何かを見つけるのは難しいです。

答えて

2

有用なログが見つかりませんでしたので、リクエストを記録するためにサーブレットフィルタをまとめました。クエリ文字列は実際にはPOSTリクエストのペイロードにあることを覚えておいてください。リクエストラッパーを作成する必要があるので、ペイロードを下流側で必要とするサービスに干渉することなくフィルタで読み取ることができます。私がそれをしている間は、コンテンツタイプとパラメータもログに記録しました。本当にラッパーは必要ありません。要求情報に非破壊的にアクセスできるからです。この方法を使用するには、フィルタ用とラッパー用の2つのクラスを作成します。そして、このようにweb.xmlにフィルタを追加し、/ Tomcatの/ webappsに/屋外/ WEB-INF /クラスでそれらの両方を入れて...

<filter> 
     <filter-name>post-body-filter</filter-name> 
     <filter-class>filter.PostBodyFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>post-body-filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

結果は、弁を含んでログファイルに入れることができますこのようなserver.xmlのエントリ。ログには、REQBODYのクエリが表示されます。探すべき接頭辞はlocalhost_access_logです。

 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
      prefix="localhost_access_log." suffix=".txt" 
      pattern=" %t %r contentType:%{REQCONTENTTYPE}r parameters:%{REQPARAMETERS}r body:%{REQBODY}r %s" />  

クラス自体はこのように見えます。フィルタの他の例から自由に借用することを認めます。私がどこだけ覚えていれば帰属(または責め)を与えるだろう。私はそれが改善できると確信しています。

package filter; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.Enumeration; 
import javax.servlet.*; 
import javax.servlet.http.HttpServletRequest; 

import filter.FilterRequestWrapper 

public class PostBodyFilter implements Filter { 

    private FilterConfig filterConfig = null; 

    public void destroy() { 
     this.filterConfig = null; 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, 
       FilterChain chain) throws IOException, ServletException { 
     if (filterConfig == null) 
      return; 
     FilterRequestWrapper requestWrapper = new FilterRequestWrapper((HttpServletRequest) request); 
     String contentType = request.getContentType(); 
     StringBuffer parameters = getParameters(request); 
     StringBuffer body = getBody(requestWrapper); 
     request.setAttribute("REQPARAMETERS", parameters); 
     request.setAttribute("REQBODY", body); 
     request.setAttribute("REQCONTENTTYPE", contentType); 
     chain.doFilter(requestWrapper, response); 
    } 

    private static StringBuffer getParameters(ServletRequest request) { 
     Enumeration<String> names = request.getParameterNames(); 
     StringBuffer parameters = new StringBuffer(); 
     while (names.hasMoreElements()) { 
      String name = (String) names.nextElement(); 
      parameters.append(name + "="); 
      String values[] = request.getParameterValues(name); 
      for (int i = 0; i < values.length; i++) { 
       if (i > 0) 
        parameters.append("' "); 
       parameters.append(values[i]); 
      } 
      if (names.hasMoreElements()) 
       parameters.append(" "); 
     } 
     return parameters; 
    } 

    private static StringBuffer getBody(ServletRequest request) 
      throws IOException { 
     StringBuffer body = new StringBuffer(); 
     BufferedReader bufferedReader = null; 
     try { 
      InputStream inputStream = request.getInputStream(); 
      if (inputStream != null) { 
       bufferedReader = new BufferedReader(new InputStreamReader(
         inputStream)); 
       char[] charBuffer = new char[128]; 
       int bytesRead = -1; 
       while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
        body.append(charBuffer, 0, bytesRead); 
       } 
      } else { 
       body.append(""); 
      } 
     } catch (IOException ex) { 
      throw ex; 
     } finally { 
      if (bufferedReader != null) { 
       try { 
        bufferedReader.close(); 
       } catch (IOException ex) { 
        throw ex; 
       } 
      } 
     } 
     return body; 
    } 

    public void init(FilterConfig filterConfig) throws ServletException { 
     this.filterConfig = filterConfig; 
    } 
} 

package filter; 

import java.io.BufferedReader; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import javax.servlet.ServletInputStream; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletRequestWrapper;  

public class FilterRequestWrapper extends HttpServletRequestWrapper { 

    private final String body; 

    public FilterRequestWrapper(HttpServletRequest request) { 
     super(request); 

     StringBuilder stringBuilder = new StringBuilder(); 
     BufferedReader bufferedReader = null; 

     try { 
      InputStream inputStream = request.getInputStream(); 

      if (inputStream != null) { 
       bufferedReader = new BufferedReader(new InputStreamReader(
         inputStream)); 

       char[] charBuffer = new char[128]; 
       int bytesRead = -1; 

       while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
        stringBuilder.append(charBuffer, 0, bytesRead); 
       } 
      } else { 
       stringBuilder.append(""); 
      } 
     } catch (IOException ex) { 

     } finally { 
      if (bufferedReader != null) { 
       try { 
        bufferedReader.close(); 
       } catch (IOException ex) { 
       } 
      } 
     } 

     body = stringBuilder.toString(); 
    } 

    @Override 
    public ServletInputStream getInputStream() throws IOException { 
     final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
      body.getBytes()); 

     ServletInputStream inputStream = new ServletInputStream() { 
      public int read() throws IOException { 
       return byteArrayInputStream.read(); 
      } 
     }; 

     return inputStream; 
    } 
} 
+0

ありがとうございました。私はおそらくこれの前にクライアントのログを調べるでしょう。なぜなら、それは私にとってはあまりにも「侵略的」なのですから、私はこれに落ちなければならないかもしれません! –

関連する問題