I'm not sure if I should be commenting directly in JIRA (or how to get an
account), but I submitted a pull request for this:

https://github.com/qos-ch/logback/pull/339

>The MDC is not available when writing the access log. The MDC variables
are removed by the filter (post-processing) running way before the access
log.

I don't quite understand because my PR worked when I pulled it into my
dropwizard project, and access logs included the values I inserted in the
MDC at the beginning of the request.

Thanks,
Paul


On Mon, Nov 7, 2016 at 1:24 AM, Erik Lund Jensen (JIRA) <noreply-j...@qos.ch
> wrote:

> Erik Lund Jensen
> <http://jira.qos.ch/secure/ViewProfile.jspa?name=ErikLundJensen>
> *commented* on [image: New Feature] LOGBACK-1016
> <http://jira.qos.ch/browse/LOGBACK-1016>
>
> Re: logback-access: Enable MDC support
> <http://jira.qos.ch/browse/LOGBACK-1016>
>
> The MDC is not available when writing the access log. The MDC variables
> are removed by the filter (post-processing) running way before the access
> log.It is not a solution just to not remove the MDC variables, as you
> wouldn't want the MDC variables to stay around for the next request.
>
> In stead you may write a few classes for handling this.First, write a
> class for holding your variables. For example:
>
> public class AccessLogger {
>     private static ThreadLocal<AdditionalInfo> currentInfo = new 
> ThreadLocal<>();
>
>     public static String getAndRemoveAdditionalInfo() {
>         AdditionalInfo additionalInfo = currentInfo.get();
>         currentInfo.remove();
>         return additionalInfo.getInfo();
>     }
>     public static void setAdditionalInfo(String info){
>         currentInfo.set(new AdditionalInfo(info));
>     }
>     public static final class AdditionalInfo {
>         private String info;
>         public AdditionalInfo(String info) {
>             super();
>             this.info = info;
>         }
>         public String getInfo() {
>             return info;
>         }
>     }
> }
>
> Secondly, use that class in a custom access converter:
>
> public class AdditionalInfoConverter extends AccessConverter  {
>     @Override
>     public String convert(IAccessEvent event) {
>         String info = AccessLogger.getAndRemoveAdditionalInfo();
>         return info!=null ? info : "-";
>     }
> }
>
> Thirdly, add the customer converter to a new wrapper class. This class
> adds %X to get the additional info.It would be nice if Logback supported a
> callback to extend PatterLayout, however, this is how it can be done
> without changing the Logback source code.
>
> public class AccessLogLayoutWrapper extends 
> PatternLayoutEncoderBase<IAccessEvent> {
>     @Override
>     public void start() {
>         PatternLayout patternLayout = new PatternLayout();
>         patternLayout.getDefaultConverterMap().put("X", 
> AdditionalInfoConverter.class.getName());
>         patternLayout.setContext(context);
>         patternLayout.setPattern(getPattern());
>         patternLayout.start();
>         this.layout = patternLayout;
>         super.start();
>     }
> }
>
> Finally, use some filter to set the additional info in AccessLogger.
> ...
> AccessLogger.setAdditionalInfo( userName);
> [image: Add Comment] <http://jira.qos.ch/browse/LOGBACK-1016#add-comment> Add
> Comment <http://jira.qos.ch/browse/LOGBACK-1016#add-comment>
>
> This message was sent by Atlassian JIRA (v6.4.12#64027-sha1:e3691cc)
> [image: Atlassian logo]
>
> _______________________________________________
> logback-dev mailing list
> logback-dev@qos.ch
> http://mailman.qos.ch/mailman/listinfo/logback-dev
>
_______________________________________________
logback-dev mailing list
logback-dev@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-dev

Reply via email to