[slf4j-user] Recommendation for library writers: use thiscopy and paste wrapper around SLF4j to avoid default static initialization

Ceki Gülcü ceki at qos.ch
Fri Mar 17 21:36:37 CET 2017


Hi Adam,

Using ServiceLoader.load(LoggerService.class) is quite a good idea. I 
think we will have to go that way in future versions of SLF4J to be 
compatible with Java 9.

I suppose your library code no longer invokes 
org.slf4j.LoggerFactory.getLogger().  How do you use LoggerService in 
your libraries?

On 3/17/2017 16:51, Adam Gent wrote:
> Many library writers want to use SLF4j but may want to avoid the
> default initialization and binding process. In fact if it is a library
> and not a framework I recommend something like what I'm proposing.
>
> I have written a single very small copy and paste class that you can
> put in your own library to avoid default SLF4J initialization while
> allowing consumers of your library to pick whatever SLF4J
> initialization they like through the ServiceLoader mechanism. The
> class is meant to be copied and pasted such that you pick your own
> package (namespace) for the ServiceLoader part.
>
> The code is available at this github gist:
>
> https://gist.github.com/agentgt/28dc6e9724cb8b96ca08fc147476a7de
>
>
> There are several reasons why if you are a library writer to consider
> this pattern:
>
>  * Often library users don't want to see the annoying default missing
> slf4 binding messages
>  * Performance reasons. By defaulting to NOP you prevent accidental
> performance problems by a user of the library.
>  * You allow for even greater logging configuration and separation
> than possible with SL4J. For example one library could be configured
> to use a Logback SLF4J and another Log4j legacy SLF4J.
>  * If the library used to configured a down stream logging framework
> (ie logback) you might need interception (ie SubstituteLogger).
>
> Thoughts?
>
> I'm hoping perhaps the SL4J documentation recommend something like
> this for library writers.
>
> -Adam
>


More information about the slf4j-user mailing list