[MRESOLVER-36] Change internal logging to slf4j

diff --git a/maven-resolver-connector-basic/pom.xml b/maven-resolver-connector-basic/pom.xml
index 781d246..0e896bc 100644
--- a/maven-resolver-connector-basic/pom.xml
+++ b/maven-resolver-connector-basic/pom.xml
@@ -60,6 +60,16 @@
       <optional>true</optional>
     </dependency>
     <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+       <groupId>org.slf4j</groupId>
+       <artifactId>slf4j-simple</artifactId>
+       <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>org.sonatype.sisu</groupId>
       <artifactId>sisu-guice</artifactId>
       <classifier>no_aop</classifier>
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
index bc1ee35..87c8191 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
@@ -54,7 +54,6 @@
 import org.eclipse.aether.spi.connector.transport.Transporter;
 import org.eclipse.aether.spi.connector.transport.TransporterProvider;
 import org.eclipse.aether.spi.io.FileProcessor;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.ChecksumFailureException;
 import org.eclipse.aether.transfer.NoRepositoryConnectorException;
 import org.eclipse.aether.transfer.NoRepositoryLayoutException;
@@ -65,6 +64,8 @@
 import org.eclipse.aether.util.ConfigUtils;
 import org.eclipse.aether.util.concurrency.RunnableErrorForwarder;
 import org.eclipse.aether.util.concurrency.WorkerThreadFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -80,7 +81,7 @@
 
     private static final String CONFIG_PROP_SMART_CHECKSUMS = "aether.connector.smartChecksums";
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( BasicRepositoryConnector.class );
 
     private final FileProcessor fileProcessor;
 
@@ -108,8 +109,7 @@
 
     BasicRepositoryConnector( RepositorySystemSession session, RemoteRepository repository,
                                      TransporterProvider transporterProvider, RepositoryLayoutProvider layoutProvider,
-                                     ChecksumPolicyProvider checksumPolicyProvider, FileProcessor fileProcessor,
-                                     Logger logger )
+                                     ChecksumPolicyProvider checksumPolicyProvider, FileProcessor fileProcessor )
         throws NoRepositoryConnectorException
     {
         try
@@ -133,7 +133,6 @@
         this.session = session;
         this.repository = repository;
         this.fileProcessor = fileProcessor;
-        this.logger = logger;
 
         maxThreads = ConfigUtils.getInteger( session, 5, CONFIG_PROP_THREADS, "maven.artifact.threads" );
         smartChecksums = ConfigUtils.getBoolean( session, true, CONFIG_PROP_SMART_CHECKSUMS );
@@ -150,7 +149,7 @@
             ConfigUtils.getInteger( session, ConfigurationProperties.DEFAULT_REQUEST_TIMEOUT,
                                     ConfigurationProperties.REQUEST_TIMEOUT + '.' + repository.getId(),
                                     ConfigurationProperties.REQUEST_TIMEOUT );
-        partialFileFactory = new PartialFile.Factory( resumeDownloads, resumeThreshold, requestTimeout, logger );
+        partialFileFactory = new PartialFile.Factory( resumeDownloads, resumeThreshold, requestTimeout );
     }
 
     private Executor getExecutor( Collection<?> artifacts, Collection<?> metadatas )
@@ -403,7 +402,7 @@
             super( path, listener );
             this.file = requireNonNull( file, "destination file cannot be null" );
             checksumValidator =
-                new ChecksumValidator( logger, file, fileProcessor, this, checksumPolicy, safe( checksums ) );
+                new ChecksumValidator( file, fileProcessor, this, checksumPolicy, safe( checksums ) );
         }
 
         public void checkRemoteAccess()
@@ -438,7 +437,7 @@
             PartialFile partFile = partialFileFactory.newInstance( file, this );
             if ( partFile == null )
             {
-                logger.debug( "Concurrent download of " + file + " just finished, skipping download" );
+                LOGGER.debug( "Concurrent download of {} just finished, skipping download", file );
                 return;
             }
 
@@ -535,13 +534,13 @@
             catch ( IOException e )
             {
                 String msg = "Failed to upload checksums for " + file + ": " + e.getMessage();
-                if ( logger.isDebugEnabled() )
+                if ( LOGGER.isDebugEnabled() )
                 {
-                    logger.warn( msg, e );
+                    LOGGER.warn( msg, e );
                 }
                 else
                 {
-                    logger.warn( msg );
+                    LOGGER.warn( msg );
                 }
             }
         }
@@ -559,13 +558,13 @@
             catch ( Exception e )
             {
                 String msg = "Failed to upload checksum " + location + ": " + e.getMessage();
-                if ( logger.isDebugEnabled() )
+                if ( LOGGER.isDebugEnabled() )
                 {
-                    logger.warn( msg, e );
+                    LOGGER.warn( msg, e );
                 }
                 else
                 {
-                    logger.warn( msg );
+                    LOGGER.warn( msg );
                 }
             }
         }
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnectorFactory.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnectorFactory.java
index c218744..16f547a 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnectorFactory.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnectorFactory.java
@@ -34,9 +34,6 @@
 import org.eclipse.aether.spi.io.FileProcessor;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoRepositoryConnectorException;
 
 /**
@@ -48,9 +45,6 @@
 public final class BasicRepositoryConnectorFactory
     implements RepositoryConnectorFactory, Service
 {
-
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private TransporterProvider transporterProvider;
 
     private RepositoryLayoutProvider layoutProvider;
@@ -73,19 +67,16 @@
 
     @Inject
     BasicRepositoryConnectorFactory( TransporterProvider transporterProvider, RepositoryLayoutProvider layoutProvider,
-                                     ChecksumPolicyProvider checksumPolicyProvider, FileProcessor fileProcessor,
-                                     LoggerFactory loggerFactory )
+                                     ChecksumPolicyProvider checksumPolicyProvider, FileProcessor fileProcessor )
     {
         setTransporterProvider( transporterProvider );
         setRepositoryLayoutProvider( layoutProvider );
         setChecksumPolicyProvider( checksumPolicyProvider );
         setFileProcessor( fileProcessor );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setTransporterProvider( locator.getService( TransporterProvider.class ) );
         setRepositoryLayoutProvider( locator.getService( RepositoryLayoutProvider.class ) );
         setChecksumPolicyProvider( locator.getService( ChecksumPolicyProvider.class ) );
@@ -93,18 +84,6 @@
     }
 
     /**
-     * Sets the logger factory to use for this component.
-     * 
-     * @param loggerFactory The logger factory to use, may be {@code null} to disable logging.
-     * @return This component for chaining, never {@code null}.
-     */
-    public BasicRepositoryConnectorFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, BasicRepositoryConnector.class );
-        return this;
-    }
-
-    /**
      * Sets the transporter provider to use for this component.
      *
      * @param transporterProvider The transporter provider to use, must not be {@code null}.
@@ -173,7 +152,7 @@
         throws NoRepositoryConnectorException
     {
         return new BasicRepositoryConnector( session, repository, transporterProvider, layoutProvider,
-                                             checksumPolicyProvider, fileProcessor, logger );
+                                             checksumPolicyProvider, fileProcessor );
     }
 
 }
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java
index 3b1371d..d3db262 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java
@@ -32,9 +32,10 @@
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
 import org.eclipse.aether.spi.connector.layout.RepositoryLayout.Checksum;
 import org.eclipse.aether.spi.io.FileProcessor;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.ChecksumFailureException;
 import org.eclipse.aether.util.ChecksumUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Performs checksum validation for a downloaded file.
@@ -50,7 +51,7 @@
 
     }
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( ChecksumValidator.class );
 
     private final File dataFile;
 
@@ -66,11 +67,10 @@
 
     private final Map<File, Object> checksumFiles;
 
-    ChecksumValidator( Logger logger, File dataFile, FileProcessor fileProcessor,
+    ChecksumValidator( File dataFile, FileProcessor fileProcessor,
                               ChecksumFetcher checksumFetcher, ChecksumPolicy checksumPolicy,
                               Collection<Checksum> checksums )
     {
-        this.logger = logger;
         this.dataFile = dataFile;
         this.tempFiles = new HashSet<File>();
         this.fileProcessor = fileProcessor;
@@ -213,7 +213,7 @@
         {
             if ( !file.delete() && file.exists() )
             {
-                logger.debug( "Could not delete temorary file " + file );
+                LOGGER.debug( "Could not delete temporary file {}", file );
             }
         }
         tempFiles.clear();
@@ -251,7 +251,7 @@
             }
             catch ( IOException e )
             {
-                logger.debug( "Failed to write checksum file " + checksumFile + ": " + e.getMessage(), e );
+                LOGGER.debug( "Failed to write checksum file {}: {}", checksumFile, e.getMessage(), e );
             }
         }
         checksumFiles.clear();
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
index 018e2d5..8b8dcfe 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/PartialFile.java
@@ -19,6 +19,9 @@
  * under the License.
  */
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
@@ -29,8 +32,6 @@
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.eclipse.aether.spi.log.Logger;
-
 /**
  * A partially downloaded file with optional support for resume. If resume is enabled, a well-known location is used for
  * the partial file in combination with a lock file to prevent concurrent requests from corrupting it (and wasting
@@ -61,16 +62,16 @@
 
         private final AtomicBoolean concurrent;
 
-        LockFile( File partFile, int requestTimeout, RemoteAccessChecker checker, Logger logger )
+        LockFile( File partFile, int requestTimeout, RemoteAccessChecker checker )
             throws Exception
         {
             lockFile = new File( partFile.getPath() + EXT_LOCK );
             concurrent = new AtomicBoolean( false );
-            lock = lock( lockFile, partFile, requestTimeout, checker, logger, concurrent );
+            lock = lock( lockFile, partFile, requestTimeout, checker, concurrent );
         }
 
         private static FileLock lock( File lockFile, File partFile, int requestTimeout, RemoteAccessChecker checker,
-                                      Logger logger, AtomicBoolean concurrent )
+                                      AtomicBoolean concurrent )
             throws Exception
         {
             boolean interrupted = false;
@@ -97,7 +98,7 @@
                              * at least knows about the file and is accessible to us.
                              */
                             checker.checkRemoteAccess();
-                            logger.debug( "Concurrent download of " + partFile + " in progress, awaiting completion" );
+                            LOGGER.debug( "Concurrent download of {} in progress, awaiting completion", partFile );
                         }
                         lastLength = currentLength;
                         lastTime = currentTime;
@@ -257,14 +258,13 @@
 
         private final int requestTimeout;
 
-        private final Logger logger;
+        private static final Logger LOGGER = LoggerFactory.getLogger( Factory.class );
 
-        Factory( boolean resume, long resumeThreshold, int requestTimeout, Logger logger )
+        Factory( boolean resume, long resumeThreshold, int requestTimeout )
         {
             this.resume = resume;
             this.resumeThreshold = resumeThreshold;
             this.requestTimeout = requestTimeout;
-            this.logger = logger;
         }
 
         public PartialFile newInstance( File dstFile, RemoteAccessChecker checker )
@@ -275,7 +275,7 @@
                 File partFile = new File( dstFile.getPath() + EXT_PART );
 
                 long reqTimestamp = System.currentTimeMillis();
-                LockFile lockFile = new LockFile( partFile, requestTimeout, checker, logger );
+                LockFile lockFile = new LockFile( partFile, requestTimeout, checker );
                 if ( lockFile.isConcurrent() && dstFile.lastModified() >= reqTimestamp - 100L )
                 {
                     lockFile.close();
@@ -287,12 +287,12 @@
                     {
                         throw new IOException( partFile.exists() ? "Path exists but is not a file" : "Unknown error" );
                     }
-                    return new PartialFile( partFile, lockFile, resumeThreshold, logger );
+                    return new PartialFile( partFile, lockFile, resumeThreshold );
                 }
                 catch ( IOException e )
                 {
                     lockFile.close();
-                    logger.debug( "Cannot create resumable file " + partFile.getAbsolutePath() + ": " + e );
+                    LOGGER.debug( "Cannot create resumable file {}: {}", partFile.getAbsolutePath(), e.getMessage(), e );
                     // fall through and try non-resumable/temporary file location
                 }
             }
