Maybe. But it isn’t obvious and would have to be explicitly documented.

Ralph

> On Jul 12, 2020, at 8:09 AM, Matt Sicker <boa...@gmail.com> wrote:
> 
> Wouldn’t that be &#0; in XML?
> 
> On Sat, Jul 11, 2020 at 16:26 Ralph Goers <ralph.go...@dslextreme.com>
> wrote:
> 
>> I guess what you mean is that where you have $resolver: “message” that
>> would somehow be replaced by $resolver” “pattern”?  That would make sense.
>> I have no problem with the changes you are suggesting. However, you should
>> also change the configuration shown in cloud.md and the log4j2.xml in
>> log4j-spring-cloud-config/log4j-spring-cloud-samples/log4j-spring-cloud-config-sample-server/src/main/config-repo
>> to match.
>> 
>> Thanks for determining that it was XML parsing that was messing with the
>> “\0” value. That implies there would have been an XMLish way to bypass that
>> but using an explicit attribute is just a lot easier.  The GelfLayout uses
>> “includeNullDelimitor”. You might consider using that name for consistency.
>> 
>> Ralph
>> 
>>> On Jul 11, 2020, at 1:46 PM, Volkan Yazıcı <volkan.yaz...@gmail.com>
>> wrote:
>>> 
>>> I can't believe how were we expecting somebody to pass a null
>>> character from an XML file! Long story short, it was the XML parser,
>>> doing the right thing, that is, converting XML attribute value "\0" to
>>> Java String "\\0". Okay, I am not gonna whine about this anymore. I
>>> have just pushed a commit adding `nullEventDelimiterEnabled` flag
>>> along with a unit test. (Ralph, I've replaced your
>>> `eventDelimiter="null"` handling as well.)
>>> 
>>> Note that my question about reverting the changes to `MessageResolver`
>>> still stands.
>>> 
>>> On Sat, Jul 11, 2020 at 8:37 PM Volkan Yazıcı <volkan.yaz...@gmail.com>
>> wrote:
>>>> 
>>>> Hello Ralph!
>>>> 
>>>> Sorry that it took me this long to reply to you back in detail, but I
>>>> have just found time to do so. Let me try to address the points you
>>>> raised:
>>>> 
>>>>> The first problem I ran into is that additional fields don’t work.
>>>>> I don’t see any configurations that have them and the Builder doesn’t
>>>>> have annotations on the key and value fields so I suspect it just
>>>>> doesn’t work.
>>>> 
>>>> Yes, the annotations... :facepalm: Good catch.
>>>> 
>>>>> Why didn’t you just enhance KeyValuePair to add the type attribute?
>>>> 
>>>> I was a little bit hesitant to do that, since `type` is mostly a
>>>> concern in the context of JTL. Would you rather recommend me to extend
>>>> `KeyValuePair` instead?
>>>> 
>>>>> I thought you said you added the ability to format the message using
>>>>> a pattern, but I don’t see that in the documentation or in
>>>>> MessageResolver. Was that not included?
>>>> 
>>>> Dang it! Indeed I forgot to add `PatternResolver` into the docs. (I
>>>> will talk about this again in the following lines.)
>>>> 
>>>>> I have added the ability to format the message field using a pattern.
>>>> 
>>>> Doh! I totally misinterpreted your request. I thought you wanted to be
>>>> able to *only* employ `PatternLayout` in JTL, hence I created
>>>> `PatternResolver`. Though what you asked for is to treat the message
>>>> as a pattern. (Looking back right now, your request was pretty clear,
>>>> it was me who was confused.)
>>>> 
>>>> I have reviewed the changes and I want to share two remarks:
>>>> 
>>>> 1. I've seen that you have used a thread-local. That functionality is
>>>>  totally delegated to the `RecyclerFactory` employed, which can be
>>>>  provided by the user. (I will change this accordingly.)
>>>> 
>>>> 2. I've noticed `PatternResolver` is missing the `includeStacktrace`
>>>>  flag. I will add it.
>>>> 
>>>>> I have modified the code so that specifying `eventDelimiter=“null”`
>>>>> will insert a null at the end of the message as specifying
>>>>> eventDelimiter=“\0” or “\u000” does not work (It ends up being “\\0”
>>>>> or “\u000”.
>>>> 
>>>> I am really puzzled about this. Let me explain it through the sources.
>> These
>>>> are the lines you have added:
>>>> 
>>>>   if (eventDelimiter != null &&
>> eventDelimiter.equalsIgnoreCase("null")) {
>>>>       stringBuilder.append('\0');
>>>>   } else {
>>>>       stringBuilder.append(eventDelimiter);
>>>>   }
>>>> 
>>>> Nowhere in the code `eventDelimiter` is JSON quoted. I am totally
>>>> clueless how setting `eventDelimiter` to `\0` doesn't create the
>>>> effect you manually execute here. Further, if it doesn't, how come
>>>> `JsonTemplateLayoutTest#test_null_eventDelimiter()` test passes? I see
>>>> nothing else but to blame two other suspects:
>>>> 
>>>> 1. Either setting the `eventDelimiter` property to `\0` causes the
>>>>  value to get quoted.
>>>> 
>>>> 2. Or there is something else going on while passing the value from
>>>>  the layout to the appender.
>>>> 
>>>> On the other hand, I am a little bit distant to creating special cases
>>>> for certain values (e.g., `null`) of `eventDelimiter`. What if the
>>>> user literally wants to dump `null` (literally!) after every event?
>>>> 
>>>>> As I was implementing stuff I noticed you implemented stuff using
>>>>> lots of static methods. I am not really sure why since almost all of
>>>>> those methods are only invoked from an instance of the object.
>>>> 
>>>> I generally choose the strictest modifier combination, unless there is
>>>> a reason not to do so. Following this principle, if a method/field
>>>> doesn't have any instance dependencies, I make it static. Am I doing
>>>> something wrong with this convention?
>>>> 
>>>>> Also, I would like to be able to specify the pattern I use for the
>>>>> message in the log4j configuration so it is easier to change
>>>>> dynamically but I couldn’t figure out how to do that and get the
>>>>> pattern passed to the MessageResolver.
>>>> 
>>>> Doesn't `PatternResolver` fit the bill here?
>>>> 
>>>> Cheers!
>>>> 
>>>> On Wed, Jul 8, 2020 at 7:42 PM Ralph Goers <ralph.go...@dslextreme.com>
>> wrote:
>>>>> 
>>>>> A couple other things. As I was implementing stuff I noticed you
>> implemented stuff using lots of static methods. I am not really sure why
>> since almost all of those methods are only invoked from an instance of the
>> object. I had to change that to get my enhancements to work.
>>>>> 
>>>>> Also, I would like to be able to specify the pattern I use for the
>> message in the log4j configuration so it is easier to change dynamically
>> but I couldn’t figure out how to do that and get the pattern passed to the
>> MessageResolver.
>>>>> 
>>>>> Ralph
>>>>> 
>>>>>> On Jul 8, 2020, at 7:16 AM, Volkan Yazıcı <volkan.yaz...@gmail.com>
>> wrote:
>>>>>> 
>>>>>> Hey Ralph,
>>>>>> 
>>>>>> Thanks so much for taking time, really appreciated. Unfortunately the
>>>>>> last few days I was pretty busy both at home and at work. I will check
>>>>>> out your changes and reply back as soon as I find some time.
>>>>>> 
>>>>>> Kind regards.
>>>>>> 
>>>>>> On Wed, Jul 8, 2020 at 1:08 AM Ralph Goers <
>> ralph.go...@dslextreme.com> wrote:
>>>>>>> 
>>>>>>> Volkan,
>>>>>>> 
>>>>>>> I have updated the relevant documentation. I am done with all the
>> changes I wanted to make.
>>>>>>> 
>>>>>>> Ralph
>>>>>>> 
>>>>>>>> On Jul 6, 2020, at 2:50 PM, Ralph Goers <ralph.go...@dslextreme.com>
>> wrote:
>>>>>>>> 
>>>>>>>> I have fixed the issue with the annotations. I have added the
>> ability to format the message field using a pattern and I have modified the
>> code so that specifying eventDelimiter=“null” will insert a null at the end
>> of the message as specifying eventDelimiter=“\0” or “\u000” does not work
>> (It ends up being “\\0” or “\u000”.
>>>>>>>> 
>>>>>>>> I have verified that with these changes the message is formatted
>> properly with Gelf. I am still testing though to see how the ThreadContext
>> is being handled.
>>>>>>>> 
>>>>>>>> Ralph
>>>>>>>> 
>>>>>>>>> On Jul 5, 2020, at 11:01 PM, Ralph Goers <
>> ralph.go...@dslextreme.com> wrote:
>>>>>>>>> 
>>>>>>>>> I finally got some time to start testing JsonTemplateLayout
>> against the logging in the cloud documentation. The first problem I ran
>> into is that additional fields don’t work. I don’t see any configurations
>> that have them and the Builder doesn’t have annotations on the key and
>> value fields so I suspect it just doesn’t work.  Why didn’t you just
>> enhance KeyValuePair to add the type attribute?
>>>>>>>>> 
>>>>>>>>> After I corrected the EventTemplateAdditionalField plugin I still
>> can’t get stack traces the way I want them. I thought you said you added
>> the ability to format the message using a pattern, but I don’t see that in
>> the documentation or in MessageResolver. Was that not included? As I said,
>> I require the stack trace to print in the message field in Kibana, not just
>> be a key in the additional data.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Ralph
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>> 
>> 
>> 
>> --
> Matt Sicker <boa...@gmail.com>


Reply via email to