[prev in list] [next in list] [prev in thread] [next in thread] 

List:       logback-dev
Subject:    [logback-dev] [JIRA] Commented: (LBCLASSIC-82) Allow an Appender to
From:       "Mike Reinhold (JIRA)" <noreply-jira () qos ! ch>
Date:       2011-05-20 14:33:51
Message-ID: 2051498039.1305902031369.JavaMail.ceki () pixie
[Download RAW message or body]


    [ http://jira.qos.ch/browse/LBCLASSIC-82?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12019#action_12019 \
] 

Mike Reinhold commented on LBCLASSIC-82:
----------------------------------------

Is there any update on this functionality? Not necessarily on the implementation \
presented by Robert (no offense intended), but on the concept of selection being \
re-evaluated for each logger in the logger hierarchy. It would be extremely useful \
(and, in my opinion, a common use case) for the higher level loggers, such as the \
root logger, to only log warnings or errors.

Here is a detailed description of the desired functionality which cannot (easily) be \
achieved with the selection principle as it currently exists.

Root Logger: Warn

com.app.module1 Logger: info
com.app.module2 Logger: info
com.app.module3 Logger: info
com.app.module4 Logger: info
.
.
.

com.app.module1.Class1 Logger: debug
com.app.module1.Class2 Logger: debug
com.app.module1.Class3 Logger: trace
.
com.app.module2.Class1 Logger: debug
com.app.module2.Class2 Logger: trace

In the current selection implementation, using a logging hierarchy as described would \
result in the root logger logging all of the debug and trace events for the lower \
classes. This results in a root log which is huge - most likely of unmanageable size \
to use it for practical debugging / failure analysis.

Ideally, the configuration would have an option to allow a logger to reevaluate if a \
logging request should be selected. This would allow the above scenario to work as \
desired: the root log would only contain errors and warnings, the mid-level or module \
logs would contain info messages and above, and the lower level logs could contain a \
higher level of detail. This type of functionality is critical for larger \
applications - errors and warnings should be consolidated into a single log, each \
module should have the necessary informational messages, and then class or process \
specific logs would contain detailed trace and debug messages.

Having this functionality available would allow for significantly more flexible \
logging via intermixing of loggers which do not re-evaluate the logging level \
(current functionality: aggregation point) and loggers which do re-evaluate the \
logging level (proposed functionality: filtering point). 

The configuration option would have to default to not re-evaluate logging selection \
at each logger in order to preserve compatibility with any existing applications \
which rely on the current selection functionality. Additionally, the implementation \
must very efficient in re-evaluating (or determining if re-evaluation is necessary) \
in order to prevent any significant performance degradation. 

Let me know how this fits in to your existing roadmap.



> Allow an Appender to be added to a Logger with a Level for more fine grained \
>                 control of logging output
> ------------------------------------------------------------------------------------------------------
>  
> Key: LBCLASSIC-82
> URL: http://jira.qos.ch/browse/LBCLASSIC-82
> Project: logback-classic
> Issue Type: New Feature
> Components: appender, joran
> Environment: N/A
> Reporter: Robert Elliot
> Assignee: Logback dev list
> Priority: Minor
> Attachments: AppenderWithLevelTest.java, JoranConfiguratorTest.java, logback.patch, \
> simpleAppenderLevel.xml 
> 
> Here's my use case:
> I have an appender, standard.log, whose job is to log major system events such as \
> startup and shutdown, and all problems.  I have configured my logger levels very \
> carefully to ensure I get exactly the output I want - in some cases suppressing \
> WARN messages that I know are not a problem by setting the level to ERROR, in some \
> cases allowing INFO messages that let me see important lifecycle events. A \
> simplified example might look like this: root=WARN,standard.log
> x.y=INFO
> a=ERROR
> I have a problem in a couple of parts of the system which means I want to turn on \
> debug logging for that part of the system.  I want the output of this to go to a \
> separate appender - debug.log. So now my config looks like this:
> root=WARN,standard.log
> x.y=INFO
> x.y.z=DEBUG,debug.log
> a=ERROR
> a.b=DEBUG,debug.log
> But now I have an issue; all my debug statements are going to standard.log.  It is \
> being polluted with a load of information I don't want in it. I have several \
> options: 1) Set additivity to false on x.y.z and a.b.
> But then any ERROR messages in a.b or INFO or above messages in x.y.z no longer get \
> to standard.log, so this won't do 2) Add a filter of INFO or greater to the \
> standard.log appender But then any INFO and WARN messages in a.b will get to \
> standard.log - and I only want ERROR messages from a and its descendants in there \
> 3) Add a filter of WARN or greater to the standard.log appender Now I still get the \
> WARN messages from a.b that I don't want - and I've lost the INFO messages from x.y \
> that I do want 4) Create two new appenders, standard.log2 for a and standard.log3 \
> for x.y.z.  Add a filter to standard.log2 so that it only accepts ERROR.  Add a \
> filter to standard.log3 so it only accepts INFO or above.  Set additivity to false \
> on a and x.y.z. That works.  But it's a huge amount of added configuration, and \
> that would rapidly multiply in a real world setting. 5) Create a custom filter for \
> standard.log which would effectively mirror the logger config by querying the event \
> for its logger and and level. That blows DRY out of the water, of course, and again \
> is a large amount of work for a simple use case. My suggestion to make this easy is \
> to allow Appenders to be added to a Logger with a Level.  This solution would \
> operate in parallel with the existing solution, and would not alter the existing \
> behaviour one iota. This would allow me to add debug,log as an appender on a and \
> x.y.z with a level of debug.  All debug statements in a and x.y.z & their \
> descendants would be appended to that appender.  All statements would also be \
> passed to the "normal" appender and logger hierarchy, so standard.log would still \
> get the same output as before. I have written unit tests for this behaviour and \
> attach a patch fulfilling them; I hope the unit tests flesh out any queries you may \
> have around how this behaves in edge cases. The only change to the public API is a \
> new method addAppender(Appender<LoggingEvent> newAppender, Level level) on Logger. \
> The only change to the config format is allowing an optional level attribute on \
> appender-ref.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: \
                http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
logback-dev mailing list
logback-dev@qos.ch
http://qos.ch/mailman/listinfo/logback-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic