Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

To enable http level request/response logs in Application Server (AS), we can use the Access_Log_Valve which is provided in Tomcat 7. For more information, please go to http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve. 

To enable logging, you have to put the following XML element under  the /Server/Service/Engine/Host/ directory in  the {WSO2AS_HOME}/repository/conf/tomcat/catalina-server.xml  and file and restart the AS server.

Code Block
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${carbon.home}/repository/logs"
prefix="localhost_access_log_sample."
suffix=".log"
pattern="%{xxx}i %{xxx}o"
resolveHosts="false"/>

This will create a log file named localhost_access_log_sample.{DATE}.log inside the {WSO2AS_HOME}/repository/logs directory.

The pattern parameter is used to specify which parts of the request/response needs to be logged. In the above sample, xxx stands for the header name we need to log. Here %{xxx}i stands for the request headers and  % %{xxx}o stands for the response headers.

Example 1: Logging request headers

The configuration is as follows:

Code Block
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${carbon.home}/repository/logs"
prefix="localhost_access_log_test."
suffix=".log"
pattern="%{Content-Type}i %{Accept}i %{Accept-Encoding}i"
resolveHosts="false"/>

...

For an example, here we are going to use the RequestInfoExample which RequestInfoExample that comes with AS, to send the request to.

When we send the following http request:

Code Block
GET http://<IP>:<PORT>/example/servlets/servlet/RequestInfoExample?abc=xyz

...

we We can see the following log entry in the localhost_access_log_sample.{DATE}.log file.

...


Example 2: Logging response headers

The configuration is as follows:

Code Block
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${carbon.home}/repository/logs"
prefix="localhost_access_log_test."
suffix=".log"
pattern="%{Content-Type}o %{Content-Length}o %{Date}o %{Server}o"
resolveHosts="false"/>

The above will log Content-type, Content-Length, Date and Server headers of every response coming from AS, as follows.:

Code Block
text/html;charset=ISO-8859-1       662       Tue, 09 Jul 2013 11:21:50 GMT        WSO2 Carbon

Example 3: Logging other variable values

The configuration is as follows:

Code Block
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${carbon.home}/repository/logs"
prefix="localhost_access_log_test."
suffix=".log"
pattern="%r %q %h"
resolveHosts="false"/>

The above will log the First line of the request (method and request URI), Query string (prepended with a '?' if it exists) and Remote hostname (or IP) of every request coming to AS as follows. (For more information on all possible values which that can be given in the pattern parameter, go to http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve)

...

Example 4: Logging URL encoded parameters

You can not use the ‘Access Access Log Valve’ Valve to log URL encoded parameters. ButHowever, you can use ‘Extended the Extended Access Log Valve’ Valve for this. Here only 2 parts (className and pattern) are modified from the previous configuration.Here is the configuration.

The configuration is as follows:

Code Block
<Valve className="org.apache.catalina.valves.ExtendedAccessLogValve" 
directory="${carbon.home}/repository/logs"
prefix="localhost_access_log_extended."
suffix=".log"
pattern="x-P(param1) x-P(param2)"
resolveHosts="false"/>

NowThereafter, when we send following the POST request is sent together with URL the URL encoded values values param1=value1 and  and param2=value2,:

Code Block
POST http://<IP>:<PORT>/example/servlets/servlet/RequestInfoExample

...

The above configuration will log the following.:

Code Block
'value1'     'value2'