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
> > >>>>
> > >>>
> > >>>
> > >>>
> > >>
> > >>
> > >
> >
> >

Reply via email to