@@ -300,7 +300,7 @@
             File tempFile =
                 File.createTempFile( dstFile.getName() + '-' + UUID.randomUUID().toString().replace( "-", "" ), ".tmp",
                                      dstFile.getParentFile() );
-            return new PartialFile( tempFile, logger );
+            return new PartialFile( tempFile );
         }
 
     }
@@ -311,19 +311,18 @@
 
     private final long threshold;
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( PartialFile.class );
 
-    private PartialFile( File partFile, Logger logger )
+    private PartialFile( File partFile )
     {
-        this( partFile, null, 0L, logger );
+        this( partFile, null, 0L );
     }
 
-    private PartialFile( File partFile, LockFile lockFile, long threshold, Logger logger )
+    private PartialFile( File partFile, LockFile lockFile, long threshold )
     {
         this.partFile = partFile;
         this.lockFile = lockFile;
         this.threshold = threshold;
-        this.logger = logger;
     }
 
     public File getFile()
@@ -342,7 +341,7 @@
         {
             if ( !partFile.delete() && partFile.exists() )
             {
-                logger.debug( "Could not delete temorary file " + partFile );
+                LOGGER.debug( "Could not delete temporary file {}", partFile );
             }
         }
         if ( lockFile != null )
diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
index 6d67768..6d36efa 100644
--- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
+++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java
@@ -33,7 +33,6 @@
 
 import org.eclipse.aether.internal.test.util.TestFileProcessor;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
 import org.eclipse.aether.spi.connector.layout.RepositoryLayout;
 import org.eclipse.aether.transfer.ChecksumFailureException;
@@ -196,8 +195,7 @@
 
     private ChecksumValidator newValidator( String... algos )
     {
-        return new ChecksumValidator( new TestLoggerFactory().getLogger( "" ), dataFile, new TestFileProcessor(),
-                                      fetcher, policy, newChecksums( algos ) );
+        return new ChecksumValidator( dataFile, new TestFileProcessor(), fetcher, policy, newChecksums( algos ) );
     }
 
     private Map<String, ?> checksums( String... algoDigestPairs )
diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/PartialFileTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/PartialFileTest.java
index 61a83a0..b1e8e4d 100644
--- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/PartialFileTest.java
+++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/PartialFileTest.java
@@ -35,7 +35,6 @@
 import java.util.concurrent.CountDownLatch;
 
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -212,8 +211,7 @@
         throws Exception
     {
         PartialFile.Factory factory =
-            new PartialFile.Factory( resumeThreshold >= 0L, resumeThreshold, requestTimeout,
-                                     new TestLoggerFactory().getLogger( "" ) );
+            new PartialFile.Factory( resumeThreshold >= 0L, resumeThreshold, requestTimeout );
         PartialFile partFile = factory.newInstance( dstFile, remoteAccessChecker );
         if ( partFile != null )
         {
diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml b/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
index 758ea17..99a1150 100644
--- a/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
+++ b/maven-resolver-demos/maven-resolver-demo-snippets/pom.xml
@@ -107,5 +107,15 @@
       <classifier>no_aop</classifier>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/manual/ManualRepositorySystemFactory.java b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/manual/ManualRepositorySystemFactory.java
index 04103d6..06b2a59 100644
--- a/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/manual/ManualRepositorySystemFactory.java
+++ b/maven-resolver-demos/maven-resolver-demo-snippets/src/main/java/org/apache/maven/resolver/examples/manual/ManualRepositorySystemFactory.java
@@ -27,6 +27,8 @@
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
 import org.eclipse.aether.transport.file.FileTransporterFactory;
 import org.eclipse.aether.transport.http.HttpTransporterFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A factory for repository system instances that employs Maven Artifact Resolver's built-in service locator
@@ -34,6 +36,7 @@
  */
 public class ManualRepositorySystemFactory
 {
+    private static final Logger LOGGER = LoggerFactory.getLogger( ManualRepositorySystemFactory.class );
 
     public static RepositorySystem newRepositorySystem()
     {
@@ -52,7 +55,8 @@
             @Override
             public void serviceCreationFailed( Class<?> type, Class<?> impl, Throwable exception )
             {
-                exception.printStackTrace();
+               LOGGER.error( "Service creation failed for {} implementation {}: {}",
+                        type, impl, exception.getMessage(), exception );
             }
         } );
 
diff --git a/maven-resolver-impl/pom.xml b/maven-resolver-impl/pom.xml
index 5864ef0..ddfa9fc 100644
--- a/maven-resolver-impl/pom.xml
+++ b/maven-resolver-impl/pom.xml
@@ -79,6 +79,11 @@
       <optional>true</optional>
     </dependency>
     <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
index 7d30cb3..37f73e8 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/DefaultServiceLocator.java
@@ -215,10 +215,7 @@
         addService( LocalRepositoryProvider.class, DefaultLocalRepositoryProvider.class );
         addService( LocalRepositoryManagerFactory.class, SimpleLocalRepositoryManagerFactory.class );
         addService( LocalRepositoryManagerFactory.class, EnhancedLocalRepositoryManagerFactory.class );
-        if ( Slf4jLoggerFactory.isSlf4jAvailable() )
-        {
-            addService( LoggerFactory.class, Slf4jLoggerFactory.class );
-        }
+        addService( LoggerFactory.class, Slf4jLoggerFactory.class );
     }
 
     private <T> Entry<T> getEntry( Class<T> type, boolean create )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
index 3fb7451..002e4b6 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/guice/AetherModule.java
@@ -70,7 +70,6 @@
 import org.eclipse.aether.spi.io.FileProcessor;
 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
 import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.slf4j.ILoggerFactory;
 
 import com.google.inject.AbstractModule;
@@ -146,21 +145,9 @@
         .to( SimpleLocalRepositoryManagerFactory.class ).in( Singleton.class );
         bind( LocalRepositoryManagerFactory.class ).annotatedWith( Names.named( "enhanced" ) ) //
         .to( EnhancedLocalRepositoryManagerFactory.class ).in( Singleton.class );
-        if ( Slf4jLoggerFactory.isSlf4jAvailable() )
-        {
-            bindSlf4j();
-        }
-        else
-        {
-            bind( LoggerFactory.class ) //
-            .toInstance( NullLoggerFactory.INSTANCE );
-        }
 
-    }
-
-    private void bindSlf4j()
-    {
         install( new Slf4jModule() );
+
     }
 
     @Provides
@@ -168,7 +155,7 @@
     Set<LocalRepositoryManagerFactory> provideLocalRepositoryManagerFactories( @Named( "simple" ) LocalRepositoryManagerFactory simple,
                                                                                @Named( "enhanced" ) LocalRepositoryManagerFactory enhanced )
     {
-        Set<LocalRepositoryManagerFactory> factories = new HashSet<LocalRepositoryManagerFactory>();
+        Set<LocalRepositoryManagerFactory> factories = new HashSet<>();
         factories.add( simple );
         factories.add( enhanced );
         return Collections.unmodifiableSet( factories );
@@ -178,7 +165,7 @@
     @Singleton
     Set<RepositoryLayoutFactory> provideRepositoryLayoutFactories( @Named( "maven2" ) RepositoryLayoutFactory maven2 )
     {
-        Set<RepositoryLayoutFactory> factories = new HashSet<RepositoryLayoutFactory>();
+        Set<RepositoryLayoutFactory> factories = new HashSet<>();
         factories.add( maven2 );
         return Collections.unmodifiableSet( factories );
     }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/AbstractChecksumPolicy.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/AbstractChecksumPolicy.java
index 368e31b..7fe0822 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/AbstractChecksumPolicy.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/AbstractChecksumPolicy.java
@@ -20,24 +20,21 @@
  */
 
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.ChecksumFailureException;
 import org.eclipse.aether.transfer.TransferResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 abstract class AbstractChecksumPolicy
     implements ChecksumPolicy
-
 {
 
-    protected final Logger logger;
+    protected final Logger logger = LoggerFactory.getLogger( getClass() );
 
     protected final TransferResource resource;
 
-    protected AbstractChecksumPolicy( LoggerFactory loggerFactory, TransferResource resource )
+    protected AbstractChecksumPolicy( TransferResource resource )
     {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
         this.resource = resource;
     }
 
@@ -58,7 +55,7 @@
     public void onChecksumError( String algorithm, int kind, ChecksumFailureException exception )
         throws ChecksumFailureException
     {
-        logger.debug( "Could not validate " + algorithm + " checksum for " + resource.getResourceName(), exception );
+        logger.debug( "Could not validate {} checksum for {}", algorithm, resource.getResourceName(), exception );
     }
 
     public void onNoMoreChecksums()
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java
index 9ccffc8..c4745c5 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultArtifactResolver.java
@@ -69,14 +69,13 @@
 import org.eclipse.aether.spi.io.FileProcessor;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.ArtifactNotFoundException;
 import org.eclipse.aether.transfer.ArtifactTransferException;
 import org.eclipse.aether.transfer.NoRepositoryConnectorException;
 import org.eclipse.aether.transfer.RepositoryOfflineException;
 import org.eclipse.aether.util.ConfigUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -87,7 +86,7 @@
 
     private static final String CONFIG_PROP_SNAPSHOT_NORMALIZATION = "aether.artifactResolver.snapshotNormalization";
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultArtifactResolver.class );
 
     private FileProcessor fileProcessor;
 
@@ -115,7 +114,7 @@
                              VersionResolver versionResolver, UpdateCheckManager updateCheckManager,
                              RepositoryConnectorProvider repositoryConnectorProvider,
                              RemoteRepositoryManager remoteRepositoryManager, SyncContextFactory syncContextFactory,
-                             OfflineController offlineController, LoggerFactory loggerFactory )
+                             OfflineController offlineController )
     {
         setFileProcessor( fileProcessor );
         setRepositoryEventDispatcher( repositoryEventDispatcher );
@@ -125,12 +124,10 @@
         setRemoteRepositoryManager( remoteRepositoryManager );
         setSyncContextFactory( syncContextFactory );
         setOfflineController( offlineController );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setFileProcessor( locator.getService( FileProcessor.class ) );
         setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
         setVersionResolver( locator.getService( VersionResolver.class ) );
@@ -141,12 +138,6 @@
         setOfflineController( locator.getService( OfflineController.class ) );
     }
 
-    public DefaultArtifactResolver setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultArtifactResolver setFileProcessor( FileProcessor fileProcessor )
     {
         this.fileProcessor = requireNonNull( fileProcessor, "file processor cannot be null" );
@@ -348,7 +339,7 @@
             }
             else if ( local.getFile() != null )
             {
-                logger.debug( "Verifying availability of " + local.getFile() + " from " + repos );
+                LOGGER.debug( "Verifying availability of {} from {}", local.getFile(), repos );
             }
 
             AtomicBoolean resolved = new AtomicBoolean( false );
@@ -531,7 +522,7 @@
             ArtifactDownload download = new ArtifactDownload();
             download.setArtifact( artifact );
             download.setRequestContext( item.request.getRequestContext() );
