-
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 "%m %U%{sanitized.query}r %H" %s %b %D "%{sanitized.referer}r" "%{User-Agent}i" "%{jira.request.assession.id}r""/>
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.