vertex-github opened a new issue, #1658:
URL: https://github.com/apache/logging-log4j2/issues/1658
## Description
Configure JSONTemplate with a custom timestamp formatter:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" strict="true"
packages="org.apache.logging.log4j.layout.template.json" shutdownHook="disable">
<Appenders>
<Console name="STDOUT">
<JsonTemplateLayout
eventTemplateUri="classpath:JsonTemplate.json" recyclerFactory="queue"
locationInfoEnabled="true" />
</Console>
</Appenders>
<Loggers>
<Root level="INFO" includeLocation="true">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
JsonTemplate.json:
"timestamp": {
"$resolver": "timestamp",
"pattern": {
"format": "yyyy-MM-dd HH:mm:ss,nnnnnnnnn"
}
},
(This is one of the formats specified in
`FixedDateFormat.FixedFormat.DEFAULT_NANOS`
## Configuration
**Version:** 2.19.0
**Operating system:** Windows 10
**JDK:** Amazon Coretto JDK17.0.3
```
[Stacktraces, errors, etc. relevant applications logs.]
2023-08-02 15:28:04,391 main WARN skipping the failed formatter factory
"org.apache.logging.log4j.layout.template.json.util.InstantFormatter$Log4jFixedFormatterFactory@4d02f94e"
java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 23
at
org.apache.logging.log4j.core.util.datetime.FixedDateFormat.formatNanoOfMillisecond(FixedDateFormat.java:703)
at
org.apache.logging.log4j.core.util.datetime.FixedDateFormat.formatInstant(FixedDateFormat.java:592)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter$Log4jFixedFormatter.format(InstantFormatter.java:338)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter.patternSupported(InstantFormatter.java:376)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter.access$700(InstantFormatter.java:42)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter$Log4jFixedFormatterFactory.createIfSupported(InstantFormatter.java:312)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter.lambda$new$0(InstantFormatter.java:62)
at
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at
java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002)
at
java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at
java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at
java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter.<init>(InstantFormatter.java:72)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter.<init>(InstantFormatter.java:42)
at
org.apache.logging.log4j.layout.template.json.util.InstantFormatter$Builder.build(InstantFormatter.java:149)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolver$PatternResolverContext.<init>(TimestampResolver.java:232)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolver$PatternResolverContext.fromConfig(TimestampResolver.java:241)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolver$PatternResolverContext.access$300(TimestampResolver.java:215)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolver.createPatternResolver(TimestampResolver.java:325)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolver.createResolver(TimestampResolver.java:212)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolver.<init>(TimestampResolver.java:199)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolverFactory.create(TimestampResolverFactory.java:46)
at
org.apache.logging.log4j.layout.template.json.resolver.TimestampResolverFactory.create(TimestampResolverFactory.java:25)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.ofResolver(TemplateResolvers.java:442)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.ofMap(TemplateResolvers.java:221)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.ofObject(TemplateResolvers.java:141)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.lambda$populateFieldResolverMethods$1(TemplateResolvers.java:250)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.populateFieldResolverMethods(TemplateResolvers.java:249)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.ofMap(TemplateResolvers.java:226)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.ofObject(TemplateResolvers.java:141)
at
org.apache.logging.log4j.layout.template.json.resolver.TemplateResolvers.ofTemplate(TemplateResolvers.java:123)
at
org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.createEventResolver(JsonTemplateLayout.java:168)
at
org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.<init>(JsonTemplateLayout.java:109)
at
org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.<init>(JsonTemplateLayout.java:63)
at
org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$Builder.build(JsonTemplateLayout.java:551)
at
org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$Builder.build(JsonTemplateLayout.java:347)
at
org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:124)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1138)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1063)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1055)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1055)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:664)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:258)
at
org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:304)
at
org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:621)
at
org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:694)
at
org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:711)
at
org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
at
org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
at
org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
at
org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:137)
at
org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:61)
at
org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at
org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:391)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:416)
at org.example.Main.<clinit>(Main.java:8)
```
## Reproduction
Configure simple maven project with the above import, and log4j2.xml config.
Log a line.
The `pattern.length` seems to be returning 23 - but this doesn't seem to be
taking into account the 6 additional chars for micros and nanos.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]