[slf4j-dev] NOPLogger methods are final?

Eric Crahen eric.crahen.lists at gmail.com
Thu Feb 15 22:41:45 CET 2007


On 2/15/07, Boris Unckel <boris.unckel.mlg at gmx.net> wrote:

I think for a common API like SLF4J it is very good to have implementations
> final:
>
> SLF4Js goal is to be used in libraries, other APIs and applications. If
> there is need to change things,
> the interfaces have to be stable. The implementations should still have
> the chance to be changed WITHOUT
> heavily caring about possible inherited classes.
>

This is a "no-op" logger. I've carefully considered the fact that the
inherited implementations of all these components do nothing, and now for
the purposes of a test case I would like to add some assertions.

I.e. this is one major problem in the development of log4j - there is so
> much usage that each very little change
> has to be proven binary compatible. Thousands of people did not care about
> using just interfaces and the SPI,
> they just hacked "quick and dirty" with inheritation of classes which were
> created with internal use intention.
>

My code is still written only against interfaces. I'm extending an
implementation I've chosen to use for a test case.


public void testWarningsAreLogged() {

  final boolean warned[] = new boolean[] { false };

  Logger logger = new  NOOPLogger() {

    public boolean isWarnEnabled() { return true; }
    public void warn(String msg, Throwable cause) { warned[0] = true; }

  };

  // TEST SOMETHING
  assertTrue(warned[0], "A warning was not logged");

}

I think this is a faily useful and straightforward test case that I can not
write today.

If someone has need to change something, the license offers full rights to
> do that. Make a copy and change it.
> Although there is the decorator pattern....
>

I can tell you why I don't want to do the decorator pattern.

The Logger and Marker APIs are actually quite lengthy and its more than a
few lines of code to implement them. To write the test above I had to create
a NullLogger and implement 49 methods that did nothing; which the NOPLogger
already does (attached). I don't see any value in keeping the methods of
NOPLogger final.


-- 

- Eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://qos.ch/pipermail/slf4j-dev/attachments/20070215/6c0db658/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NullLogger.java
Type: application/octet-stream
Size: 2894 bytes
Desc: not available
URL: <http://qos.ch/pipermail/slf4j-dev/attachments/20070215/6c0db658/attachment.obj>


More information about the slf4j-dev mailing list