logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ralph Goers <ralph.go...@dslextreme.com>
Subject Re: Web Issues, Logging Levels, and GA
Date Wed, 22 Jan 2014 21:04:40 GMT
Paul,

Take a look at the Logger, LoggerConfig and Lo4jLogEvent classes and LogEvent interface in
log4j-core.  Then look at the Filter interface and the ThresholdFilter implementation.  Looking
at those classes you will see that the change you are proposing has a much larger impact than
what you are thinking.  Since the custom levels would not be part of the enum all the code
would have to be changed to use the new Interface you are proposing, not the Level enum.

Ralph


On Jan 22, 2014, at 12:37 PM, Paul Benedict <pbenedict@apache.org> wrote:

> Ralph,
> 
> Perhaps you're misunderstanding or I was unclear (let's say it's the latter).
> 
> The interface is only so you can allow custom log levels as an enum. The client code
could still use the enums you provided today. All that's changing is the API signatures to
accept the interface -- which conveniently all the enums would implement. As I said, FATAL/ERROR/INFO/WARN/DEBUG/TRACE
would implement the interface.
> 
> It's worth considering this because I think we're about to pollute log4j with logging
levels that really don't belong in the public api. These are definitely custom things people
should implement themselves.
> 
> Paul
> 
> 
> On Wed, Jan 22, 2014 at 12:33 AM, Ralph Goers <ralph.goers@dslextreme.com> wrote:
> First, I assume you meant to code “implements LogLevelStrength” instead of “extends
LogLevelStrength” since an enum already implicitly extends Enum and a Class (or Enum) can’t
extend an Interface. 
> 
> Second, doing this would mean that the Log4j 2 core would have to be modified to never
use the Level enum and only use the Interface, except perhaps in ThresholdFilter which can
really only be configured with one of the Level enum values. Not being able to use Level as
a method parameter and field in the LogEvent makes its value as an enum minimal. Only being
able to use Level values in the ThresholdFilter means anyone with a custom Level has to write
their own custom Level Filter.
> 
> I think providing the extra levels is a fair compromise.  
> 
> Ralph
> 
> 
> On Jan 21, 2014, at 8:50 AM, Paul Benedict <pbenedict@apache.org> wrote:
> 
>> Or if you really want to get fancy (!!!), don't make the log4j API accept an Level,
but an interface that each logging level Enum object implements. Then programmers can use
enums. Example:
>> 
>> 
>> public interface LogLevelStrength {
>>   int getStrength();
>> }
>> 
>> public enum Level extends LogLevelStrength {
>>   FATAL() {
>>     public int getStrength() { return 600; }
>>  }
>>  ...  
>> }
>> 
>> public enum MyCustomLevel extends LogLevelStrength {
>>   DIAGNOSTIC() {
>>     public int getStrength() { return 250; }
>>  }
>>  ...  
>> }
>> 
>> 
>> 
>> On Tue, Jan 21, 2014 at 10:45 AM, Paul Benedict <pbenedict@apache.org> wrote:
>> It won't be possible with an enum, yes, but we should have a way to allow extensions.
For example, if we publically document the integer level of the enums (separated by 100),
then we can provide an overload that accepts an integer. That's how you can allow people to
slide in their extensions. Philospohy: enums for the standard, ints for the custom programmer.
>> 
>> Paul
>> 
>> 
>> On Tue, Jan 21, 2014 at 10:42 AM, Gary Gregory <garydgregory@gmail.com> wrote:
>> On Tue, Jan 21, 2014 at 11:33 AM, Paul Benedict <pbenedict@apache.org> wrote:
>> On Tue, Jan 21, 2014 at 10:25 AM, Ralph Goers <ralph.goers@dslextreme.com>
wrote:
>> 
>> I tend to agree that there is ambiguity between TRACE and VERBOSE, but I have no
problem adding it if it means end users will have more flexibility with little cost.
>> 
>> 
>> I think this is meaningless flexibility. It smells of adding a feature without a
good reason. Imagine the conversations people will have to explain the difference between
TRACE and VERBOSE. I can't think of any good universal justification for its use that demands
an addition to log4j.
>> 
>> If you do not like it, do not use it ;)  
>> 
>> This is best reserved for a personal extension.
>> 
>> Which is not possible since Level is an enum, hence this discussion before the API
freezes.
>> 
>> Gary 
>> 
>> 
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org 
>> Java Persistence with Hibernate, Second Edition
>> JUnit in Action, Second Edition
>> Spring Batch in Action
>> Blog: http://garygregory.wordpress.com 
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>> 
>> 
>> 
>> -- 
>> Cheers,
>> Paul
>> 
>> 
>> 
>> -- 
>> Cheers,
>> Paul
> 
> 
> 
> 
> -- 
> Cheers,
> Paul


Mime
View raw message