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