-            download.setListener( SafeTransferListener.wrap( session, logger ) );
+            download.setListener( SafeTransferListener.wrap( session ) );
             download.setTrace( item.trace );
             if ( item.local.getFile() != null )
             {
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java
index 20c0484..2f96646 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProvider.java
@@ -29,15 +29,13 @@
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.TransferResource;
 
 /**
  */
 @Named
 public final class DefaultChecksumPolicyProvider
-    implements ChecksumPolicyProvider, Service
+    implements ChecksumPolicyProvider
 {
 
     private static final int ORDINAL_IGNORE = 0;
@@ -46,30 +44,11 @@
 
     private static final int ORDINAL_FAIL = 2;
 
-    private LoggerFactory loggerFactory = NullLoggerFactory.INSTANCE;
-
     public DefaultChecksumPolicyProvider()
     {
         // enables default constructor
     }
 
-    @Inject
-    DefaultChecksumPolicyProvider( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    public DefaultChecksumPolicyProvider setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.loggerFactory = loggerFactory;
-        return this;
-    }
-
     public ChecksumPolicy newChecksumPolicy( RepositorySystemSession session, RemoteRepository repository,
                                              TransferResource resource, String policy )
     {
@@ -79,9 +58,9 @@
         }
         if ( RepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
         {
-            return new FailChecksumPolicy( loggerFactory, resource );
+            return new FailChecksumPolicy( resource );
         }
-        return new WarnChecksumPolicy( loggerFactory, resource );
+        return new WarnChecksumPolicy( resource );
     }
 
     public String getEffectiveChecksumPolicy( RepositorySystemSession session, String policy1, String policy2 )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDeployer.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDeployer.java
index f57a186..194ce30 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDeployer.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDeployer.java
@@ -64,9 +64,6 @@
 import org.eclipse.aether.spi.io.FileProcessor;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.ArtifactTransferException;
 import org.eclipse.aether.transfer.MetadataNotFoundException;
 import org.eclipse.aether.transfer.MetadataTransferException;
@@ -81,9 +78,6 @@
 public class DefaultDeployer
     implements Deployer, Service
 {
-
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private FileProcessor fileProcessor;
 
     private RepositoryEventDispatcher repositoryEventDispatcher;
@@ -110,7 +104,7 @@
                      RepositoryConnectorProvider repositoryConnectorProvider,
                      RemoteRepositoryManager remoteRepositoryManager, UpdateCheckManager updateCheckManager,
                      Set<MetadataGeneratorFactory> metadataFactories, SyncContextFactory syncContextFactory,
-                     OfflineController offlineController, LoggerFactory loggerFactory )
+                     OfflineController offlineController )
     {
         setFileProcessor( fileProcessor );
         setRepositoryEventDispatcher( repositoryEventDispatcher );
@@ -119,13 +113,11 @@
         setUpdateCheckManager( updateCheckManager );
         setMetadataGeneratorFactories( metadataFactories );
         setSyncContextFactory( syncContextFactory );
-        setLoggerFactory( loggerFactory );
         setOfflineController( offlineController );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setFileProcessor( locator.getService( FileProcessor.class ) );
         setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
         setRepositoryConnectorProvider( locator.getService( RepositoryConnectorProvider.class ) );
@@ -136,12 +128,6 @@
         setOfflineController( locator.getService( OfflineController.class ) );
     }
 
-    public DefaultDeployer setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultDeployer setFileProcessor( FileProcessor fileProcessor )
     {
         this.fileProcessor = requireNonNull( fileProcessor, "file processor cannot be null" );
@@ -282,7 +268,7 @@
 
                 ArtifactUpload upload = new ArtifactUpload( artifact, artifact.getFile() );
                 upload.setTrace( trace );
-                upload.setListener( new ArtifactUploadListener( catapult, upload, logger ) );
+                upload.setListener( new ArtifactUploadListener( catapult, upload ) );
                 artifactUploads.add( upload );
             }
 
@@ -390,7 +376,7 @@
                 download.setMetadata( metadata );
                 download.setFile( dstFile );
                 download.setChecksumPolicy( policy.getChecksumPolicy() );
-                download.setListener( SafeTransferListener.wrap( session, logger ) );
+                download.setListener( SafeTransferListener.wrap( session ) );
                 download.setTrace( catapult.getTrace() );
                 connector.get( null, Arrays.asList( download ) );
 
@@ -461,7 +447,7 @@
 
         MetadataUpload upload = new MetadataUpload( metadata, dstFile );
         upload.setTrace( catapult.getTrace() );
-        upload.setListener( new MetadataUploadListener( catapult, upload, logger ) );
+        upload.setListener( new MetadataUploadListener( catapult, upload ) );
         metadataUploads.add( upload );
     }
 
@@ -559,9 +545,9 @@
 
         private final ArtifactUpload transfer;
 
-        ArtifactUploadListener( EventCatapult catapult, ArtifactUpload transfer, Logger logger )
+        ArtifactUploadListener( EventCatapult catapult, ArtifactUpload transfer )
         {
-            super( catapult.getSession(), logger );
+            super( catapult.getSession() );
             this.catapult = catapult;
             this.transfer = transfer;
         }
@@ -598,9 +584,9 @@
 
         private final MetadataUpload transfer;
 
-        MetadataUploadListener( EventCatapult catapult, MetadataUpload transfer, Logger logger )
+        MetadataUploadListener( EventCatapult catapult, MetadataUpload transfer )
         {
-            super( catapult.getSession(), logger );
+            super( catapult.getSession() );
             this.catapult = catapult;
             this.transfer = transfer;
         }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultInstaller.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultInstaller.java
index a419fc3..7cd14d0 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultInstaller.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultInstaller.java
@@ -52,9 +52,8 @@
 import org.eclipse.aether.spi.io.FileProcessor;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -63,7 +62,7 @@
     implements Installer, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultInstaller.class );
 
     private FileProcessor fileProcessor;
 
@@ -80,31 +79,22 @@
 
     @Inject
     DefaultInstaller( FileProcessor fileProcessor, RepositoryEventDispatcher repositoryEventDispatcher,
-                      Set<MetadataGeneratorFactory> metadataFactories, SyncContextFactory syncContextFactory,
-                      LoggerFactory loggerFactory )
+                      Set<MetadataGeneratorFactory> metadataFactories, SyncContextFactory syncContextFactory )
     {
         setFileProcessor( fileProcessor );
         setRepositoryEventDispatcher( repositoryEventDispatcher );
         setMetadataGeneratorFactories( metadataFactories );
         setSyncContextFactory( syncContextFactory );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setFileProcessor( locator.getService( FileProcessor.class ) );
         setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
         setMetadataGeneratorFactories( locator.getServices( MetadataGeneratorFactory.class ) );
         setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
     }
 
-    public DefaultInstaller setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultInstaller setFileProcessor( FileProcessor fileProcessor )
     {
         this.fileProcessor = requireNonNull( fileProcessor, "file processor cannot be null" );
@@ -269,7 +259,7 @@
             }
             else
             {
-                logger.debug( "Skipped re-installing " + srcFile + " to " + dstFile + ", seems unchanged" );
+                LOGGER.debug( "Skipped re-installing {} to {}, seems unchanged", srcFile, dstFile );
             }
 
             lrm.add( session, new LocalArtifactRegistration( artifact ) );
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java
index ea89804..6c80e4b 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultLocalRepositoryProvider.java
@@ -36,9 +36,8 @@
 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -47,7 +46,7 @@
     implements LocalRepositoryProvider, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultLocalRepositoryProvider.class );
 
     private Collection<LocalRepositoryManagerFactory> managerFactories = new ArrayList<LocalRepositoryManagerFactory>();
 
@@ -57,24 +56,16 @@
     }
 
     @Inject
-    DefaultLocalRepositoryProvider( Set<LocalRepositoryManagerFactory> factories, LoggerFactory loggerFactory )
+    DefaultLocalRepositoryProvider( Set<LocalRepositoryManagerFactory> factories )
     {
         setLocalRepositoryManagerFactories( factories );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setLocalRepositoryManagerFactories( locator.getServices( LocalRepositoryManagerFactory.class ) );
     }
 
-    public DefaultLocalRepositoryProvider setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultLocalRepositoryProvider addLocalRepositoryManagerFactory( LocalRepositoryManagerFactory factory )
     {
         managerFactories.add( requireNonNull( factory, "local repository manager factory cannot be null" ) );
@@ -111,7 +102,7 @@
             {
                 LocalRepositoryManager manager = factory.getComponent().newInstance( session, repository );
 
-                if ( logger.isDebugEnabled() )
+                if ( LOGGER.isDebugEnabled() )
                 {
                     StringBuilder buffer = new StringBuilder( 256 );
                     buffer.append( "Using manager " ).append( manager.getClass().getSimpleName() );
@@ -119,7 +110,7 @@
                     buffer.append( " with priority " ).append( factory.getPriority() );
                     buffer.append( " for " ).append( repository.getBasedir() );
 
-                    logger.debug( buffer.toString() );
+                    LOGGER.debug( buffer.toString() );
                 }
 
                 return manager;
@@ -130,12 +121,12 @@
                 errors.add( e );
             }
         }
-        if ( logger.isDebugEnabled() && errors.size() > 1 )
+        if ( LOGGER.isDebugEnabled() && errors.size() > 1 )
         {
             String msg = "Could not obtain local repository manager for " + repository;
             for ( Exception e : errors )
             {
-                logger.debug( msg, e );
+                LOGGER.debug( msg, e );
             }
         }
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
index 509b3b1..244fc5a 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultMetadataResolver.java
@@ -65,9 +65,6 @@
 import org.eclipse.aether.spi.connector.RepositoryConnector;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.MetadataNotFoundException;
 import org.eclipse.aether.transfer.MetadataTransferException;
 import org.eclipse.aether.transfer.NoRepositoryConnectorException;
@@ -85,8 +82,6 @@
 
     private static final String CONFIG_PROP_THREADS = "aether.metadataResolver.threads";
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private RepositoryEventDispatcher repositoryEventDispatcher;
 
     private UpdateCheckManager updateCheckManager;
@@ -109,7 +104,7 @@
                              UpdateCheckManager updateCheckManager,
                              RepositoryConnectorProvider repositoryConnectorProvider,
                              RemoteRepositoryManager remoteRepositoryManager, SyncContextFactory syncContextFactory,
-                             OfflineController offlineController, LoggerFactory loggerFactory )
+                             OfflineController offlineController )
     {
         setRepositoryEventDispatcher( repositoryEventDispatcher );
         setUpdateCheckManager( updateCheckManager );
@@ -117,12 +112,10 @@
         setRemoteRepositoryManager( remoteRepositoryManager );
         setSyncContextFactory( syncContextFactory );
         setOfflineController( offlineController );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
         setUpdateCheckManager( locator.getService( UpdateCheckManager.class ) );
         setRepositoryConnectorProvider( locator.getService( RepositoryConnectorProvider.class ) );
@@ -131,12 +124,6 @@
         setOfflineController( locator.getService( OfflineController.class ) );
     }
 
