Hooray! Looks like we do have some docs to update now. On Mon, 25 May 2020 at 17:21, Ralph Goers <ralph.go...@dslextreme.com> wrote:
> Congrats! > > Just a reminder - you now have write access to all the logging > repositories at GitHub. You are welcome to participate in all of them. > There are a few that could use more participation. > > Ralph > > > On May 25, 2020, at 1:45 PM, 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> > >>> > >>> > > > > > -- Matt Sicker <boa...@gmail.com>