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 <[email protected]> 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 > [email protected] > http://mailman.qos.ch/mailman/listinfo/logback-user >
_______________________________________________ Logback-user mailing list [email protected] http://mailman.qos.ch/mailman/listinfo/logback-user