-    public DefaultMetadataResolver setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultMetadataResolver setRepositoryEventDispatcher( RepositoryEventDispatcher repositoryEventDispatcher )
     {
         this.repositoryEventDispatcher = requireNonNull( repositoryEventDispatcher, "repository event dispatcher cannot be null" );
@@ -583,7 +570,7 @@
                 download.setFile( metadataFile );
                 download.setChecksumPolicy( policy );
                 download.setRepositories( repositories );
-                download.setListener( SafeTransferListener.wrap( session, logger ) );
+                download.setListener( SafeTransferListener.wrap( session ) );
                 download.setTrace( trace );
 
                 RepositoryConnector connector =
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultOfflineController.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultOfflineController.java
index 938a9e1..9053d2b 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultOfflineController.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultOfflineController.java
@@ -21,17 +21,11 @@
 
 import java.util.regex.Pattern;
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.impl.OfflineController;
 import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.RepositoryOfflineException;
 import org.eclipse.aether.util.ConfigUtils;
 
@@ -40,7 +34,7 @@
  */
 @Named
 public class DefaultOfflineController
-    implements OfflineController, Service
+    implements OfflineController
 {
 
     static final String CONFIG_PROP_OFFLINE_PROTOCOLS = "aether.offline.protocols";
@@ -49,30 +43,11 @@
 
     private static final Pattern SEP = Pattern.compile( "\\s*,\\s*" );
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     public DefaultOfflineController()
     {
         // enables default constructor
     }
 
-    @Inject
-    DefaultOfflineController( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    public DefaultOfflineController setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public void checkOffline( RepositorySystemSession session, RemoteRepository repository )
         throws RepositoryOfflineException
     {
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
index 60713db..2c17993 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
@@ -42,10 +42,9 @@
 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -87,7 +86,7 @@
 
     }
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultRemoteRepositoryManager.class );
 
     private UpdatePolicyAnalyzer updatePolicyAnalyzer;
 
@@ -100,26 +99,18 @@
 
     @Inject
     DefaultRemoteRepositoryManager( UpdatePolicyAnalyzer updatePolicyAnalyzer,
-                                    ChecksumPolicyProvider checksumPolicyProvider, LoggerFactory loggerFactory )
+                                    ChecksumPolicyProvider checksumPolicyProvider )
     {
         setUpdatePolicyAnalyzer( updatePolicyAnalyzer );
         setChecksumPolicyProvider( checksumPolicyProvider );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setUpdatePolicyAnalyzer( locator.getService( UpdatePolicyAnalyzer.class ) );
         setChecksumPolicyProvider( locator.getService( ChecksumPolicyProvider.class ) );
     }
 
-    public DefaultRemoteRepositoryManager setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultRemoteRepositoryManager setUpdatePolicyAnalyzer( UpdatePolicyAnalyzer updatePolicyAnalyzer )
     {
         this.updatePolicyAnalyzer = requireNonNull( updatePolicyAnalyzer, "update policy analyzer cannot be null" );
@@ -217,7 +208,7 @@
 
     private void logMirror( RepositorySystemSession session, RemoteRepository original, RemoteRepository mirror )
     {
-        if ( !logger.isDebugEnabled() )
+        if ( !LOGGER.isDebugEnabled() )
         {
             return;
         }
@@ -231,8 +222,8 @@
             }
             cache.put( session, key, Boolean.TRUE );
         }
-        logger.debug( "Using mirror " + mirror.getId() + " (" + mirror.getUrl() + ") for " + original.getId() + " ("
-            + original.getUrl() + ")." );
+        LOGGER.debug( "Using mirror {} ({}) for {} ({}).",
+                mirror.getId(), mirror.getUrl(), original.getId(), original.getUrl() );
     }
 
     private String getKey( RemoteRepository repository )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java
index 68f3301..3a828bc 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryConnectorProvider.java
@@ -37,10 +37,9 @@
 import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoRepositoryConnectorException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -49,7 +48,7 @@
     implements RepositoryConnectorProvider, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultRepositoryConnectorProvider.class );
 
     private Collection<RepositoryConnectorFactory> connectorFactories = new ArrayList<RepositoryConnectorFactory>();
 
@@ -59,24 +58,16 @@
     }
 
     @Inject
-    DefaultRepositoryConnectorProvider( Set<RepositoryConnectorFactory> connectorFactories, LoggerFactory loggerFactory )
+    DefaultRepositoryConnectorProvider( Set<RepositoryConnectorFactory> connectorFactories )
     {
         setRepositoryConnectorFactories( connectorFactories );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         connectorFactories = locator.getServices( RepositoryConnectorFactory.class );
     }
 
-    public DefaultRepositoryConnectorProvider setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultRepositoryConnectorProvider addRepositoryConnectorFactory( RepositoryConnectorFactory factory )
     {
         connectorFactories.add( requireNonNull( factory, "repository connector factory cannot be null" ) );
@@ -115,7 +106,7 @@
             {
                 RepositoryConnector connector = factory.getComponent().newInstance( session, repository );
 
-                if ( logger.isDebugEnabled() )
+                if ( LOGGER.isDebugEnabled() )
                 {
                     StringBuilder buffer = new StringBuilder( 256 );
                     buffer.append( "Using connector " ).append( connector.getClass().getSimpleName() );
@@ -141,7 +132,7 @@
                         }
                     }
 
-                    logger.debug( buffer.toString() );
+                    LOGGER.debug( buffer.toString() );
                 }
 
                 return connector;
@@ -152,12 +143,12 @@
                 errors.add( e );
             }
         }
-        if ( logger.isDebugEnabled() && errors.size() > 1 )
+        if ( LOGGER.isDebugEnabled() && errors.size() > 1 )
         {
             String msg = "Could not obtain connector factory for " + repository;
             for ( Exception e : errors )
             {
-                logger.debug( msg, e );
+                LOGGER.debug( msg, e );
             }
         }
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryEventDispatcher.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryEventDispatcher.java
index 9970e62..4b71f43 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryEventDispatcher.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryEventDispatcher.java
@@ -32,9 +32,8 @@
 import org.eclipse.aether.impl.RepositoryEventDispatcher;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -43,7 +42,7 @@
     implements RepositoryEventDispatcher, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultRepositoryEventDispatcher.class );
 
     private Collection<RepositoryListener> listeners = new ArrayList<RepositoryListener>();
 
@@ -53,16 +52,9 @@
     }
 
     @Inject
-    DefaultRepositoryEventDispatcher( Set<RepositoryListener> listeners, LoggerFactory loggerFactory )
+    DefaultRepositoryEventDispatcher( Set<RepositoryListener> listeners )
     {
         setRepositoryListeners( listeners );
-        setLoggerFactory( loggerFactory );
-    }
-
-    public DefaultRepositoryEventDispatcher setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
     }
 
     public DefaultRepositoryEventDispatcher addRepositoryListener( RepositoryListener listener )
@@ -86,7 +78,6 @@
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setRepositoryListeners( locator.getServices( RepositoryListener.class ) );
     }
 
@@ -190,13 +181,13 @@
         String msg =
             "Failed to dispatch repository event to " + listener.getClass().getCanonicalName() + ": " + e.getMessage();
 
-        if ( logger.isDebugEnabled() )
+        if ( LOGGER.isDebugEnabled() )
         {
-            logger.warn( msg, e );
+            LOGGER.warn( msg, e );
         }
         else
         {
-            logger.warn( msg );
+            LOGGER.warn( msg );
         }
     }
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java
index 6f424e8..56bf1ec 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositoryLayoutProvider.java
@@ -35,10 +35,9 @@
 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoRepositoryLayoutException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -47,7 +46,7 @@
     implements RepositoryLayoutProvider, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultRepositoryLayoutProvider.class );
 
     private Collection<RepositoryLayoutFactory> factories = new ArrayList<RepositoryLayoutFactory>();
 
@@ -57,24 +56,16 @@
     }
 
     @Inject
-    DefaultRepositoryLayoutProvider( Set<RepositoryLayoutFactory> layoutFactories, LoggerFactory loggerFactory )
+    DefaultRepositoryLayoutProvider( Set<RepositoryLayoutFactory> layoutFactories )
     {
-        setLoggerFactory( loggerFactory );
         setRepositoryLayoutFactories( layoutFactories );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setRepositoryLayoutFactories( locator.getServices( RepositoryLayoutFactory.class ) );
     }
 
-    public DefaultRepositoryLayoutProvider setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultRepositoryLayoutProvider addRepositoryLayoutFactory( RepositoryLayoutFactory factory )
     {
         factories.add( requireNonNull( factory, "layout factory cannot be null" ) );
@@ -120,12 +111,12 @@
                 errors.add( e );
             }
         }
-        if ( logger.isDebugEnabled() && errors.size() > 1 )
+        if ( LOGGER.isDebugEnabled() && errors.size() > 1 )
         {
             String msg = "Could not obtain layout factory for " + repository;
             for ( Exception e : errors )
             {
-                logger.debug( msg, e );
+                LOGGER.debug( msg, e );
             }
         }
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
index 4269494..6dfd286 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
@@ -79,9 +79,6 @@
 import org.eclipse.aether.resolution.VersionResult;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.util.graph.visitor.FilteringDependencyVisitor;
 import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor;
 
@@ -92,8 +89,6 @@
     implements RepositorySystem, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private VersionResolver versionResolver;
 
     private VersionRangeResolver versionRangeResolver;
@@ -127,7 +122,7 @@
                              ArtifactDescriptorReader artifactDescriptorReader,
                              DependencyCollector dependencyCollector, Installer installer, Deployer deployer,
                              LocalRepositoryProvider localRepositoryProvider, SyncContextFactory syncContextFactory,
-                             RemoteRepositoryManager remoteRepositoryManager, LoggerFactory loggerFactory )
+                             RemoteRepositoryManager remoteRepositoryManager )
     {
         setVersionResolver( versionResolver );
         setVersionRangeResolver( versionRangeResolver );
@@ -140,12 +135,10 @@
         setLocalRepositoryProvider( localRepositoryProvider );
         setSyncContextFactory( syncContextFactory );
         setRemoteRepositoryManager( remoteRepositoryManager );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setVersionResolver( locator.getService( VersionResolver.class ) );
         setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) );
         setArtifactResolver( locator.getService( ArtifactResolver.class ) );
@@ -159,12 +152,6 @@
         setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
     }
 
-    public DefaultRepositorySystem setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultRepositorySystem setVersionResolver( VersionResolver versionResolver )
     {
         this.versionResolver = requireNonNull( versionResolver, "version resolver cannot be null" );
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java
index 7779a6f..e7a1cb8 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultTransporterProvider.java
@@ -35,10 +35,9 @@
 import org.eclipse.aether.spi.connector.transport.TransporterProvider;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoTransporterException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -47,7 +46,7 @@
     implements TransporterProvider, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultTransporterProvider.class );
 
     private Collection<TransporterFactory> factories = new ArrayList<TransporterFactory>();
 
@@ -57,24 +56,16 @@
     }
 
     @Inject
-    DefaultTransporterProvider( Set<TransporterFactory> transporterFactories, LoggerFactory loggerFactory )
+    DefaultTransporterProvider( Set<TransporterFactory> transporterFactories )
     {
-        setLoggerFactory( loggerFactory );
         setTransporterFactories( transporterFactories );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setTransporterFactories( locator.getServices( TransporterFactory.class ) );
     }
 
-    public DefaultTransporterProvider setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultTransporterProvider addTransporterFactory( TransporterFactory factory )
     {
         factories.add( requireNonNull( factory, "transporter factory cannot be null" ) );
@@ -112,14 +103,14 @@
             {
                 Transporter transporter = factory.getComponent().newInstance( session, repository );
 
-                if ( logger.isDebugEnabled() )
+                if ( LOGGER.isDebugEnabled() )
                 {
                     StringBuilder buffer = new StringBuilder( 256 );
                     buffer.append( "Using transporter " ).append( transporter.getClass().getSimpleName() );
                     Utils.appendClassLoader( buffer, transporter );
                     buffer.append( " with priority " ).append( factory.getPriority() );
                     buffer.append( " for " ).append( repository.getUrl() );
-                    logger.debug( buffer.toString() );
+                    LOGGER.debug( buffer.toString() );
                 }
 
                 return transporter;
@@ -130,12 +121,12 @@
                 errors.add( e );
             }
         }
