Is it possible to use a log4j Layout as custom-formatter?
amayingenta Jan 23, 2015 1:15 PMWe're looking to put all of our WildFly (8.2) logs into a custom JSON format, including both server logs and application logs.
From searching around it appears that it is possible to use a Log4j Appender using the <custom-handler> tag ([AS7-4925] Log4j appenders should also be allowed for custom handlers - JBoss Issue Tracker), but the only example I could find of using that appears to use a JBoss Logging formatter (Re: Log4jAppenderHandler usage).
I've already got a custom log4j layout, and I'd like to use it either with the <periodic-rotating-file-handler> or a <custom-handler> using Log4j's RollingFileAppender, but I'm not sure if that's possible. I tried to specify a <custom-layout> (actually just trying one of the standard Log4j layouts to start with) but got an error:
<formatter name="JSON"> <custom-formatter class="org.apache.log4j.PatternLayout" module="org.apache.log4j"> <properties> <property name="ConversionPattern" value="{%m}"/> </properties> </custom-formatter> </formatter>
13:01:24,313 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014612: Operation ("add") failed - address: ([ ("subsystem" => "logging"), ("custom-formatter" => "JSON") ]): java.lang.IllegalArgumentException: Failed to load class "org.apache.log4j.PatternLayout" for formatter "JSON" at org.jboss.logmanager.config.AbstractPropertyConfiguration.<init>(AbstractPropertyConfiguration.java:76) [jboss-logmanager-1.5.2.Final.jar:1.5.2.Final] at org.jboss.logmanager.config.FormatterConfigurationImpl.<init>(FormatterConfigurationImpl.java:33) [jboss-logmanager-1.5.2.Final.jar:1.5.2.Final] at org.jboss.logmanager.config.LogContextConfigurationImpl.addFormatterConfiguration(LogContextConfigurationImpl.java:174) [jboss-logmanager-1.5.2.Final.jar:1.5.2.Final] at org.jboss.as.logging.logmanager.ConfigurationPersistence.addFormatterConfiguration(ConfigurationPersistence.java:219) at org.jboss.as.logging.CustomFormatterResourceDefinition$2.performRuntime(CustomFormatterResourceDefinition.java:108) at org.jboss.as.logging.LoggingOperations$LoggingAddOperationStepHandler$1.execute(LoggingOperations.java:207) at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:660) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.controller.AbstractOperationContext.doCompleteStep(AbstractOperationContext.java:501) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.controller.AbstractOperationContext.completeStepInternal(AbstractOperationContext.java:298) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:293) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.controller.ModelControllerImpl.boot(ModelControllerImpl.java:346) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.controller.AbstractControllerService.boot(AbstractControllerService.java:297) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.server.ServerService.boot(ServerService.java:356) [wildfly-server-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.server.ServerService.boot(ServerService.java:331) [wildfly-server-8.2.0.Final.jar:8.2.0.Final] at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:259) [wildfly-controller-8.2.0.Final.jar:8.2.0.Final] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_72] Caused by: java.lang.ClassCastException: class org.apache.log4j.PatternLayout at java.lang.Class.asSubclass(Class.java:3208) [rt.jar:1.7.0_72] at org.jboss.logmanager.config.AbstractPropertyConfiguration.<init>(AbstractPropertyConfiguration.java:74) [jboss-logmanager-1.5.2.Final.jar:1.5.2.Final] ... 15 more
Does <custom-formatter> only support JUL Formatters? Is it possible to use Log4j Layouts if we use a Log4j Appender as a <custom-handler> and if so how is that configured?
Thanks,
Andrew