And by plugin, see for example the various BlockingQueueFactory plugins. On Fri, Jul 12, 2019 at 18:09, Matt Sicker <boa...@gmail.com> wrote:
> Plugin maybe? I think we could potentially extend the plugin system as a > general dependency and configuration injection system. We can make less > special case methods of pseudo components and options outside that. > > On Fri, Jul 12, 2019 at 17:34, Gary Gregory <garydgreg...@gmail.com> > wrote: > >> Hi Dominik >> >> I see two ways of addressing this: >> 1) Add a setObjectMapper(ObjectMapper) >> to org.apache.logging.log4j.core.layout.JsonLayout.Builder >> This would work well for programmatic configurations >> and/or: >> 2) Add a setObjectMapperFactory(String) >> to org.apache.logging.log4j.core.layout.JsonLayout.Builder >> This would add a class name for implementors of a new interface >> ObjectMapperFactory. >> This would work nicely for configuration files. >> >> To keep all users in play, 2) seems best. >> >> Thoughts? >> >> Gary >> >> >> On Fri, Jul 12, 2019 at 8:38 AM Dominik Sandjaja < >> dominik.sandj...@trivago.com> wrote: >> >> > Hello, >> > >> > we are using the JSON layout in our Spring Boot application to easily >> > ingest the logs in Elasticsearch. >> > >> > One message that we log is about failed conversions, when an incoming >> > request parameter cannot be converted correctly. As we use Spring’s >> > Converter functionality for this, these `IllegalArgumentException`s are >> > wrapped in a `ConversionFailedException`. This exception has fields of >> type >> > `TypeDescriptor` which hold information about the source and the target >> > type of the conversion. >> > >> > The problem is, that these `TypeDescriptor` objects cannot be serialized >> > to JSON. The simple call >> > >> > >> > >> com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(org.springframework.core.convert.TypeDescriptor.valueOf(String.javaClass)) >> > >> > throws an exception like >> > >> > ERROR StatusLogger >> > com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct >> > self-reference leading to cycle (through reference chain: >> > >> org.springframework.core.ResolvableType["componentType"]->org.springframework.core.ResolvableType["componentType"]) >> > com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct >> > self-reference leading to cycle (through reference chain: >> > >> org.springframework.core.ResolvableType["componentType"]->org.springframework.core.ResolvableType["componentType"]) >> > at >> > >> com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) >> > at >> > >> com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) >> > at >> > >> com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944) >> > at >> > >> com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:721) >> > at >> > >> com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) >> > at >> > >> com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) >> > >> > The error can be prevented if `Mixin`s are added to the `ObjectMapper` >> > which ignore the corresponding class. >> > >> > The `Log4jJsonObjectMapper` is initialized in the `JacksonFactory.JSON` >> > class and I currently do not see any way to somehow configure this >> > ObjectMapper with additional MixIns. >> > >> > Hence, my question finally is: >> > How can I configure Log4J’s JSON mapping to not break on such >> > non-serializable log content? >> > >> > Thank you! >> > Dominik >> > >> > -- > Matt Sicker <boa...@gmail.com> > -- Matt Sicker <boa...@gmail.com>