-        if ( logger.isDebugEnabled() && errors.size() > 1 )
+        if ( LOGGER.isDebugEnabled() && errors.size() > 1 )
         {
             String msg = "Could not obtain transporter factory for " + repository;
             for ( Exception e : errors )
             {
-                logger.debug( msg, e );
+                LOGGER.debug( msg, e );
             }
         }
 
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdateCheckManager.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdateCheckManager.java
index f7827a1..4c843be 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdateCheckManager.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdateCheckManager.java
@@ -45,14 +45,13 @@
 import org.eclipse.aether.resolution.ResolutionErrorPolicy;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.ArtifactNotFoundException;
 import org.eclipse.aether.transfer.ArtifactTransferException;
 import org.eclipse.aether.transfer.MetadataNotFoundException;
 import org.eclipse.aether.transfer.MetadataTransferException;
 import org.eclipse.aether.util.ConfigUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -61,7 +60,7 @@
     implements UpdateCheckManager, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultUpdatePolicyAnalyzer.class );
 
     private UpdatePolicyAnalyzer updatePolicyAnalyzer;
 
@@ -87,24 +86,16 @@
     }
 
     @Inject
-    DefaultUpdateCheckManager( UpdatePolicyAnalyzer updatePolicyAnalyzer, LoggerFactory loggerFactory )
+    DefaultUpdateCheckManager( UpdatePolicyAnalyzer updatePolicyAnalyzer )
     {
         setUpdatePolicyAnalyzer( updatePolicyAnalyzer );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setUpdatePolicyAnalyzer( locator.getService( UpdatePolicyAnalyzer.class ) );
     }
 
-    public DefaultUpdateCheckManager setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultUpdateCheckManager setUpdatePolicyAnalyzer( UpdatePolicyAnalyzer updatePolicyAnalyzer )
     {
         this.updatePolicyAnalyzer = requireNonNull( updatePolicyAnalyzer, "update policy analyzer cannot be null" );
@@ -116,11 +107,7 @@
         if ( check.getLocalLastUpdated() != 0
             && !isUpdatedRequired( session, check.getLocalLastUpdated(), check.getPolicy() ) )
         {
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "Skipped remote request for " + check.getItem()
-                    + ", locally installed artifact up-to-date." );
-            }
+            LOGGER.debug( "Skipped remote request for {}, locally installed artifact up-to-date.", check.getItem() );
 
             check.setRequired( false );
             return;
@@ -173,9 +160,9 @@
         }
         else if ( isAlreadyUpdated( session, updateKey ) )
         {
-            if ( logger.isDebugEnabled() )
+            if ( LOGGER.isDebugEnabled() )
             {
-                logger.debug( "Skipped remote request for " + check.getItem()
+                LOGGER.debug( "Skipped remote request for " + check.getItem()
                     + ", already updated during this session." );
             }
 
@@ -191,10 +178,7 @@
         }
         else if ( fileExists )
         {
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "Skipped remote request for " + check.getItem() + ", locally cached artifact up-to-date." );
-            }
+            LOGGER.debug( "Skipped remote request for {}, locally cached artifact up-to-date.", check.getItem() );
 
             check.setRequired( false );
         }
@@ -249,11 +233,7 @@
         if ( check.getLocalLastUpdated() != 0
             && !isUpdatedRequired( session, check.getLocalLastUpdated(), check.getPolicy() ) )
         {
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "Skipped remote request for " + check.getItem()
-                    + ", locally installed metadata up-to-date." );
-            }
+            LOGGER.debug( "Skipped remote request for {} locally installed metadata up-to-date.", check.getItem() );
 
             check.setRequired( false );
             return;
@@ -306,11 +286,7 @@
         }
         else if ( isAlreadyUpdated( session, updateKey ) )
         {
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "Skipped remote request for " + check.getItem()
-                    + ", already updated during this session." );
-            }
+            LOGGER.debug( "Skipped remote request for {}, already updated during this session.", check.getItem() );
 
             check.setRequired( false );
             if ( error != null )
@@ -324,10 +300,7 @@
         }
         else if ( fileExists )
         {
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "Skipped remote request for " + check.getItem() + ", locally cached metadata up-to-date." );
-            }
+            LOGGER.debug( "Skipped remote request for {}, locally cached metadata up-to-date.", check.getItem() );
 
             check.setRequired( false );
         }
@@ -374,7 +347,7 @@
         }
         catch ( NumberFormatException e )
         {
-            logger.debug( "Cannot parse lastUpdated date: \'" + value + "\'. Ignoring.", e );
+            LOGGER.debug( "Cannot parse lastUpdated date: \'{}\'. Ignoring.", value, e );
             return 1;
         }
     }
@@ -386,7 +359,7 @@
 
     private File getTouchFile( Artifact artifact, File artifactFile )
     {
-        return new File( artifactFile.getPath() + ".lastUpdated" );
+        return new File( artifactFile.getPath() + UPDATED_KEY_SUFFIX );
     }
 
     private File getTouchFile( Metadata metadata, File metadataFile )
@@ -533,7 +506,7 @@
 
     private Properties read( File touchFile )
     {
-        Properties props = new TrackingFileManager().setLogger( logger ).read( touchFile );
+        Properties props = new TrackingFileManager().read( touchFile );
         return ( props != null ) ? props : new Properties();
     }
 
@@ -612,7 +585,7 @@
             updates.put( transferKey + UPDATED_KEY_SUFFIX, timestamp );
         }
 
-        return new TrackingFileManager().setLogger( logger ).update( touchFile, updates );
+        return new TrackingFileManager().update( touchFile, updates );
     }
 
 }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdatePolicyAnalyzer.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdatePolicyAnalyzer.java
index c2cdd83..51981cc 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdatePolicyAnalyzer.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultUpdatePolicyAnalyzer.java
@@ -21,49 +21,28 @@
 
 import java.util.Calendar;
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
 import org.eclipse.aether.repository.RepositoryPolicy;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
 @Named
 public class DefaultUpdatePolicyAnalyzer
-    implements UpdatePolicyAnalyzer, Service
+    implements UpdatePolicyAnalyzer
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultUpdatePolicyAnalyzer.class );
 
     public DefaultUpdatePolicyAnalyzer()
     {
         // enables default constructor
     }
 
-    @Inject
-    DefaultUpdatePolicyAnalyzer( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    public DefaultUpdatePolicyAnalyzer setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public String getEffectiveUpdatePolicy( RepositorySystemSession session, String policy1, String policy2 )
     {
         return ordinalOfUpdatePolicy( policy1 ) < ordinalOfUpdatePolicy( policy2 ) ? policy1 : policy2;
@@ -129,8 +108,8 @@
 
             if ( !RepositoryPolicy.UPDATE_POLICY_NEVER.equals( policy ) )
             {
-                logger.warn( "Unknown repository update policy '" + policy + "', assuming '"
-                    + RepositoryPolicy.UPDATE_POLICY_NEVER + "'" );
+                LOGGER.warn( "Unknown repository update policy '{}', assuming '{}'",
+                        policy, RepositoryPolicy.UPDATE_POLICY_NEVER );
             }
         }
 
@@ -149,8 +128,8 @@
         {
             minutes = 24 * 60;
 
-            logger.warn( "Non-parseable repository update policy '" + policy + "', assuming '"
-                + RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":1440'" );
+            LOGGER.warn( "Non-parseable repository update policy '{}', assuming '{}:1440'",
+                    policy, RepositoryPolicy.UPDATE_POLICY_INTERVAL );
         }
         return minutes;
     }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java
index 093815d..5ab8c40 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManager.java
@@ -34,7 +34,6 @@
 import org.eclipse.aether.repository.LocalArtifactRequest;
 import org.eclipse.aether.repository.LocalArtifactResult;
 import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.util.ConfigUtils;
 
 /**
@@ -80,14 +79,6 @@
     }
 
     @Override
-    public EnhancedLocalRepositoryManager setLogger( Logger logger )
-    {
-        super.setLogger( logger );
-        trackingFileManager.setLogger( logger );
-        return this;
-    }
-
-    @Override
     public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
     {
         String path = getPathForArtifact( request.getArtifact(), false );
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerFactory.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerFactory.java
index 904c840..fdf6b38 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerFactory.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/EnhancedLocalRepositoryManagerFactory.java
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
@@ -27,11 +26,6 @@
 import org.eclipse.aether.repository.LocalRepositoryManager;
 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 
 /**
  * Creates enhanced local repository managers for repository types {@code "default"} or {@code "" (automatic)}. Enhanced
@@ -42,11 +36,8 @@
  */
 @Named( "enhanced" )
 public class EnhancedLocalRepositoryManagerFactory
-    implements LocalRepositoryManagerFactory, Service
+    implements LocalRepositoryManagerFactory
 {
-
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private float priority = 10.0f;
 
     public EnhancedLocalRepositoryManagerFactory()
@@ -54,18 +45,12 @@
         // enable no-arg constructor
     }
 
