congrats!

On Tue, May 26, 2020 at 5:45 AM Volkan Yazıcı <volkan.yaz...@gmail.com>
wrote:

> BAM! JsonTemplateLayout is merged to master! 🎉🍾 (I needed to wait
> some for the GitHub write access to get sync'ed with Apache LDAP.)
>
> On Mon, May 25, 2020 at 9:46 PM Volkan Yazıcı <volkan.yaz...@gmail.com>
> wrote:
> >
> > I had missed the GitBox Account Linking Matt has mentioned. I have
> > just completed it and get acknowledged that I "will" have right access
> > to the logging-* repositories. I don't know if it is a timing issue,
> > but I still cannot see any "merge" buttons available. I will keep on
> > refreshing the page. If there is anything else I need to do, please do
> > let me know.
> >
> > On Mon, May 25, 2020 at 6:40 PM Ralph Goers <ralph.go...@dslextreme.com>
> wrote:
> > >
> > > I see the squash and merge button at the bottom.  I just approved the
> PR so maybe you can see it now? If not, then the steps Matt has provided
> may be needed. We will need to update the new committer email to reflect
> this if that is required.
> > >
> > > If you are still having problems and need me to do it I can merge it,
> but it would be great to verify that you can do it.
> > >
> > > Ralph
> > >
> > > > On May 25, 2020, at 8:49 AM, Matt Sicker <boa...@gmail.com> wrote:
> > > >
> > > > Make sure your account is linked properly:
> > > > https://gitbox.apache.org/setup/
> > > >
> > > > On Mon, May 25, 2020 at 07:23 Volkan Yazıcı <volkan.yaz...@gmail.com>
> wrote:
> > > >
> > > >> Ralph, I can indeed see I am a member of the Apache organization.
> > > >> Though I don't see a "merge" option appearing in the PR page. Could
> it
> > > >> be because of the "change request" of yours? If so, would you mind
> > > >> resolving that request, please? (Sorry, I don't see any other visual
> > > >> cue to proceed further. Maybe it is just me...)
> > > >>
> > > >> On Mon, May 25, 2020 at 12:02 AM Ralph Goers <
> ralph.go...@dslextreme.com>
> > > >> wrote:
> > > >>>
> > > >>> You should already have it.
> > > >>>
> > > >>> Ralph
> > > >>>
> > > >>>> On May 24, 2020, at 2:59 PM, Volkan Yazıcı <
> volkan.yaz...@gmail.com>
> > > >> wrote:
> > > >>>>
> > > >>>> Somebody mind giving me write access to the GitHub repo, please?
> I am
> > > >>>> not able to merge the PR.
> > > >>>>
> > > >>>> On Fri, May 22, 2020 at 3:53 PM Apache <
> ralph.go...@dslextreme.com>
> > > >> wrote:
> > > >>>>>
> > > >>>>> Feel free to merge it. I will test it there when I can.
> > > >>>>>
> > > >>>>> Ralph
> > > >>>>>
> > > >>>>>
> > > >>>>>> On May 22, 2020, at 4:50 AM, Volkan Yazıcı <
> volkan.yaz...@gmail.com>
> > > >> wrote:
> > > >>>>>>
> > > >>>>>> Hey Ralph,
> > > >>>>>>
> > > >>>>>> Here is my status update:
> > > >>>>>>
> > > >>>>>> -~- Benchmarks -~-
> > > >>>>>>
> > > >>>>>> I have removed the benchmarks results. It takes ~8h for a
> complete
> > > >> run
> > > >>>>>> and I don't want to repeat that cycle after every change. I
> might
> > > >>>>>> revisit this idea once JTL becomes more stable in terms of its
> > > >>>>>> features.
> > > >>>>>>
> > > >>>>>> -~- Flattening of MDC fields -~-
> > > >>>>>>
> > > >>>>>> I have changed the MDC directive as follows:
> > > >>>>>>
> > > >>>>>>  mdc
> > > >>>>>>  mdc:flatten[=<prefix>][,stringify]
> > > >>>>>>  mdc:pattern=<pattern>[,flatten=<prefix>][,stringify]
> > > >>>>>>  mdc:key=<key>[,stringify]
> > > >>>>>>
> > > >>>>>> This also allowed JsonTemplateLayout to produce the *exact*
> output as
> > > >>>>>> GelfLayout and EcsLayout, where MDC keys are flattened and
> values are
> > > >>>>>> stringified.
> > > >>>>>>
> > > >>>>>> -~- Null termination, newlines, Logstash, and etc. -~-
> > > >>>>>>
> > > >>>>>> I have tried to reproduce the experiment you have shared, though
> > > >> could
> > > >>>>>> not really succeed due to some Docker command failure in
> > > >> restartApp.sh.
> > > >>>>>> Further, I find the associated Spring setup quite cumbersome to
> wrap
> > > >> my
> > > >>>>>> mind around it. That said, I have done something else: I have
> > > >> improved
> > > >>>>>> LogstashIT such that
> > > >>>>>>
> > > >>>>>> 1. Logstash is configured with both "tcp" and "gelf" input
> plugins,
> > > >>>>>>
> > > >>>>>> 2. LogstashIT employs JsonTemplateLayout against both inputs,
> repeats
> > > >>>>>> the same using GelfLayout and EcsLayout, and verifies the
> populated
> > > >>>>>> content in Elasticsearch.
> > > >>>>>>
> > > >>>>>> One can easily validate this on the branch as follows:
> > > >>>>>>
> > > >>>>>>  $ ./mvnw clean package -DskipTests
> > > >>>>>>  $ ./mvnw \
> > > >>>>>>      verify -o -P docker \
> > > >>>>>>      -pl
> > > >>
> log4j-layout-jackson-json,log4j-plugins,log4j-core,log4j-api,log4j-layout-json-template
> > > >>>>>> \
> > > >>>>>>      -Dtest="Dummy.java" -DtrimStackTrace=false
> > > >> -DfailIfNoTests=false
> > > >>>>>>
> > > >>>>>> One can repeat the very same by running LogstashIT in IDE after
> > > >>>>>> starting the containers:
> > > >>>>>>
> > > >>>>>>  $ ./mvnw \
> > > >>>>>>      docker:start -o -P docker \
> > > >>>>>>      -pl
> > > >>
> log4j-layout-jackson-json,log4j-plugins,log4j-core,log4j-api,log4j-layout-json-template
> > > >>>>>>
> > > >>>>>> I don't know what is wrong with the Spring Cloud Config setup
> you
> > > >> have
> > > >>>>>> shared, but I have no reasons to believe that
> JsonTemplateLayout is
> > > >> the
> > > >>>>>> suspect.
> > > >>>>>>
> > > >>>>>> Regarding your remark about everything getting escaped... This
> might
> > > >>>>>> happen when Logstash fails to read an input. In such a case, it
> puts
> > > >>>>>> the entire payload into the "message" field (hence, the
> escaping) and
> > > >>>>>> stores it like that.
> > > >>>>>>
> > > >>>>>> From now on, I don't know how to proceed with this problem, in
> > > >>>>>> particular, given I believe the problem is in somewhere else but
> > > >>>>>> JsonTemplateLayout.
> > > >>>>>>
> > > >>>>>> -~- Merging branch to master -~-
> > > >>>>>>
> > > >>>>>> Unless there are objections, I want to merge the branch to
> master.
> > > >>>>>> There on I will share json-template-layout.md with the
> community to
> > > >>>>>> collect some feedback on the API. In particular, I have existing
> > > >> users
> > > >>>>>> of LogstashLayout in mind.
> > > >>>>>>
> > > >>>>>> Kind regards.
> > > >>>>>>
> > > >>>>>>> On Mon, May 18, 2020 at 1:18 AM Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>>> On May 17, 2020, at 2:37 PM, Volkan Yazıcı <
> > > >> volkan.yaz...@gmail.com> wrote:
> > > >>>>>>>>
> > > >>>>>>>> Thanks so much for the thorough review Ralph, really
> appreciated! I
> > > >>>>>>>> will address issues you have raised.
> > > >>>>>>>>
> > > >>>>>>>> [As a side note, I have pushed changes containing performance
> > > >>>>>>>> improvements and benchmark results. The module is still
> dependency
> > > >>>>>>>> free and performance-wise pretty good.]
> > > >>>>>>>>
> > > >>>>>>>>> all the default templates separate the message from the
> exception
> > > >>>>>>>>
> > > >>>>>>>> Yes, this I have also realized while studying the source code
> of
> > > >>>>>>>> GelfLayout. Some random thoughts:
> > > >>>>>>>>
> > > >>>>>>>> 1. How about introducing a firstNonNull-like operator:
> > > >>>>>>>>
> ${json:op:firstNonNull:${json:message},${json:exception:message}}.
> > > >>>>>>>> Parsing this would not be trivial, given the list of variables
> > > >>>>>>>> can include comma in various forms. Though the rest should
> > > >>>>>>>> be tractable. (Feels like JsonTemplateLayout directives will
> at
> > > >>>>>>>> some point catch up the with ones in PatternLayout.)
> > > >>>>>>>
> > > >>>>>>> The problem here is that I want newlines in the message. I’m
> not
> > > >> sure what firstNonNull means in the context of a message. The
> message
> > > >> itself won’t have nulls. The Gelf format dictates the null is at
> the end of
> > > >> the JSON string.
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> 2. How about introducing a fallback parameter to the "message"
> > > >>>>>>>> directive: ${json:message:fallback=exception:message}.
> > > >>>>>>>
> > > >>>>>>> Again, I don’t know what that means or how it solves my
> problem of
> > > >> wanting newlines in the message.
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> 3. May I challenge the request: Do one really need it? You
> store
> > > >>>>>>>> individual values, i.e, message and exception, in individual
> > > >> fields.
> > > >>>>>>>> When one is missing and the other is present, isn't it just a
> > > >>>>>>>> presentation layer issue to display it properly?
> > > >>>>>>>
> > > >>>>>>> Picture how a log event looks in a file with a “standard”
> > > >> PatternLayout. In Kibana by default you get 3 columns, the
> timestamp, a
> > > >> field I don’t care about and the message. I want the message to
> appear just
> > > >> as it would in a log file without the timestamp. Yes, I can click
> on each
> > > >> message and see its attributes, but that takes longer. And I want
> > > >> exceptions to jump out at me when I am visually scrolling through
> messages.
> > > >> In fact, I typically don’t want the stack trace in a variable of
> its own.
> > > >> Kibana doesn’t take the pieces of the message and put them together
> like
> > > >> the pattern layout does. Instead it lets you create columns for
> individual
> > > >> attributes. The problem with that is the columns waste a lot of
> space,
> > > >> especially if they frequently are empty as a stack trace would be.
> > > >>>>>>>
> > > >>>>>>> So yes, I really need it.
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>> In the logged event all newlines seem to be stripped from the
> > > >> exception.
> > > >>>>>>>>
> > > >>>>>>>> I really don't get this Ralph. Have you seen the tests in
> > > >> LogstashIT?
> > > >>>>>>>> I have just added a new one testing only newlines. Would you
> mind
> > > >>>>>>>> fiddling around with LogstashIT to reproduce the issue,
> please? Or
> > > >>>>>>>> sharing a recipe for me to reproduce it?
> > > >>>>>>>
> > > >>>>>>> The way I do it is to install Logstash, ElasticSearch and
> Kibana
> > > >> locally on my Mac as well as Docker Desktop for Mac. I then run
> SpringCloud
> > > >> config server from the Log4j Spring Cloud Config project and tailor
> the
> > > >> log4j2.xml that is in the config-repo directory of that project.
> Note that
> > > >> all Log4j Lookup variables have to have the $ escaped or Spring
> Cloud
> > > >> Config will try to resolve them. It also requires having the Socket
> > > >> appender connect to a host of “host.docker.internal” to be able to
> connect
> > > >> to Logstash outside of the docker container. I configure Logstash
> using the
> > > >> configuration documented at
> > > >> http://logging.apache.org/log4j/2.x/manual/cloud.html <
> > > >> http://logging.apache.org/log4j/2.x/manual/cloud.html>, at least
> when
> > > >> using Gelf. I configure Kibana with an index of app-*.
> > > >>>>>>>
> > > >>>>>>> I then modifythe Spring Cloud Config Sample app as needed to
> work
> > > >> with this setup and start it using docker/restartApp.sh.
> > > >>>>>>>
> > > >>>>>>> After starting I do a few things:
> > > >>>>>>> 1. Enter “docker logs app-container”. This should show it is
> > > >> running and the last message will be the Spring logo.
> > > >>>>>>> 2. Look in Kibana and click on the logs. You should see logs
> from
> > > >> the server.
> > > >>>>>>> 3. In a browser enter http://localhost:8080/sample/exception <
> > > >> http://localhost:8080/sample/exception> - unless you have changed
> the
> > > >> port. For some reason I had something running on 8080 and had to
> change the
> > > >> sample app to use 8090. This will generate a stack trace on the web
> page
> > > >> and in the log.
> > > >>>>>>> 4. Look in Kibana. You should see the exception and the stack
> trace
> > > >> properly formatted in the message column. It should also display
> the thread
> > > >> id, log-level and other items configured in the pattern.
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>> Logstash does not seem to be getting a null character
> > > >>>>>>>>> (I tried with both “\0” and “\u0000”)
> > > >>>>>>>>
> > > >>>>>>>> This is weird. Below is how GelfLayout does it:
> > > >>>>>>>>
> > > >>>>>>>> if (includeNullDelimiter) {
> > > >>>>>>>>     builder.append('\0');
> > > >>>>>>>> }
> > > >>>>>>>>
> > > >>>>>>>> And here is how JsonTemplateLayout does it:
> > > >>>>>>>>
> > > >>>>>>>> stringBuilder.append(eventDelimiter);
> > > >>>>>>>>
> > > >>>>>>>> Further, there is even a test for this:
> > > >>>>>>>> JsonTemplateLayout#test_null_eventDelimiter():
> > > >>>>>>>>
> > > >>>>>>>> final String serializedLogEvent =
> layout.toSerializable(logEvent);
> > > >>>>>>>> assertThat(serializedLogEvent).isEqualTo(eventTemplate +
> '\0');
> > > >>>>>>>>
> > > >>>>>>>> Any ideas on what might I be missing?
> > > >>>>>>>
> > > >>>>>>> No - I just know that Logstash wasn’t detecting the null. It
> looked
> > > >> like the whole string was being escaped as all the double quotes
> were also
> > > >> escaped as you can see from the example. I should note that I
> directly
> > > >> copied that from the Logstash log that was written to the terminal
> window
> > > >> with debug logging enabled, so it is possible it was caused by
> that, but
> > > >> this is also what I see in Kibana.
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>>> This isn’t valid in the Gelf spec as additional attributes
> in Gelf
> > > >>>>>>>>> must match the regex - ^[\w\.\-]*$. This means you need to
> > > >>>>>>>>> parse the MDC and add each key as an additional to be able
> > > >>>>>>>>> to create valid Gelf. Personally, I’d like that option
> anyway.
> > > >>>>>>>>
> > > >>>>>>>> For this purpose, I need to introduce an operator similar to
> > > >>>>>>>> unquote-splicing in Lisp to merge the contents of the child
> with
> > > >> the
> > > >>>>>>>> parent. That said, I have my doubts about the practical
> benefit of
> > > >>>>>>>> such a feature. To the best of my knowledge, almost every
> (sanely
> > > >>>>>>>> configured?) log pipeline ends up with a structured storage
> system
> > > >>>>>>>> containing whitelisted fields. Consider ELK stack. Would you
> allow
> > > >>>>>>>> developers to introduce fields at their will? If so, it is a
> > > >> matter of
> > > >>>>>>>> time somebody will take down the entire Elasticsearch cluster
> by
> > > >>>>>>>> flooding it with ContextData.put(userInput, "doh"). Hence, you
> > > >> employ
> > > >>>>>>>> the identical whitelisting strategy at the layout as well:
> > > >>>>>>>>
> > > >>>>>>>> {
> > > >>>>>>>>   "version": "1.1",
> > > >>>>>>>>   "host": "${hostName}",
> > > >>>>>>>>   ...,
> > > >>>>>>>>   "_mdc.loginId": "${json:mdc:loginId}",
> > > >>>>>>>>   "_mdc.requestId": "${json:mdc:requestId}"
> > > >>>>>>>> }
> > > >>>>>>>>
> > > >>>>>>>> What do you think? Shall we really introduce unquote-splicing?
> > > >>>>>>>
> > > >>>>>>> I would have preferred a syntax like
> > > >>>>>>>
> > > >>>>>>> {
> > > >>>>>>>   “version” “1.1”,
> > > >>>>>>>   …
> > > >>>>>>>   ${json.map:mdc:prefix=“_”}
> > > >>>>>>> }
> > > >>>>>>>
> > > >>>>>>> This would cause the whole map to be emitted. Although it
> would be
> > > >> nice to have a version of that which also could specify the keys
> there
> > > >> probably isn’t a point to that since you can directly specify them
> as you
> > > >> have shown.
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> As I said previously, now that I understand what is going on I
> am
> > > >> comfortable with you merging the PR. It is going to the master
> branch so it
> > > >> won’t be what users see on the web site right now. By the time it
> makes it
> > > >> there we can get this all straightened out.  If nothing else we
> could have
> > > >> the current GelfLayout and the JsonTemplateLayout both on the page
> and
> > > >> explain the differences between them, although in the end I agree
> it would
> > > >> be better to have the JsonTemplateLayout replace both the
> JsonLayout and
> > > >> GelfLayout.
> > > >>>>>>>
> > > >>>>>>> Ralph
> > > >>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> Kind regards.
> > > >>>>>>>>
> > > >>>>>>>> On Sat, May 16, 2020 at 1:28 AM Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>>>
> > > >>>>>>>>> I finally got time to spend looking at the Layout. I now
> > > >> understand why it works for you and sort of understand why it
> doesn’t work
> > > >> for me.
> > > >>>>>>>>>
> > > >>>>>>>>> First, all the default templates separate the message from
> the
> > > >> exception. In the logged event all newlines seem to be stripped
> from the
> > > >> exception. This makes viewing them in Kibana pretty awful, but the
> do get
> > > >> logged successfully.
> > > >>>>>>>>>
> > > >>>>>>>>> To include newlines in a log event you either have to play
> games
> > > >> in Logstash (or Fluentd) and try to put the event back together
> again after
> > > >> it has been separated into multiple lines or you have to use a
> different
> > > >> delimiter. Gelf specifies that a null character be used.
> > > >>>>>>>>>
> > > >>>>>>>>> I then tried to use GelfLayout.json with
> > > >>>>>>>>>
> > > >>>>>>>>> <Socket name="Logstash"
> > > >>>>>>>>>     host="\${sys:logstash.host:-host.docker.internal}"
> > > >>>>>>>>>     port="12222"
> > > >>>>>>>>>     protocol="tcp"
> > > >>>>>>>>>     bufferedIo="true">
> > > >>>>>>>>> <JsonTemplateLayout
> eventTemplateUri="classpath:GelfLayout.json"
> > > >> eventDelimiter="\0"
> > > >>>>>>>>>   locationInfoEnabled="true">
> > > >>>>>>>>> <EventTemplateAdditionalFields>
> > > >>>>>>>>>   <KeyValuePair key="hostName" value="${hostName}"/>
> > > >>>>>>>>>   <KeyValuePair key="_containerId"
> > > >> value="\${docker:containerId:-}"/>
> > > >>>>>>>>>   <KeyValuePair key="_application"
> > > >> value="$\${lower:\${spring:spring.application.name:-spring}}"/>
> > > >>>>>>>>> </EventTemplateAdditionalFields>
> > > >>>>>>>>> </JsonTemplateLayout>
> > > >>>>>>>>> </Socket>
> > > >>>>>>>>> but this did not work at all. Logstash does not seem to be
> > > >> getting a null character (I tried with both “\0” and “\u0000”) and
> all the
> > > >> events buffer in Logstash until I shutdown the application. Worse
> the
> > > >> formatting looks like escaped JSON rather than raw json.
> > > >>>>>>>>>
> > > >>>>>>>>> Also, the GelfTemplate contains
> > > >>>>>>>>> {
> > > >>>>>>>>> "version": "1.1",
> > > >>>>>>>>> "host": "${hostName}",
> > > >>>>>>>>> "short_message": "${json:message}",
> > > >>>>>>>>> "full_message": "${json:exception:stackTrace:text}",
> > > >>>>>>>>> "timestamp": "${json:timestamp:epoch:secs}",
> > > >>>>>>>>> "level": "${json:level:severity:code}",
> > > >>>>>>>>> "_logger": "${json:logger:name}",
> > > >>>>>>>>> "_thread": "${json:thread:name}",
> > > >>>>>>>>> "_mdc": "${json:mdc}"
> > > >>>>>>>>> }
> > > >>>>>>>>> This causes the output to contain
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>
> \\\"_mdc\\\":{\\\"loginId\\\":\\\"rgoers\\\",\\\"requestId\\\":\\\"266196c1-9702-11ea-9e4a-0242ac120006\\\"}
> > > >>>>>>>>>
> > > >>>>>>>>> This isn’t valid in the Gelf spec as additional attributes in
> > > >> Gelf must match the regex - ^[\w\.\-]*$. This means you need to
> parse the
> > > >> MDC and add each key as an additional to be able to create valid
> Gelf.
> > > >> Personally, I’d like that option anyway.
> > > >>>>>>>>>
> > > >>>>>>>>> I would suggest you attempt to work to make a template that
> > > >> matches the result of the GelfLayout I had previously documented.
> > > >>>>>>>>>
> > > >>>>>>>>> But now that I understand what is going on I am OK with this
> > > >> contribution being merged. I would like to get these issues
> addressed and
> > > >> update the Logging in the Cloud documentation so that it can
> document both
> > > >> ways of sending to Logstash but we can do that after the code is
> merged.
> > > >>>>>>>>>
> > > >>>>>>>>> Ralph
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>> On Apr 21, 2020, at 2:23 PM, Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>>>>
> > > >>>>>>>>>> Ok. Now that a release has been cut spending time with your
> > > >> contribution is at the top of my list.
> > > >>>>>>>>>>
> > > >>>>>>>>>> Ralph
> > > >>>>>>>>>>
> > > >>>>>>>>>>> On Apr 21, 2020, at 1:24 PM, Volkan Yazıcı <
> > > >> volkan.yaz...@gmail.com> wrote:
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> Ralph, I've just pushed a commit that adds PatternLayout
> > > >> support, FYI.
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> On Mon, Apr 20, 2020 at 2:08 AM Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> I completely understand how messed up people’s lives are
> right
> > > >> now. I’m lucky, all my kids are long gone out of the house. With
> COVID-19 I
> > > >> am able to work from home and while that saves me over 2 hours a
> day in
> > > >> commute time and more time because there isn’t much else to do, I
> end up
> > > >> spending a lot of the extra time on my $dayjob (and feel lucky I
> still have
> > > >> it).
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> 1. You should care about the checkstyle errors as much as
> > > >> everyone else ;-). They don’t seem to be a high priority for people
> to fix.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> 2. Maybe I didn’t make my need for the Pattern Layout
> clear.
> > > >> Adding the pattern layout for the JTL is ONLY for the message
> attribute
> > > >> (just as I did for the GelfLayout). This allows what is displayed
> in Kibana
> > > >> to look like what you would see in the log file while still allowing
> > > >> filtering on all the attributes. For me, this is a big deal - I
> won’t use
> > > >> the Layout without it. That doesn’t mean it has to be included in
> the
> > > >> initial commit.  I don’t believe JsonLayout supports it either but
> I am
> > > >> hoping to be able to do that today, although I have several other
> things I
> > > >> need to do. What you would end up with is a new attribute called
> > > >> messagePattern that takes a pattern that is exactly what you would
> give to
> > > >> PatternLayout.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> 3. You can handle the performance issue however you want
> but
> > > >> if it was me I would just revert back to using Jackson without a
> second
> > > >> thought. I just don’t see the point of trying to roll your own.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> 4. It will take me a while to see what your integration
> test
> > > >> does and if it resolves my concerns regarding updating the logging
> in the
> > > >> cloud page.
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> Ralph
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> On Apr 19, 2020, at 2:30 PM, Volkan Yazıcı <
> > > >> volkan.yaz...@gmail.com> wrote:
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> Hello Ralph,
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> [Due to #COVID-19, day cares are closed. I can hardly
> spare
> > > >> time to
> > > >>>>>>>>>>>>> work, including Log4j. Hence, apologies for my slowed
> down
> > > >> progress &
> > > >>>>>>>>>>>>> responses.]
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> I could not put my finger on the performance regression,
> yet.
> > > >> I might
> > > >>>>>>>>>>>>> opt to switch back to Jackson, but I am not gonna do that
> > > >> without
> > > >>>>>>>>>>>>> spotting that darn pain in the back. (You might have
> noticed,
> > > >> there is
> > > >>>>>>>>>>>>> actually a class for generating a report out of the
> available
> > > >>>>>>>>>>>>> JSON-emitting layouts. I will skip incorporating its
> output
> > > >> into the
> > > >>>>>>>>>>>>> manually until I address this performance regression.)
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> I've just pushed a commit, i.e., LogstashIT, which tests
> > > >>>>>>>>>>>>> JsonTemplateLayout against ELK stack. Would you mind
> skimming
> > > >> through
> > > >>>>>>>>>>>>> that (small) change, please?
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> I am not inclined to incorporate PatternLayout (PL) into
> > > >>>>>>>>>>>>> JsonTemplateLayout (JTL). JTL is supposed to (ideally)
> > > >> deliver all the
> > > >>>>>>>>>>>>> functionality provided by PL but in a structured format,
> > > >> i.e., JSON.
> > > >>>>>>>>>>>>> If there arises a need to fallback to PL, I'd rather add
> that
> > > >> missing
> > > >>>>>>>>>>>>> functionality to JTL.
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> You've mentioned about the checkstyle errors. How much
> shall
> > > >> I be
> > > >>>>>>>>>>>>> concerned about them? (It even complains about missing
> > > >> JavaDocs on
> > > >>>>>>>>>>>>> class fields.) Are there any particular ones you want me
> to
> > > >> address?
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> Besides these... I think I am done.
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> Kind regards.
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> On Thu, Apr 16, 2020 at 10:49 PM Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> Volkan,
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> I’m just wondering if you have had a chance to get to
> this.
> > > >> As I said, as far as I am concerned this is the only thing getting
> in the
> > > >> way of merging the PR. If you would prefer you can just remove the
> update
> > > >> to the “Logging in the Cloud” page and push the rest and then
> update that
> > > >> page after you have the testing done.
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> Ralph
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> On Apr 12, 2020, at 12:01 AM, Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> I think I said this before, but I see no reason you
> can’t
> > > >> have a dependency on Jackson. We currently do for almost all of our
> JSON
> > > >> processing. I wouldn’t spend any more time trying to improve the
> > > >> performance of your custom support, especially since - as I recall
> - you
> > > >> had to drop support of a feature because it was hard to implement.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> As for replacing JsonLayout and GelfLayout, I would
> > > >> envision that those would continue to exist for backwards
> compatibility but
> > > >> would simply pass their configuration too JsonTemplateLayout.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> As for moving JSON out of core, we may end up doing
> that. I
> > > >> am pretty sure the xml support will require a dependency on the
> java.xml
> > > >> module so either that will move out of core or we will have a
> transitive
> > > >> dependency on it. Whichever way we go with that I would expect
> would be the
> > > >> same with Json and Yaml.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> Adding support for formatting the message with the
> > > >> PatternLayout was pretty trivial. I would prefer to continue to
> have that
> > > >> in the example so I would hope it could be added if the example
> changes.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> As I said, the issue is Logstash or Fluentd and how
> they
> > > >> process messages. Adding the null terminator in the configuration
> would
> > > >> make it work on the log4j side as long as you left the logstash
> > > >> configuration alone.  My devops team has tried everything they can
> think of
> > > >> to get exceptions to work and this was the only thing that did
> without
> > > >> having to invent convoluted parsing rules. But yet, before we
> publish that
> > > >> I would need to know it had been tested all the way to Kibana. It
> was
> > > >> pretty easy for me to set it all up in docker containers. I think
> the
> > > >> log4j-spring-cloud-sample project has reference to the docker setup
> I used.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> Ralph
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> On Apr 11, 2020, at 11:23 PM, Volkan Yazıcı <
> > > >> volkan.yaz...@gmail.com> wrote:
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Hey Ralph,
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Thanks so much for taking time to review such a
> lengthy
> > > >> PR, much
> > > >>>>>>>>>>>>>>>> appreciated. Let me try to address your concerns and
> share
> > > >> some of
> > > >>>>>>>>>>>>>>>> mine:
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Does JTL (i.e., JsonTemplateLayout) support Logstash?
> I've
> > > >> tried it
> > > >>>>>>>>>>>>>>>> locally against an actually running Logstash instance
> and
> > > >> it has
> > > >>>>>>>>>>>>>>>> worked fine. Though I did not test newlines. I will do
> > > >> that. In any
> > > >>>>>>>>>>>>>>>> case, AFAIC, JTL should also support null-termination
> via
> > > >>>>>>>>>>>>>>>> eventDelimiter="\u0000" configuration. Nevertheless, I
> > > >> will try both
> > > >>>>>>>>>>>>>>>> and report the outcome. (I wish we would support
> Docker in
> > > >> ITs to
> > > >>>>>>>>>>>>>>>> allow tests against such external services, rather
> than us
> > > >> doing that
> > > >>>>>>>>>>>>>>>> manually.)
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Does "message" directive in JTL support patterns ala
> > > >> PatternLayout?
> > > >>>>>>>>>>>>>>>> No, but it is on my TODO list.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Can one extend the existing JTL template resolvers,
> i.e.,
> > > >>>>>>>>>>>>>>>> EventResolverFactories? [I've extracted this remark
> from
> > > >> your most
> > > >>>>>>>>>>>>>>>> recent GitHub comment.] No, but sounds like a great
> idea!
> > > >> This is not
> > > >>>>>>>>>>>>>>>> a necessity for the first release (as you also have
> > > >> stated), but I
> > > >>>>>>>>>>>>>>>> will see what I can do about it.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Right now I am busy with a performance regression.
> After
> > > >> replacing the
> > > >>>>>>>>>>>>>>>> Jackson JsonGenerator with the in-house JsonWriter,
> I've
> > > >> observed a
> > > >>>>>>>>>>>>>>>> ~2x performance degradation. I've been busy with it
> for
> > > >> almost a
> > > >>>>>>>>>>>>>>>> month, but it is really difficult to spare time for
> it due
> > > >> to
> > > >>>>>>>>>>>>>>>> full-time parenting enforced by closed day cares. I
> do not
> > > >> want to
> > > >>>>>>>>>>>>>>>> have a release before fixing this issue.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> I can imagine at some point 2.x will ship 3 contending
> > > >> JSON layouts:
> > > >>>>>>>>>>>>>>>> GelfLayout, JsonLayout, and JsonTemplateLayout. That
> said,
> > > >> for 3.x I
> > > >>>>>>>>>>>>>>>> suggest to deprecate (maybe even remove?) the former
> two.
> > > >> Personally,
> > > >>>>>>>>>>>>>>>> as a developer, what I find most confusing is a
> library
> > > >> providing
> > > >>>>>>>>>>>>>>>> multiple solutions for the same problem without much
> > > >> tangible benefit
> > > >>>>>>>>>>>>>>>> between each other. I would rather strain from that
> > > >> dilemma in a
> > > >>>>>>>>>>>>>>>> library that I contribute to.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Speaking of 3.x enhancements I have in mind, I am in
> favor
> > > >> of removing
> > > >>>>>>>>>>>>>>>> all JSON logic (i.e., escaping/quoting routines) out
> of
> > > >> core module.
> > > >>>>>>>>>>>>>>>> As a motivation, see my earlier post regarding
> > > >> discrepancies between
> > > >>>>>>>>>>>>>>>> multiple JSON quoting methods. Further, many (incl.
> you)
> > > >> also have
> > > >>>>>>>>>>>>>>>> stated their concerns about the size of "core". I
> don't
> > > >> think a logger
> > > >>>>>>>>>>>>>>>> should ship JSON encoders, decoders, and such. Though
> I
> > > >> did not
> > > >>>>>>>>>>>>>>>> investigate this issue in detail, that is, what are
> the
> > > >> existing
> > > >>>>>>>>>>>>>>>> dependencies, etc. Nevertheless, I wanted to raise
> this
> > > >> point.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> Kind regards.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> On Sat, Apr 11, 2020 at 11:22 PM Ralph Goers <
> > > >> ralph.go...@dslextreme.com> wrote:
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> Volkan,
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> I have looked at the PR and the only remaining thing
> I
> > > >> have an issue with are the changes you made to the logging in the
> cloud
> > > >> documentation. In my testing, only the Gelf Layout worked properly
> with an
> > > >> ELK stack. This is because Logstash (as well as Fluentd) are
> parsing the
> > > >> input trying to figure out where each log event begins and ends.
> They
> > > >> typically do that using some sort of pattern but by default look for
> > > >> newlines. This will cause log events that contain exceptions, which
> > > >> inherently include newlines) or other events that include newlines
> in the
> > > >> message to be broken into multiple lines in Kibana and make it
> impossible
> > > >> to filter on them properly.
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> Have you tested the changes you have made to the
> > > >> documentation with a full ELK stack and verified that all log
> events,
> > > >> including events with exceptions, are displayed correctly?
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> Also, you will notice that the Gelf Layout includes a
> > > >> MessagePattern attribute that allows the message element to be
> formatted
> > > >> using the PatternLayout. Does the Json Template Layout support
> that? I
> > > >> don’t see examples of that in any of the template files if it
> does.  If it
> > > >> does not, that is another reason I would prefer leaving the page as
> is for
> > > >> now.
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> Ralph
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>
> > > >>>
> > > >>>
> > > >>
> > > > --
> > > > Matt Sicker <boa...@gmail.com>
> > >
> > >
>

Reply via email to