[logback-user] User-filtered logging - can be done?

Chris Pratt thechrispratt at gmail.com
Thu Dec 15 00:50:48 CET 2011


You might look at using the User Name as a Marker.  Then you could set up a
filter that will filter on that User's Marker.
  (*Chris*)

On Wed, Dec 14, 2011 at 3:27 PM, Y M <ym119162 at hotmail.com> wrote:

>   Hello,
>
> I'm trying to obtain a certain logging configuration, but so far I'm
> unsuccessful. I've read through the Logback manual, but I don't know if I
> can do what I want.
>
> It is a web application, and my objective is to enable a finer logging
> level for specific users, getting written to a specific log file, allowing
> better debugging directly in production environment. When needed, someone
> will set a tuned XML config using JMX to enable logging for the duration of
> the tests/data gathering (JMX is working fine). This is the relevant part
> of my logback.xml file:
>
> <configuration debug="true">
>
> ...
>
> <appender name="FILTERED"
> class="ch.qos.logback.core.rolling.RollingFileAppender">
>  <filter class="com.sample.project.UserFilter">
> <!--
>  //filter code
> if (level != null && !event.getLevel().isGreaterOrEqual(level)) {
>  return FilterReply.DENY;
> }
>  if (user.equals(MDC.get("userId"))) {
> return FilterReply.ACCEPT;
>  } else {
> return FilterReply.DENY;
>  }
>
> -->
>   <level>DEBUG</level>
>  <user>123456</user>
>  </filter>
>
> ...
>  </appender>
>
> <logger name="com.sample.project">
>  <appender-ref ref="FILTERED" />
> </logger>
>  <logger name="com.sample.legacy" additivity="false">
> <appender-ref ref="LEGACY" />
>  </logger>
> <root level="WARN">
>  <appender-ref ref="STANDARD" />
> </root>
>
> </configuration>
>
> With this config, I intend to have:
> - WARN+ level at root;
> - events from legacy project tree only on 'LEGACY' (working fine);
> - 'FILTERED' logging only DEBUG+ events from user '123456' under
> 'com.sample.project', while its level ramains at WARN (not OK).
>
> Sample:
> getLogger("com.sample.abc").warn("...");      //logged to STANDARD
> getLogger("com.sample.abc").debug("...");     //not logged
> getLogger("com.sample.legacy").warn("...");   //logged to LEGACY
> getLogger("com.sample.project").warn("...");  //logged to STANDARD; also
> logged to FILTERED if user is 123456
> getLogger("com.sample.project").debug("..."); //logged to FILTERED if user
> is 123456
>
> As I tested, a 'logger.debug()' from the desired user does not get logged,
> the filter is not even called, and I suspect that the effective WARN level
> denies the event before reaching my filter (I hoped for the other way
> around). If I set DEBUG on 'com.sample.project', 'FILTERED' will get the
> correct logging, but 'STANDARD' will be flooded with DEBUG+ logging from
> 'com.sample.project'. And disabling additivity on it removes all logging
> belonging to this hierarchy from 'STANDARD'.
>
> So, I see Logback is working properly, my desired logging seems to be
> against the standard architecture. But is there a way to archive the
> described effect?
> I was thinking of a TurboFilter, allowing lower level events from selected
> users (not tested yet), but I'm not sure the effective level would kick in
> first, also it wouldn't do the desired logging separation between
> 'STANDARD' and 'FILTERED' anyway. As another approach, maybe this would
> require a custom Logger class, handling specific appenders in a special
> way. Unfortunately, I have no idea if I can plug in custom Loggers, and
> also not sure how to code it (Logger class source is quite complex in a
> quick look).
>
> Sorry if it wasn't clear, I'm not sure how to present the situation. I can
> provide further details, if needed.
> Any help is welcome. If someone could show me which way to follow, maybe
> classes or methods to extend, I'd be grateful.
>
> Many thanks!
>
> _______________________________________________
> 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/20111214/d91083fc/attachment-0001.html>


More information about the Logback-user mailing list