-    @Inject
-    EnhancedLocalRepositoryManagerFactory( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
     public LocalRepositoryManager newInstance( RepositorySystemSession session, LocalRepository repository )
         throws NoLocalRepositoryManagerException
     {
         if ( "".equals( repository.getContentType() ) || "default".equals( repository.getContentType() ) )
         {
-            return new EnhancedLocalRepositoryManager( repository.getBasedir(), session ).setLogger( logger );
+            return new EnhancedLocalRepositoryManager( repository.getBasedir(), session );
         }
         else
         {
@@ -73,17 +58,6 @@
         }
     }
 
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    public EnhancedLocalRepositoryManagerFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, EnhancedLocalRepositoryManager.class );
-        return this;
-    }
-
     public float getPriority()
     {
         return priority;
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/FailChecksumPolicy.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/FailChecksumPolicy.java
index 1293775..c19c006 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/FailChecksumPolicy.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/FailChecksumPolicy.java
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import org.eclipse.aether.spi.log.LoggerFactory;
 import org.eclipse.aether.transfer.ChecksumFailureException;
 import org.eclipse.aether.transfer.TransferResource;
 
@@ -30,9 +29,9 @@
     extends AbstractChecksumPolicy
 {
 
-    FailChecksumPolicy( LoggerFactory loggerFactory, TransferResource resource )
+    FailChecksumPolicy( TransferResource resource )
     {
-        super( loggerFactory, resource );
+        super( resource );
     }
 
     public boolean onTransferChecksumFailure( ChecksumFailureException error )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/LoggerFactoryProvider.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/LoggerFactoryProvider.java
index 3d46490..4a532e2 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/LoggerFactoryProvider.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/LoggerFactoryProvider.java
@@ -25,7 +25,6 @@
 import javax.inject.Singleton;
 
 import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 
 /**
  * Helps Sisu-based applications to pick the right logger factory depending on the classpath.
@@ -42,23 +41,7 @@
 
     public LoggerFactory get()
     {
-        try
-        {
-            LoggerFactory factory = slf4j.get();
-            if ( factory != null )
-            {
-                return factory;
-            }
-        }
-        catch ( LinkageError e )
-        {
-            // fall through
-        }
-        catch ( RuntimeException e )
-        {
-            // fall through
-        }
-        return NullLoggerFactory.INSTANCE;
+            return slf4j.get();
     }
 
 }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SafeTransferListener.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SafeTransferListener.java
index 1ba8a37..147a6a6 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SafeTransferListener.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SafeTransferListener.java
@@ -20,45 +20,44 @@
  */
 
 import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.AbstractTransferListener;
 import org.eclipse.aether.transfer.TransferCancelledException;
 import org.eclipse.aether.transfer.TransferEvent;
 import org.eclipse.aether.transfer.TransferListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class SafeTransferListener
     extends AbstractTransferListener
 {
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( SafeTransferListener.class );
 
     private final TransferListener listener;
 
-    public static TransferListener wrap( RepositorySystemSession session, Logger logger )
+    public static TransferListener wrap( RepositorySystemSession session )
     {
         TransferListener listener = session.getTransferListener();
         if ( listener == null )
         {
             return null;
         }
-        return new SafeTransferListener( listener, logger );
+        return new SafeTransferListener( listener );
     }
 
-    protected SafeTransferListener( RepositorySystemSession session, Logger logger )
+    protected SafeTransferListener( RepositorySystemSession session )
     {
-        this( session.getTransferListener(), logger );
+        this( session.getTransferListener() );
     }
 
-    private SafeTransferListener( TransferListener listener, Logger logger )
+    private SafeTransferListener( TransferListener listener )
     {
         this.listener = listener;
-        this.logger = logger;
     }
 
     private void logError( TransferEvent event, Throwable e )
     {
-        String msg = "Failed to dispatch transfer event '" + event + "' to " + listener.getClass().getCanonicalName();
-        logger.debug( msg, e );
+        LOGGER.debug( "Failed to dispatch transfer event '{}' to {}", event,  listener.getClass().getCanonicalName(), e );
     }
 
     @Override
@@ -71,11 +70,7 @@
             {
                 listener.transferInitiated( event );
             }
-            catch ( RuntimeException e )
-            {
-                logError( event, e );
-            }
-            catch ( LinkageError e )
+            catch ( RuntimeException | LinkageError e )
             {
                 logError( event, e );
             }
@@ -92,11 +87,7 @@
             {
                 listener.transferStarted( event );
             }
-            catch ( RuntimeException e )
-            {
-                logError( event, e );
-            }
-            catch ( LinkageError e )
+            catch ( RuntimeException | LinkageError e )
             {
                 logError( event, e );
             }
@@ -113,11 +104,7 @@
             {
                 listener.transferProgressed( event );
             }
-            catch ( RuntimeException e )
-            {
-                logError( event, e );
-            }
-            catch ( LinkageError e )
+            catch ( RuntimeException | LinkageError e )
             {
                 logError( event, e );
             }
@@ -134,11 +121,7 @@
             {
                 listener.transferCorrupted( event );
             }
-            catch ( RuntimeException e )
-            {
-                logError( event, e );
-            }
-            catch ( LinkageError e )
+            catch ( RuntimeException | LinkageError e )
             {
                 logError( event, e );
             }
@@ -154,11 +137,7 @@
             {
                 listener.transferSucceeded( event );
             }
-            catch ( RuntimeException e )
-            {
-                logError( event, e );
-            }
-            catch ( LinkageError e )
+            catch ( RuntimeException | LinkageError e )
             {
                 logError( event, e );
             }
@@ -174,11 +153,7 @@
             {
                 listener.transferFailed( event );
             }
-            catch ( RuntimeException e )
-            {
-                logError( event, e );
-            }
-            catch ( LinkageError e )
+            catch ( RuntimeException | LinkageError e )
             {
                 logError( event, e );
             }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManager.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManager.java
index d06e425..a00cdaa 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManager.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManager.java
@@ -36,7 +36,6 @@
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.LocalRepositoryManager;
 import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.spi.log.Logger;
 
 /**
  * A local repository manager that realizes the classical Maven 2.0 local repository.
@@ -63,11 +62,6 @@
         repository = new LocalRepository( basedir.getAbsoluteFile(), type );
     }
 
-    public SimpleLocalRepositoryManager setLogger( Logger logger )
-    {
-        return this;
-    }
-
     public LocalRepository getRepository()
     {
         return repository;
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManagerFactory.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManagerFactory.java
index 3c2cf6d..c0426e8 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManagerFactory.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleLocalRepositoryManagerFactory.java
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
@@ -27,22 +26,14 @@
 import org.eclipse.aether.repository.LocalRepositoryManager;
 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 
 /**
  * Creates local repository managers for repository type {@code "simple"}.
  */
 @Named( "simple" )
 public class SimpleLocalRepositoryManagerFactory
-    implements LocalRepositoryManagerFactory, Service
+    implements LocalRepositoryManagerFactory
 {
-
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private float priority;
 
     public SimpleLocalRepositoryManagerFactory()
@@ -50,18 +41,12 @@
         // enable no-arg constructor
     }
 
-    @Inject
-    SimpleLocalRepositoryManagerFactory( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
     public LocalRepositoryManager newInstance( RepositorySystemSession session, LocalRepository repository )
         throws NoLocalRepositoryManagerException
     {
         if ( "".equals( repository.getContentType() ) || "simple".equals( repository.getContentType() ) )
         {
-            return new SimpleLocalRepositoryManager( repository.getBasedir() ).setLogger( logger );
+            return new SimpleLocalRepositoryManager( repository.getBasedir() );
         }
         else
         {
@@ -69,17 +54,6 @@
         }
     }
 
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    public SimpleLocalRepositoryManagerFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, SimpleLocalRepositoryManager.class );
-        return this;
-    }
-
     public float getPriority()
     {
         return priority;
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
index 0e4a18e..4e8a21f 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/TrackingFileManager.java
@@ -19,6 +19,9 @@
  * under the License.
  */
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
@@ -32,22 +35,13 @@
 import java.util.Map;
 import java.util.Properties;
 
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
-
 /**
  * Manages potentially concurrent accesses to a properties file.
  */
 class TrackingFileManager
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
-    public TrackingFileManager setLogger( Logger logger )
-    {
-        this.logger = ( logger != null ) ? logger : NullLoggerFactory.LOGGER;
-        return this;
-    }
+    private static final Logger LOGGER = LoggerFactory.getLogger( TrackingFileManager.class );
 
     public Properties read( File file )
     {
@@ -73,7 +67,7 @@
             }
             catch ( IOException e )
             {
-                logger.warn( "Failed to read tracking file " + file, e );
+                LOGGER.warn( "Failed to read tracking file {}", file, e );
             }
             finally
             {
@@ -94,7 +88,7 @@
             File directory = file.getParentFile();
             if ( !directory.mkdirs() && !directory.exists() )
             {
-                logger.warn( "Failed to create parent directories for tracking file " + file );
+                LOGGER.warn( "Failed to create parent directories for tracking file {}", file );
                 return props;
             }
 
@@ -130,7 +124,7 @@
 
                 ByteArrayOutputStream stream = new ByteArrayOutputStream( 1024 * 2 );
 
-                logger.debug( "Writing tracking file " + file );
+                LOGGER.debug( "Writing tracking file {}", file );
                 props.store( stream, "NOTE: This is a Maven Resolver internal implementation file"
                     + ", its format can be changed without prior notice." );
 
@@ -140,7 +134,7 @@
             }
             catch ( IOException e )
             {
-                logger.warn( "Failed to write tracking file " + file, e );
+                LOGGER.warn( "Failed to write tracking file {}", file, e );
             }
             finally
             {
@@ -162,7 +156,7 @@
             }
             catch ( IOException e )
             {
-                logger.warn( "Error releasing lock for tracking file " + file, e );
+                LOGGER.warn( "Error releasing lock for tracking file {}", file, e );
             }
         }
     }
@@ -177,7 +171,7 @@
             }
             catch ( IOException e )
             {
-                logger.warn( "Error closing tracking file " + file, e );
+                LOGGER.warn( "Error closing tracking file {}", file, e );
             }
         }
     }
@@ -195,7 +189,7 @@
         }
         catch ( IOException e )
         {
-            logger.warn( "Failed to canonicalize path " + file + ": " + e.getMessage() );
+            LOGGER.warn( "Failed to canonicalize path {}: {}", file, e.getMessage() );
             return file.getAbsolutePath().intern();
         }
     }
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/WarnChecksumPolicy.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/WarnChecksumPolicy.java
index 4132a86..32efcf0 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/WarnChecksumPolicy.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/WarnChecksumPolicy.java
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import org.eclipse.aether.spi.log.LoggerFactory;
 import org.eclipse.aether.transfer.ChecksumFailureException;
 import org.eclipse.aether.transfer.TransferResource;
 
@@ -30,9 +29,9 @@
     extends AbstractChecksumPolicy
 {
 
-    WarnChecksumPolicy( LoggerFactory loggerFactory, TransferResource resource )
+    WarnChecksumPolicy( TransferResource resource )
     {
-        super( loggerFactory, resource );
+        super( resource );
     }
 
     public boolean onTransferChecksumFailure( ChecksumFailureException exception )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java
index f96d923..d2ca7d4 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollector.java
@@ -65,13 +65,12 @@
 import org.eclipse.aether.resolution.VersionRangeResult;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.util.ConfigUtils;
 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
 import org.eclipse.aether.util.graph.transformer.TransformationContextKeys;
 import org.eclipse.aether.version.Version;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
@@ -84,7 +83,7 @@
 
     private static final String CONFIG_PROP_MAX_CYCLES = "aether.dependencyCollector.maxCycles";
 
-    private Logger logger = NullLoggerFactory.LOGGER;
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultDependencyCollector.class );
 
     private RemoteRepositoryManager remoteRepositoryManager;
 
@@ -100,28 +99,20 @@
     @Inject
     DefaultDependencyCollector( RemoteRepositoryManager remoteRepositoryManager,
                                 ArtifactDescriptorReader artifactDescriptorReader,
-                                VersionRangeResolver versionRangeResolver, LoggerFactory loggerFactory )
+                                VersionRangeResolver versionRangeResolver )
     {
         setRemoteRepositoryManager( remoteRepositoryManager );
         setArtifactDescriptorReader( artifactDescriptorReader );
         setVersionRangeResolver( versionRangeResolver );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) );
         setArtifactDescriptorReader( locator.getService( ArtifactDescriptorReader.class ) );
         setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) );
     }
 
-    public DefaultDependencyCollector setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
-        return this;
-    }
-
     public DefaultDependencyCollector setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
     {
         this.remoteRepositoryManager = requireNonNull( remoteRepositoryManager, "remote repository provider cannot be null" );
@@ -159,7 +150,7 @@
         List<Dependency> dependencies = request.getDependencies();
         List<Dependency> managedDependencies = request.getManagedDependencies();
 
-        Map<String, Object> stats = logger.isDebugEnabled() ? new LinkedHashMap<String, Object>() : null;
+        Map<String, Object> stats = LOGGER.isDebugEnabled() ? new LinkedHashMap<String, Object>() : null;
         long time1 = System.nanoTime();
 
         DefaultDependencyNode node;
@@ -285,7 +276,7 @@
             long time3 = System.nanoTime();
             stats.put( "DefaultDependencyCollector.collectTime", time2 - time1 );
             stats.put( "DefaultDependencyCollector.transformTime", time3 - time2 );
-            logger.debug( "Dependency collection stats: " + stats );
+            LOGGER.debug( "Dependency collection stats: " + stats );
         }
 
         if ( errorPath != null )
diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/slf4j/package-info.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/slf4j/package-info.java
deleted file mode 100644
index 307c22e..0000000
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/slf4j/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// CHECKSTYLE_OFF: RegexpHeader
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/**
- * The integration with the logging framework <a href="http://www.slf4j.org/" target="_blank">SLF4J</a>. 
- */
-package org.eclipse.aether.internal.impl.slf4j;
-
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/impl/DefaultServiceLocatorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/impl/DefaultServiceLocatorTest.java
index 657b4ac..72317d7 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/impl/DefaultServiceLocatorTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/impl/DefaultServiceLocatorTest.java
@@ -25,10 +25,6 @@
 import java.util.List;
 
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.impl.ArtifactDescriptorReader;
-import org.eclipse.aether.impl.DefaultServiceLocator;
-import org.eclipse.aether.impl.VersionRangeResolver;
-import org.eclipse.aether.impl.VersionResolver;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.junit.Test;
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManagerTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManagerTest.java
index 8bc50d6..f00c480 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManagerTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManagerTest.java
@@ -28,8 +28,6 @@
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
-import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.MirrorSelector;
 import org.eclipse.aether.repository.Proxy;
