Modify bundled Tomcat to allow usage of JsonAccessLogValve

XMLWordPrintable

    • Type: Suggestion
    • Resolution: Fixed
    • None
    • Component/s: Tomcat
    • None
    • 1

      Tomcat supports writing access logs in JSON format starting at version 8.5, as described in their documentation:

      However, when attempting to configure it in Jira using the code snippet below, Jira throws an error and doesn't start:

       <Valve className="org.apache.catalina.valves.JsonAccessLogValve"
                         prefix="json_access_log"
                         pattern="%a %{jira.request.id}r %{jira.request.username}r %t &quot;%m %U%{sanitized.query}r %H&quot; %s %b %D &quot;%{sanitized.referer}r&quot; &quot;%{User-Agent}i&quot; &quot;%{jira.request.assession.id}r&quot;"/>
      
      08-May-2023 10:40:34.380 WARNING [main] org.apache.catalina.startup.Catalina.parseServerXml Unable to load server configuration from [/Users/vfontes/msb/jira/atlassian-jira-software-9.4.1-standalone/conf/server.xml]
          org.xml.sax.SAXParseException; systemId: file:/Users/vfontes/msb/jira/atlassian-jira-software-9.4.1-standalone/conf/server.xml; lineNumber: 116; columnNumber: 235; Error at line [116] column [235]: [org.apache.catalina.valves.JsonAccessLogValve]
              at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1966)
              at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:1998)
              at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1280)
              at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:510)
              at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
              at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1377)
              at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)
              at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
              at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)
              at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
              at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
              at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
              at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
              at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
              at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1535)
              at org.apache.catalina.startup.Catalina.parseServerXml(Catalina.java:617)
              at org.apache.catalina.startup.Catalina.load(Catalina.java:709)
              at org.apache.catalina.startup.Catalina.load(Catalina.java:746)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
              at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.base/java.lang.reflect.Method.invoke(Method.java:566)
              at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:305)
              at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
          Caused by: java.lang.ClassNotFoundException: org.apache.catalina.valves.JsonAccessLogValve
              at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
              at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
              at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
              at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:102)
              at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1277)
              ... 21 more
      08-May-2023 10:40:34.380 SEVERE [main] org.apache.catalina.startup.Catalina.start Cannot start server, server instance is not configured
      

      These settings were confirmed to work on "vanilla" Tomcat 9.0.

      The embedded Tomcat shipped with Jira seems to be missing some modules. It would be nice to include the needed modules so JSON access logging would work.

            Assignee:
            Unassigned
            Reporter:
            Vinicius Fontes
            Votes:
            3 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: