access-log loggers parameters request Jahia 8 Jahia 7.3

Fill access-log with additional information like siteKey

Question

Is it possible to add additional information in access-log (siteKey, username, etc.)?

Answer

It isn't possible per default, but with a RenderFilter additional parameters could be set into the session/request, which can be reused in the access-log.

Means you need a module where you implement this filter, it could look like (example add siteKey):

Filter

Before Jahia 8.2

package org.jahia.module.test.filter;

import org.jahia.services.render.RenderContext;
import org.jahia.services.render.Resource;
import org.jahia.services.render.filter.AbstractFilter;
import org.jahia.services.render.filter.RenderChain;

public class SetSiteKeyFilter extends AbstractFilter {
 
 
    @Override
    public String execute(String previousOut, RenderContext renderContext, Resource resource, RenderChain chain) throws Exception {
       
     String siteKey = "-";
     if (renderContext.getSite() != null) {
      siteKey = renderContext.getSite().getName();
     }
     renderContext.getRequest().setAttribute("siteKey", siteKey);
     
     return previousOut;
    }

}
 

 As you can see in the execute method of this filter, I put in the request an attribute with name siteKey and the current sitekey if it is available.

The filter must be configured in spring in the same module, like:

  <bean class="org.jahia.module.test.filter.SetSiteKeyFilter">
    <property name="priority" value="3"/>
    <property name="applyOnConfigurations" value="page"/>
  </bean> 

Means for every request on a jahia page this filter is called, important the priority must be lower than 16, I chose in the example 3.

With Jahia 8.2

Instead of declaring the previous source code through Spring, you must declare it through OSGI annotations. Here is a sample source code to do so.

Log configuration

And at least in the tomcat/conf/server.xml you have to add in the pattern "%{siteKey}r"  like:


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="access-log" suffix=".txt"
               pattern="%{siteKey}r %h %l %u %t &quot;%r&quot; %s %b" /> 

In my case, the siteKey is on first position, so I get a log like:


- 127.0.0.1 - - [11/Feb/2021:13:23:41 +0100] "POST /gwt/contentManager.gwt?lang=en&site=6bd3bc8d-6afb-42d2-bb50-664ec6a6cade&workspace=default&windowId=1080600026 HTTP/1.1" 200 1572
digitall 127.0.0.1 - - [11/Feb/2021:13:23:43 +0100] "GET /cms/editframe/default/en/sites/digitall/home/test.html HTTP/1.1" 200 5666
- 127.0.0.1 - - [11/Feb/2021:13:23:43 +0100] "GET /modules/dx-base-demo-templates/javascript/custom/template.js HTTP/1.1" 200 361
- 127.0.0.1 - - [11/Feb/2021:13:23:43 +0100] "GET /modules/dx-base-demo-templates/javascript/parallax-slider.js HTTP/1.1" 200 515
 

As you can see, for the url /cms/editframe/default/en/sites/digitall/home/test.html the site digitall is correctly added to the access log, other resources which don't have a sitekey, are logged with a -