@@ -61,7 +59,6 @@
         manager = new DefaultRemoteRepositoryManager();
         manager.setUpdatePolicyAnalyzer( new StubUpdatePolicyAnalyzer() );
         manager.setChecksumPolicyProvider( new DefaultChecksumPolicyProvider() );
-        manager.setLoggerFactory( new TestLoggerFactory() );
     }
 
     @After
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java
index 296f829..9eceb40 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java
@@ -37,7 +37,7 @@
     @Before
     public void setup()
     {
-        policy = new FailChecksumPolicy( null, new TransferResource( "null", "file:/dev/null", "file.txt", null, null ) );
+        policy = new FailChecksumPolicy( new TransferResource( "null", "file:/dev/null", "file.txt", null, null ) );
         exception = new ChecksumFailureException( "test" );
     }
 
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java
index 7f64e06..0f7b522 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java
@@ -37,7 +37,7 @@
     @Before
     public void setup()
     {
-        policy = new WarnChecksumPolicy( null, new TransferResource( "null", "file:/dev/null", "file.txt", null, null ) );
+        policy = new WarnChecksumPolicy( new TransferResource( "null", "file:/dev/null", "file.txt", null, null ) );
         exception = new ChecksumFailureException( "test" );
     }
 
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollectorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollectorTest.java
index dc89d9b..0e2d644 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollectorTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/DefaultDependencyCollectorTest.java
@@ -52,7 +52,6 @@
 import org.eclipse.aether.internal.impl.StubRemoteRepositoryManager;
 import org.eclipse.aether.internal.impl.StubVersionRangeResolver;
 import org.eclipse.aether.internal.test.util.DependencyGraphParser;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.resolution.ArtifactDescriptorException;
@@ -103,7 +102,6 @@
         collector.setArtifactDescriptorReader( newReader( "" ) );
         collector.setVersionRangeResolver( new StubVersionRangeResolver() );
         collector.setRemoteRepositoryManager( new StubRemoteRepositoryManager() );
-        collector.setLoggerFactory( new TestLoggerFactory() );
 
         parser = new DependencyGraphParser( "artifact-descriptions/" );
 
diff --git a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java
index b9876da..968c231 100644
--- a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java
+++ b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporter.java
@@ -31,7 +31,6 @@
 import org.eclipse.aether.spi.connector.transport.PeekTask;
 import org.eclipse.aether.spi.connector.transport.PutTask;
 import org.eclipse.aether.spi.connector.transport.TransportTask;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.NoTransporterException;
 import org.eclipse.aether.util.ConfigUtils;
 
@@ -46,7 +45,7 @@
 
     private final ClassLoader classLoader;
 
-    ClasspathTransporter( RepositorySystemSession session, RemoteRepository repository, Logger logger )
+    ClasspathTransporter( RepositorySystemSession session, RemoteRepository repository )
         throws NoTransporterException
     {
         if ( !"classpath".equalsIgnoreCase( repository.getProtocol() ) )
diff --git a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java
index 18db417..a1004be 100644
--- a/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java
+++ b/maven-resolver-transport-classpath/src/main/java/org/eclipse/aether/transport/classpath/ClasspathTransporterFactory.java
@@ -19,18 +19,12 @@
  * under the License.
  */
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.spi.connector.transport.Transporter;
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoTransporterException;
 
 /**
@@ -43,7 +37,7 @@
  */
 @Named( "classpath" )
 public final class ClasspathTransporterFactory
-    implements TransporterFactory, Service
+    implements TransporterFactory
 {
 
     /**
@@ -53,8 +47,6 @@
      */
     public static final String CONFIG_PROP_CLASS_LOADER = "aether.connector.classpath.loader";
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private float priority;
 
     /**
@@ -67,28 +59,6 @@
         // enables default constructor
     }
 
-    @Inject
-    ClasspathTransporterFactory( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    /**
-     * Sets the logger factory to use for this component.
-     * 
-     * @param loggerFactory The logger factory to use, may be {@code null} to disable logging.
-     * @return This component for chaining, never {@code null}.
-     */
-    public ClasspathTransporterFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, ClasspathTransporter.class );
-        return this;
-    }
 
     public float getPriority()
     {
@@ -110,7 +80,7 @@
     public Transporter newInstance( RepositorySystemSession session, RemoteRepository repository )
         throws NoTransporterException
     {
-        return new ClasspathTransporter( session, repository, logger );
+        return new ClasspathTransporter( session, repository );
     }
 
 }
diff --git a/maven-resolver-transport-classpath/src/test/java/org/eclipse/aether/transport/classpath/ClasspathTransporterTest.java b/maven-resolver-transport-classpath/src/test/java/org/eclipse/aether/transport/classpath/ClasspathTransporterTest.java
index 0f7647c..6d7fa32 100644
--- a/maven-resolver-transport-classpath/src/test/java/org/eclipse/aether/transport/classpath/ClasspathTransporterTest.java
+++ b/maven-resolver-transport-classpath/src/test/java/org/eclipse/aether/transport/classpath/ClasspathTransporterTest.java
@@ -28,7 +28,6 @@
 
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.spi.connector.transport.GetTask;
@@ -74,7 +73,7 @@
         throws Exception
     {
         session = TestUtils.newSession();
-        factory = new ClasspathTransporterFactory( new TestLoggerFactory() );
+        factory = new ClasspathTransporterFactory( );
         newTransporter( "classpath:/repository" );
     }
 
diff --git a/maven-resolver-transport-file/pom.xml b/maven-resolver-transport-file/pom.xml
index 239a4e5..ee67018 100644
--- a/maven-resolver-transport-file/pom.xml
+++ b/maven-resolver-transport-file/pom.xml
@@ -76,6 +76,16 @@
       <artifactId>maven-resolver-test-util</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporter.java b/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporter.java
index f79111a..7da42f2 100644
--- a/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporter.java
+++ b/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporter.java
@@ -29,8 +29,9 @@
 import org.eclipse.aether.spi.connector.transport.PeekTask;
 import org.eclipse.aether.spi.connector.transport.PutTask;
 import org.eclipse.aether.spi.connector.transport.TransportTask;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.NoTransporterException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A transporter using {@link java.io.File}.
@@ -39,18 +40,17 @@
     extends AbstractTransporter
 {
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( FileTransporter.class );
 
     private final File basedir;
 
-    FileTransporter( RemoteRepository repository, Logger logger )
+    FileTransporter( RemoteRepository repository )
         throws NoTransporterException
     {
         if ( !"file".equalsIgnoreCase( repository.getProtocol() ) )
         {
             throw new NoTransporterException( repository );
         }
-        this.logger = logger;
         basedir = new File( PathUtils.basedir( repository.getUrl() ) ).getAbsoluteFile();
     }
 
@@ -97,7 +97,7 @@
         {
             if ( !file.delete() && file.exists() )
             {
-                logger.debug( "Could not delete partial file " + file );
+                LOGGER.debug( "Could not delete partial file {}", file );
             }
             throw e;
         }
diff --git a/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java b/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java
index 86ae6fc..bf78a6b 100644
--- a/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java
+++ b/maven-resolver-transport-file/src/main/java/org/eclipse/aether/transport/file/FileTransporterFactory.java
@@ -19,18 +19,12 @@
  * under the License.
  */
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.spi.connector.transport.Transporter;
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoTransporterException;
 
 /**
@@ -38,11 +32,9 @@
  */
 @Named( "file" )
 public final class FileTransporterFactory
-    implements TransporterFactory, Service
+    implements TransporterFactory
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private float priority;
 
     /**
@@ -55,29 +47,6 @@
         // enables default constructor
     }
 
-    @Inject
-    FileTransporterFactory( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    /**
-     * Sets the logger factory to use for this component.
-     * 
-     * @param loggerFactory The logger factory to use, may be {@code null} to disable logging.
-     * @return This component for chaining, never {@code null}.
-     */
-    public FileTransporterFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, FileTransporter.class );
-        return this;
-    }
-
     public float getPriority()
     {
         return priority;
@@ -98,7 +67,7 @@
     public Transporter newInstance( RepositorySystemSession session, RemoteRepository repository )
         throws NoTransporterException
     {
-        return new FileTransporter( repository, logger );
+        return new FileTransporter( repository );
     }
 
 }
diff --git a/maven-resolver-transport-file/src/test/java/org/eclipse/aether/transport/file/FileTransporterTest.java b/maven-resolver-transport-file/src/test/java/org/eclipse/aether/transport/file/FileTransporterTest.java
index dd65bf0..f636644 100644
--- a/maven-resolver-transport-file/src/test/java/org/eclipse/aether/transport/file/FileTransporterTest.java
+++ b/maven-resolver-transport-file/src/test/java/org/eclipse/aether/transport/file/FileTransporterTest.java
@@ -28,7 +28,6 @@
 
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.spi.connector.transport.GetTask;
@@ -76,7 +75,7 @@
         throws Exception
     {
         session = TestUtils.newSession();
-        factory = new FileTransporterFactory( new TestLoggerFactory() );
+        factory = new FileTransporterFactory( );
         repoDir = TestFileUtils.createTempDir();
         TestFileUtils.writeString( new File( repoDir, "file.txt" ), "test" );
         TestFileUtils.writeString( new File( repoDir, "empty.txt" ), "" );
diff --git a/maven-resolver-transport-http/pom.xml b/maven-resolver-transport-http/pom.xml
index 5ce8521..dce3dcd 100644
--- a/maven-resolver-transport-http/pom.xml
+++ b/maven-resolver-transport-http/pom.xml
@@ -125,7 +125,7 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <scope>test</scope>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
diff --git a/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
index 23d8f83..53b3dd0 100644
--- a/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
+++ b/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
@@ -70,10 +70,11 @@
 import org.eclipse.aether.spi.connector.transport.PeekTask;
 import org.eclipse.aether.spi.connector.transport.PutTask;
 import org.eclipse.aether.spi.connector.transport.TransportTask;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.NoTransporterException;
 import org.eclipse.aether.transfer.TransferCancelledException;
 import org.eclipse.aether.util.ConfigUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A transporter for HTTP/HTTPS.
@@ -85,7 +86,7 @@
     private static final Pattern CONTENT_RANGE_PATTERN =
         Pattern.compile( "\\s*bytes\\s+([0-9]+)\\s*-\\s*([0-9]+)\\s*/.*" );
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( HttpTransporter.class );
 
     private final AuthenticationContext repoAuthContext;
 
@@ -103,7 +104,7 @@
 
     private final LocalState state;
 
-    HttpTransporter( RemoteRepository repository, RepositorySystemSession session, Logger logger )
+    HttpTransporter( RemoteRepository repository, RepositorySystemSession session )
         throws NoTransporterException
     {
         if ( !"http".equalsIgnoreCase( repository.getProtocol() )
@@ -111,7 +112,6 @@
         {
             throw new NoTransporterException( repository );
         }
-        this.logger = logger;
         try
         {
             baseUri = new URI( repository.getUrl() ).parseServerAuthority();
@@ -332,7 +332,7 @@
             }
             catch ( IOException e )
             {
-                logger.debug( "Failed to prepare HTTP context", e );
+                LOGGER.debug( "Failed to prepare HTTP context", e );
             }
         }
         if ( put && Boolean.TRUE.equals( state.getWebDav() ) )
@@ -376,7 +376,7 @@
             }
             catch ( IOException e )
             {
-                logger.debug( "Failed to create parent directory " + dirs.get( index ), e );
+                LOGGER.debug( "Failed to create parent directory {}", dirs.get( index ), e );
                 return;
             }
         }
