[logback-user] logback-access in an embedded jetty server

Jan-Olav Eide janolaveide at gmail.com
Tue Jan 31 13:56:18 CET 2017


Well, I cheered a bit too soon...

       handlers.addHandler(logbackInlinedRequestHandler());
       handlers.addHandler(webappHandler(contextPath(), warURL()));

This causes no data being available on the InputStream of the servlet
inside the webapp.
Reversing the order of the handler registrations causes nothing to be
request-logged, Probably for the same reason, the data is consumed by the
servlet.

Should not the logback handler be non-invasive in that it should put the
data back on the InputStream, or am I missing something here ?



On 25 January 2017 at 09:50, Jan-Olav Eide <janolaveide at gmail.com> wrote:

> That worked out of the box, thanks a lot four your help. I had missed the
> fact that the RequestLogImpl was in fact the context.
>
> On 25 January 2017 at 09:09, Ceki Gülcü <ceki at qos.ch> wrote:
>
>>
>> LoggerContext is the context for logback-classic whereas RequestLogImpl
>> *is* the context for logback-access+Jetty.  You need to set requestLog
>> (of type RequestLogImpl) as the context for components such as
>> RollingFileAppender and TimeBasedRollingPolicy. By the way, all logback
>> components must be started. Otherwise, they will not work.
>>
>> As such, here a revised version which should work better. Beware, I have
>> not tested this code and it may still contain some wrinkles. Without
>> further ado here is the code:
>>
>>   RequestLogImpl requestLog = new RequestLogImpl(); // implements Context
>>
>>         ch.qos.logback.access.PatternLayoutEncoder encoder = new
>> ch.qos.logback.access.PatternLayoutEncoder();
>>         encoder.setContext(requestLog);
>>         encoder.setPattern("combined");
>>         encoder.start(); // // components must be started
>>
>>         RollingFileAppender<IAccessEvent> appender = new
>> RollingFileAppender<IAccessEvent>();
>>         appender.setContext(requestLog); // requestLog is the context
>>         appender.setName("REQUESTLOG");
>>         appender.setFile("/bps/log/request/myrequest.log");
>>         appender.setEncoder(encoder);
>>
>>
>>         TimeBasedRollingPolicy<IAccessEvent> timePolicy = new
>> TimeBasedRollingPolicy<IAccessEvent>();
>>
>>
>> timePolicy.setFileNamePattern("/bps/log/archive/request/my_r
>> equest_%d{yyyy-MM-dd}_%d{HH_mm_ss,aux}.log.zip");
>>         timePolicy.setContext(requestLog); // requestLog is the context
>>         timePolicy.setMaxHistory(30);
>>         timePolicy.setTimeBasedFileNamingAndTriggeringPolicy(new
>> StartupTimeBasedTriggeringPolicy<IAccessEvent>());
>>         timePolicy.setParent(appender);
>>         timePolicy.start(); // components must be started
>>
>>         appender.setRollingPolicy(timePolicy);
>>         appender.setTriggeringPolicy(timePolicy);
>>
>>         appender.start(); // // components must be started
>>         requestLog.addAppender(appender);
>>
>> Let us know how it goes.
>>
>> --
>> Ceki
>>
>> On 1/25/2017 8:20, Jan-Olav Eide wrote:
>>
>> [snip]
>>
>>
>> This does not work (it archives etc, but never any contents in the file) :
>>>
>>>         LoggerContext loggerContext =
>>> LoggerContext.class.cast(LoggerFactory.getILoggerFactory());
>>>
>>
>>
>>         RollingFileAppender<IAccessEvent> appender = new
>>> RollingFileAppender<>();
>>>         appender.setName("REQUESTLOG");
>>>         appender.setFile("/bps/log/request/myrequest.log");
>>>         TimeBasedRollingPolicy<IAccessEvent> timePolicy = new
>>> TimeBasedRollingPolicy<>();
>>>
>>> timePolicy.setFileNamePattern("/bps/log/archive/request/my_r
>>> equest_%d{yyyy-MM-dd}_%d{HH_mm_ss,aux}.log.zip");
>>>         timePolicy.setContext(loggerContext);
>>>         timePolicy.setMaxHistory(30);
>>>         timePolicy.setTimeBasedFileNamingAndTriggeringPolicy(new
>>> StartupTimeBasedTriggeringPolicy<IAccessEvent>());
>>>         timePolicy.setParent(appender);
>>>         appender.setRollingPolicy(timePolicy);
>>>         appender.setTriggeringPolicy(timePolicy);
>>>         PatternLayoutEncoder encoder = new PatternLayoutEncoder();
>>>         encoder.setPattern("combined");
>>>         appender.setEncoder(encoder);
>>>         RequestLogImpl requestLog = new RequestLogImpl();
>>>         requestLog.addAppender(appender);
>>>
>>> On 24 January 2017 at 22:04, Ceki Gülcü <ceki at qos.ch
>>> <mailto:ceki at qos.ch>> wrote:
>>>
>>>
>>>     Hi Jan-Olav,
>>>
>>>     It's not possible to tell without seeing the code in question. Would
>>>     you want to post it here?
>>>
>>>     --
>>>     Ceki
>>>
>>>     On 1/24/2017 19:43, Jan-Olav Eide wrote:
>>>
>>>     > Well, things worked much better with a logback-access.xml file
>>> rather
>>>     > than a programmatic construction of the same configuration.
>>> Strange,
>>>     > since the latter code works fine elsewhere.
>>>
>>>
>>> _______________________________________________
>> logback-user mailing list
>> logback-user at qos.ch
>> http://mailman.qos.ch/mailman/listinfo/logback-user
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.qos.ch/pipermail/logback-user/attachments/20170131/58e454b9/attachment.html>


More information about the logback-user mailing list