SLF4J is designed as a facade (or abstraction) for various logging concrete logging implementations (see SLF4J documentation for details). The SLF4J has this guidance for libraries:
Embedded components such as libraries or frameworks should not declare a dependency on any SLF4J binding/provider but only depend on slf4j-api.
When a library declares a transitive dependency on a specific binding, that binding is imposed on the end-user negating the purpose of SLF4J. Note that declaring a non-transitive dependency on a binding, for example for testing, does not affect the end-user.
Rather than depending on slf4j-api and allowing consumers to link to a concrete logging provider of their choice at deployment time, this project has an implementation dependency on slf4j-jdk14. I propose depending only on slf4j-api and documenting that consumers should add a dependency on their concrete logging provider of choice.
SLF4J is designed as a facade (or abstraction) for various logging concrete logging implementations (see SLF4J documentation for details). The SLF4J has this guidance for libraries:
Rather than depending on slf4j-api and allowing consumers to link to a concrete logging provider of their choice at deployment time, this project has an implementation dependency on slf4j-jdk14. I propose depending only on slf4j-api and documenting that consumers should add a dependency on their concrete logging provider of choice.