@@ -397,7 +397,7 @@
             }
             catch ( IOException e )
             {
-                logger.debug( "Failed to create parent directory " + dirs.get( index ), e );
+                LOGGER.debug( "Failed to create parent directory {}", dirs.get( index ), e );
                 return;
             }
         }
diff --git a/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporterFactory.java b/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporterFactory.java
index 77d2141..5e329ca 100644
--- a/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporterFactory.java
+++ b/maven-resolver-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporterFactory.java
@@ -19,18 +19,12 @@
  * under the License.
  */
 
-import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.spi.connector.transport.Transporter;
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoTransporterException;
 
 /**
@@ -39,11 +33,9 @@
  */
 @Named( "http" )
 public final class HttpTransporterFactory
-    implements TransporterFactory, Service
+    implements TransporterFactory
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private float priority = 5.0f;
 
     /**
@@ -56,29 +48,6 @@
         // enables default constructor
     }
 
-    @Inject
-    HttpTransporterFactory( LoggerFactory loggerFactory )
-    {
-        setLoggerFactory( loggerFactory );
-    }
-
-    public void initService( ServiceLocator locator )
-    {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
-    }
-
-    /**
-     * Sets the logger factory to use for this component.
-     * 
-     * @param loggerFactory The logger factory to use, may be {@code null} to disable logging.
-     * @return This component for chaining, never {@code null}.
-     */
-    public HttpTransporterFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, HttpTransporter.class );
-        return this;
-    }
-
     public float getPriority()
     {
         return priority;
@@ -99,7 +68,7 @@
     public Transporter newInstance( RepositorySystemSession session, RemoteRepository repository )
         throws NoTransporterException
     {
-        return new HttpTransporter( repository, session, logger );
+        return new HttpTransporter( repository, session );
     }
 
 }
diff --git a/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java b/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
index ae6980d..5a863e7 100644
--- a/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
+++ b/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
@@ -88,7 +88,7 @@
         NEXUS
     }
 
-    private static final Logger log = LoggerFactory.getLogger( HttpServer.class );
+    private static final Logger LOGGER = LoggerFactory.getLogger( HttpServer.class );
 
     private File repoDir;
 
@@ -258,8 +258,8 @@
         public void handle( String target, Request req, HttpServletRequest request, HttpServletResponse response )
             throws IOException
         {
-            log.info( "{} {}{}", new Object[] { req.getMethod(), req.getRequestURL(),
-                req.getQueryString() != null ? "?" + req.getQueryString() : "" } );
+            LOGGER.info( "{} {}{}", req.getMethod(), req.getRequestURL(),
+                    req.getQueryString() != null ? "?" + req.getQueryString() : "");
 
             Map<String, String> headers = new TreeMap<String, String>( String.CASE_INSENSITIVE_ORDER );
             for ( Enumeration<String> en = req.getHeaderNames(); en.hasMoreElements(); )
diff --git a/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 1b03aaa..880f2d8 100644
--- a/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/maven-resolver-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -40,7 +40,6 @@
 import org.eclipse.aether.DefaultRepositoryCache;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.Authentication;
 import org.eclipse.aether.repository.Proxy;
@@ -113,7 +112,7 @@
     {
         System.out.println( "=== " + testName.getMethodName() + " ===" );
         session = TestUtils.newSession();
-        factory = new HttpTransporterFactory( new TestLoggerFactory() );
+        factory = new HttpTransporterFactory( );
         repoDir = TestFileUtils.createTempDir();
         TestFileUtils.writeString( new File( repoDir, "file.txt" ), "test" );
         TestFileUtils.writeString( new File( repoDir, "dir/file.txt" ), "test" );
diff --git a/maven-resolver-transport-wagon/pom.xml b/maven-resolver-transport-wagon/pom.xml
index b785600..5371d2a 100644
--- a/maven-resolver-transport-wagon/pom.xml
+++ b/maven-resolver-transport-wagon/pom.xml
@@ -108,6 +108,16 @@
       <artifactId>maven-resolver-test-util</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java b/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
index 8710e1a..14a01d1 100644
--- a/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
+++ b/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporter.java
@@ -52,9 +52,10 @@
 import org.eclipse.aether.spi.connector.transport.PutTask;
 import org.eclipse.aether.spi.connector.transport.TransportTask;
 import org.eclipse.aether.spi.connector.transport.Transporter;
-import org.eclipse.aether.spi.log.Logger;
 import org.eclipse.aether.transfer.NoTransporterException;
 import org.eclipse.aether.util.ConfigUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A transporter using Maven Wagon.
@@ -71,7 +72,7 @@
 
     private static final String CONFIG_PROP_GROUP = "aether.connector.perms.group";
 
-    private final Logger logger;
+    private static final Logger LOGGER = LoggerFactory.getLogger( WagonTransporter.class );
 
     private final RemoteRepository repository;
 
@@ -100,10 +101,9 @@
     private final AtomicBoolean closed = new AtomicBoolean();
 
     WagonTransporter( WagonProvider wagonProvider, WagonConfigurator wagonConfigurator,
-                             RemoteRepository repository, RepositorySystemSession session, Logger logger )
+                             RemoteRepository repository, RepositorySystemSession session )
         throws NoTransporterException
     {
-        this.logger = logger;
         this.wagonProvider = wagonProvider;
         this.wagonConfigurator = wagonConfigurator;
         this.repository = repository;
@@ -124,7 +124,7 @@
         }
         catch ( Exception e )
         {
-            logger.debug( e.getMessage(), e );
+            LOGGER.debug( "No transport {}", e.getMessage(), e );
             throw new NoTransporterException( repository, e.getMessage(), e );
         }
 
@@ -300,7 +300,7 @@
             }
             catch ( Exception e )
             {
-                logger.debug( "Could not set user agent for wagon " + wagon.getClass().getName() + ": " + e );
+                LOGGER.debug( "Could not set user agent for wagon {}: {}", wagon.getClass().getName(), e.getMessage() );
             }
         }
 
@@ -328,13 +328,13 @@
                 String msg =
                     "Could not apply configuration for " + repository.getId() + " to wagon "
                         + wagon.getClass().getName() + ":" + e.getMessage();
-                if ( logger.isDebugEnabled() )
+                if ( LOGGER.isDebugEnabled() )
                 {
-                    logger.warn( msg, e );
+                    LOGGER.warn( msg, e );
                 }
                 else
                 {
-                    logger.warn( msg );
+                    LOGGER.warn( msg );
                 }
             }
         }
@@ -353,7 +353,7 @@
         }
         catch ( Exception e )
         {
-            logger.debug( "Could not disconnect wagon " + wagon, e );
+            LOGGER.debug( "Could not disconnect wagon {}", wagon, e );
         }
     }
 
@@ -456,7 +456,7 @@
     {
         if ( path != null && !path.delete() && path.exists() )
         {
-            logger.debug( "Could not delete temorary file " + path );
+            LOGGER.debug( "Could not delete temporary file {}", path );
             path.deleteOnExit();
         }
     }
diff --git a/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporterFactory.java b/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporterFactory.java
index bff3406..75329e6 100644
--- a/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporterFactory.java
+++ b/maven-resolver-transport-wagon/src/main/java/org/eclipse/aether/transport/wagon/WagonTransporterFactory.java
@@ -28,9 +28,6 @@
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
-import org.eclipse.aether.spi.log.Logger;
-import org.eclipse.aether.spi.log.LoggerFactory;
-import org.eclipse.aether.spi.log.NullLoggerFactory;
 import org.eclipse.aether.transfer.NoTransporterException;
 
 /**
@@ -43,8 +40,6 @@
     implements TransporterFactory, Service
 {
 
-    private Logger logger = NullLoggerFactory.LOGGER;
-
     private WagonProvider wagonProvider;
 
     private WagonConfigurator wagonConfigurator;
@@ -62,34 +57,19 @@
     }
 
     @Inject
-    WagonTransporterFactory( WagonProvider wagonProvider, WagonConfigurator wagonConfigurator,
-                             LoggerFactory loggerFactory )
+    WagonTransporterFactory( WagonProvider wagonProvider, WagonConfigurator wagonConfigurator )
     {
         setWagonProvider( wagonProvider );
         setWagonConfigurator( wagonConfigurator );
-        setLoggerFactory( loggerFactory );
     }
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setWagonProvider( locator.getService( WagonProvider.class ) );
         setWagonConfigurator( locator.getService( WagonConfigurator.class ) );
     }
 
     /**
-     * Sets the logger factory to use for this component.
-     * 
-     * @param loggerFactory The logger factory to use, may be {@code null} to disable logging.
-     * @return This component for chaining, never {@code null}.
-     */
-    public WagonTransporterFactory setLoggerFactory( LoggerFactory loggerFactory )
-    {
-        this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, WagonTransporter.class );
-        return this;
-    }
-
-    /**
      * Sets the wagon provider to use to acquire and release wagon instances.
      * 
      * @param wagonProvider The wagon provider to use, may be {@code null}.
@@ -133,7 +113,7 @@
     public Transporter newInstance( RepositorySystemSession session, RemoteRepository repository )
         throws NoTransporterException
     {
-        return new WagonTransporter( wagonProvider, wagonConfigurator, repository, session, logger );
+        return new WagonTransporter( wagonProvider, wagonConfigurator, repository, session );
     }
 
 }
diff --git a/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/AbstractWagonTransporterTest.java b/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/AbstractWagonTransporterTest.java
index adf080e..cd6bd55 100644
--- a/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/AbstractWagonTransporterTest.java
+++ b/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/AbstractWagonTransporterTest.java
@@ -35,7 +35,6 @@
 import org.eclipse.aether.ConfigurationProperties;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.internal.test.util.TestFileUtils;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.Authentication;
 import org.eclipse.aether.repository.Proxy;
@@ -99,7 +98,6 @@
         factory = new WagonTransporterFactory( new WagonProvider()
         {
             public Wagon lookup( String roleHint )
-                throws Exception
             {
                 if ( "mem".equalsIgnoreCase( roleHint ) )
                 {
@@ -114,11 +112,10 @@
         }, new WagonConfigurator()
         {
             public void configure( Wagon wagon, Object configuration )
-                throws Exception
             {
                 ( (Configurable) wagon ).setConfiguration( configuration );
             }
-        }, new TestLoggerFactory() );
+        } );
         id = UUID.randomUUID().toString().replace( "-", "" );
         fs = MemWagonUtils.getFilesystem( id );
         fs.put( "file.txt", "test" );
diff --git a/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/PlexusSupportTest.java b/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/PlexusSupportTest.java
index 231fa95..c82e672 100644
--- a/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/PlexusSupportTest.java
+++ b/maven-resolver-transport-wagon/src/test/java/org/eclipse/aether/transport/wagon/PlexusSupportTest.java
@@ -21,9 +21,7 @@
 
 import org.codehaus.plexus.ContainerConfiguration;
 import org.codehaus.plexus.PlexusTestCase;
-import org.eclipse.aether.internal.test.util.TestLoggerFactory;
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
-import org.eclipse.aether.spi.log.LoggerFactory;
 
 /**
  */
@@ -40,8 +38,6 @@
     public void testExistenceOfPlexusComponentMetadata()
         throws Exception
     {
-        getContainer().addComponent( new TestLoggerFactory(), LoggerFactory.class, null );
-
         TransporterFactory factory = lookup( TransporterFactory.class, "wagon" );
         assertNotNull( factory );
         assertEquals( WagonTransporterFactory.class, factory.getClass() );
diff --git a/pom.xml b/pom.xml
index cbaad25..60754fa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -202,6 +202,13 @@
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>${slf4jVersion}</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-simple</artifactId>
+        <version>${slf4jVersion}</version>
+        <scope>test</scope>
       </dependency>
     </dependencies>
   </dependencyManagement>