Did you create a Jira issue for this? One of us might get around to it but we 
never will without the Jira issue reminding us.

Ralph

> On Jul 16, 2019, at 8:12 AM, Dominik Sandjaja <dominik.sandj...@trivago.com> 
> wrote:
> 
> Hello everybody,
> 
> thank you all for the discussion about this topic.
> 
> My initial thought was that I was maybe missing some configuration option for 
> setting the classname of one of the initialization classes to override the 
> object creation.
> But after looking a bit into the Log4J Plugin system I agree, that this is 
> the cleanest way forward from an overall architectural point of view.
> 
> I don't think that I will be able to provide a Pull Request within the next 
> few weeks (hooray for holidays!), but if time permits, I could have a shot at 
> it in September.
> 
> Until then, we will most likely remove this one exception from the Exception 
> chain.
> 
> Thank you all!
> 
> On 13.07.19, 22:34, "Matt Sicker" <boa...@gmail.com> wrote:
> 
>    Oh, that's a part of the plugin system I often forget about since most
>    plugins are core plugins. In any case, a plugin of some sort would be
>    the most flexible here I think.
> 
>    On Sat, 13 Jul 2019 at 15:21, Ralph Goers <ralph.go...@dslextreme.com> 
> wrote:
>> 
>> Just because it is a plugin doesn’t mean it can be used anywhere. The 
>> JacksonFactory could collect plugins for its own category, which would mean 
>> they couldn’t be specified in the configuration. Only “core” plugins can 
>> directly be used as parameters in the configuration. But yes, once it is a 
>> core plugin it could be passed into the newWriter method as I describe.
>> 
>> Ralph
>> 
>>> On Jul 13, 2019, at 10:12 AM, Matt Sicker <boa...@gmail.com> wrote:
>>> 
>>> Being a plugin means you can inject it as a @PluginElement wherever. Plus,
>>> that makes it easier for users to write a custom plugin class to configure
>>> any other options they want. Comparable to the DataSourceFactory or
>>> whatever it’s called for JDBC drivers in that plugin.
>>> 
>>> Keeping it as an element should make it more flexible with future
>>> programmatic configuration ideas. The more component based everything is,
>>> the simpler it’ll be to make customizations without users digging into the
>>> internals of LoggerConfig et al.
>>> 
>>> On Fri, Jul 12, 2019 at 18:36, Ralph Goers <ralph.go...@dslextreme.com>
>>> wrote:
>>> 
>>>> Actually, I was thinking that we can keep the existing ObjectMapper but
>>>> supply a Function that can “enhance” the ObjectMapper either at the end of
>>>> the Log4jJsonObjectMapper constructor, at the end of
>>>> JacksonFactory.newObjectMapper, or after the ObjectMapper is constructed in
>>>> JacksonFactory.newWriter. Whether that is done via a Plugin or some other
>>>> way I hadn’t looked at too much. But I suppose it could either be a Plugin
>>>> that is a parameter to the Layout and then passed into the newWriter method
>>>> or it could be looked up by the JSON method in JacksonFactory. Passing it
>>>> on the Layout probably makes it more flexible.
>>>> 
>>>> Ralph
>>>> 
>>>>> On Jul 12, 2019, at 4:13 PM, Carter Kozak <cko...@ckozak.net> wrote:
>>>>> 
>>>>> I like the idea of an ObjectMapperFactory plugin point. That gives us a
>>>> cleaner builder API on JsonLayout where we can potentially pass in a
>>>> supplier for an ObjectMapper instance from programmatic configuration.
>>>>> 
>>>>> On Fri, Jul 12, 2019, at 19:10, Matt Sicker wrote:
>>>>>> 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>
>>>>>> 
>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>>>> For additional commands, e-mail: log4j-user-h...@logging.apache.org
>>>> 
>>>> --
>>> Matt Sicker <boa...@gmail.com>
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>> For additional commands, e-mail: log4j-user-h...@logging.apache.org
>> 
> 
> 
>    -- 
>    Matt Sicker <boa...@gmail.com>
> 
>    ---------------------------------------------------------------------
>    To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
>    For additional commands, e-mail: log4j-user-h...@logging.apache.org
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
> For additional commands, e-mail: log4j-user-h...@logging.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to