[logback-user] logback-access in an embedded jetty server
Jan-Olav Eide
janolaveide at gmail.com
Wed Feb 1 10:00:38 CET 2017
Got bitten by HandlerCollection vs HandlerList, which have different
semantics. Works fine with a HandlerCollection.
On 31 January 2017 at 13:56, Jan-Olav Eide <janolaveide at gmail.com> wrote:
> 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/20170201/3b1f9a4d/attachment-0001.html>
More information about the logback-user
mailing list