diff --git a/pom.xml b/pom.xml
index 89ceeb8..ba2c5c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,7 @@
     <url />
 
     <properties>
+        <slf4j.version>1.7.36</slf4j.version>
         <version.org.jacoco>0.8.6</version.org.jacoco>
         <version.org.jacoco.plugin>0.8.6</version.org.jacoco.plugin>
         <surefire.version>2.22.2</surefire.version>
@@ -104,6 +105,19 @@
           <version>${version.org.jacoco}</version>
            <scope>test</scope>
        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
+            <!-- License: MIT -->
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+            <!-- License: MIT -->
+        </dependency>
     </dependencies>
 
     <profiles>
@@ -267,6 +281,9 @@
                         <runOrder>alphabetical</runOrder>
                         <redirectTestOutputToFile>${maven.test.redirectTestOutputToFile}</redirectTestOutputToFile>
                         <argLine>${activemq-surefire-argline}</argLine>
+                        <systemPropertyVariables>
+                            <org.slf4j.simpleLogger.defaultLogLevel>TRACE</org.slf4j.simpleLogger.defaultLogLevel>
+                        </systemPropertyVariables>
                     </configuration>
                 </plugin>
                 <plugin>
diff --git a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioContext.java b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioContext.java
index d91fdbe..f0d6a2e 100644
--- a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioContext.java
+++ b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioContext.java
@@ -26,6 +26,9 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * This class is used as an aggregator for the {@link LibaioFile}.
  * <br>
@@ -42,6 +45,8 @@
  */
 public class LibaioContext<Callback extends SubmitInfo> implements Closeable {
 
+   private static final Logger logger = LoggerFactory.getLogger(LibaioContext.class);
+
    private static final AtomicLong totalMaxIO = new AtomicLong(0);
 
    /**
@@ -61,6 +66,7 @@
 
    private static boolean loadLibrary(final String name) {
       try {
+         logger.debug("Loading {}", name);
          System.loadLibrary(name);
          if (getNativeVersion() != EXPECTED_NATIVE_VERSION) {
             NativeLogger.incompatibleNativeLibrary();
@@ -69,7 +75,7 @@
             return true;
          }
       } catch (Throwable e) {
-         NativeLogger.debug(name + " -> error loading the native library", e);
+         logger.debug(name + " -> not possible to load native library", e);
          return false;
       }
 
@@ -93,12 +99,12 @@
             });
             break;
          } else {
-            NativeLogger.debug("Library " + library + " not found!");
+            logger.debug("Library {} not found!", library);
          }
       }
 
       if (!loaded) {
-         NativeLogger.debug("Couldn't locate LibAIO Wrapper");
+         logger.debug("Couldn't locate LibAIO Wrapper");
       }
    }
 
@@ -242,7 +248,7 @@
             try {
                ioSpace.tryAcquire(queueSize, 10, TimeUnit.SECONDS);
             } catch (Exception e) {
-               NativeLogger.warn(e.getMessage(), e);
+               logger.warn(e.getMessage(), e);
             }
          }
          totalMaxIO.addAndGet(-queueSize);
diff --git a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioFile.java b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioFile.java
index f03ed87..7b6967b 100644
--- a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioFile.java
+++ b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/LibaioFile.java
@@ -19,11 +19,16 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * This is an extension to use libaio.
  */
 public final class LibaioFile<Callback extends SubmitInfo> implements AutoCloseable {
 
+   private static final Logger logger = LoggerFactory.getLogger(LibaioFile.class);
+
    protected boolean open;
    /**
     * This represents a structure allocated on the native
@@ -120,7 +125,7 @@
       try {
          LibaioContext.fill(fd, alignment, size);
       } catch (OutOfMemoryError e) {
-         NativeLogger.warn("Did not have enough memory to allocate " + size + " bytes in memory while filling the file, using simple fallocate");
+         logger.warn("Did not have enough memory to allocate " + size + " bytes in memory while filling the file, using simple fallocate");
          LibaioContext.fallocate(fd, size);
       }
    }
diff --git a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/NativeLogger.java b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/NativeLogger.java
index ad14bdc..be487ba 100644
--- a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/NativeLogger.java
+++ b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/NativeLogger.java
@@ -16,43 +16,22 @@
  */
 package org.apache.activemq.artemis.nativo.jlibaio;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /** Notice: After making changes to the native interface, you have to use mvn install at least once to generate the .h
  *          This is because the maven compiler plugin is the one generating org_apache_activemq_artemis_native_jlibaio_LibaioContext.h
  *          So that file needs to be updated before Cmake comes along to compile the module. */
 public class NativeLogger {
 
+   private static final Logger logger = LoggerFactory.getLogger(NativeLogger.class);
+
    public static final String PROJECT_PREFIX = "jlibaio";
 
-   private static LoggerCallback loggerCallback = new SystemCallback();
-
-   public static void setLoggerCallback(LoggerCallback callback) {
-      loggerCallback = callback;
-   }
-
    private static final int DIFFERENT_VERSION_ID = 163002;
    private static final String DIFFERENT_VERSION = PROJECT_PREFIX + DIFFERENT_VERSION_ID + " You have a native library with a different version than expected";
 
    public final static void incompatibleNativeLibrary() {
-       warn(DIFFERENT_VERSION);
-   }
-
-   public final static void info(String message) {
-      loggerCallback.info(message);
-   }
-
-   public final static void warn(String message) {
-      loggerCallback.warn(message);
-   }
-
-   public final static void warn(String message, Throwable e) {
-      loggerCallback.warn(message, e);
-   }
-
-   public final static void debug(String message) {
-      loggerCallback.debug(message);
-   }
-
-   public final static void debug(String message, Throwable e) {
-      loggerCallback.debug(message, e);
+       logger.warn(DIFFERENT_VERSION);
    }
 }
diff --git a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/SystemCallback.java b/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/SystemCallback.java
deleted file mode 100644
index b50c209..0000000
--- a/src/main/java/org/apache/activemq/artemis/nativo/jlibaio/SystemCallback.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.activemq.artemis.nativo.jlibaio;
-
-/** This will use System.err for warn and System.out for info */
-public class SystemCallback implements LoggerCallback {
-
-   private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty(SystemCallback.class.getName() + ".DEBUG", "false"));
-
-   public void debug(String message, Throwable e) {
-      if (DEBUG) {
-         System.out.println("Debug from ArtemisNative: " + message);
-         e.printStackTrace(System.out);
-      }
-   }
-
-   public void debug(String message) {
-      if (DEBUG) {
-         System.out.println("Debug from ArtemisNative: " + message);
-      }
-   }
-
-   public void info(String message) {
-      System.out.println("Information from ArtemisNative: " + message);
-   }
-
-   public void warn(String message) {
-      System.err.println("Warning from ArtemisNative: " + message);
-   }
-
-   public void warn(String message, Throwable e) {
-      System.err.println("Warning from ArtemisNative: " + message);
-      e.printStackTrace(System.err);
-   }
-}
diff --git a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioStressTest.java b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioStressTest.java
index 4fc1d0c..aeb7344 100644
--- a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioStressTest.java
+++ b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioStressTest.java
@@ -30,9 +30,12 @@
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This test is using a different package from {@link LibaioFile}
@@ -40,10 +43,17 @@
  */
 public class LibaioStressTest {
 
+    private static final Logger logger = LoggerFactory.getLogger(LibaioStressTest.class);
+
     private static final int STRESS_TIME = Integer.parseInt(System.getProperty("test.stress.time", "5000"));
 
     static {
-        System.out.println("LibaioStressTest:: -Dtest.stress.time=" + STRESS_TIME);
+        logger.debug("LibaioStressTest:: -Dtest.stress.time=" + STRESS_TIME);
+    }
+
+    @BeforeClass
+    public static void testAssume() {
+        Assume.assumeTrue(LibaioContext.isLoaded());
     }
 
     /**
@@ -231,7 +241,7 @@
             }
 
             if (count % (sleeps ? 1_000 : 100_000) == 0) {
-                System.out.println("Writen "  + count + " buffers at " + fileName);
+                logger.debug("Writen "  + count + " buffers at " + fileName);
             }
             MyClass myClass = callbackCache.get();
 
diff --git a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioTest.java b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioTest.java
index ec8b73d..7318412 100644
--- a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioTest.java
+++ b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LibaioTest.java
@@ -37,12 +37,15 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This test is using a different package from {@link LibaioFile}
  * as I need to validate public methods on the API
  */
 public class LibaioTest {
+   private static final Logger logger = LoggerFactory.getLogger(LibaioTest.class);
 
    @BeforeClass
    public static void testAIO() {
@@ -174,8 +177,8 @@
       Assert.assertEquals(fileDescriptor[0].getBlockSize(), fileDescriptor[1].getBlockSize());
       Assert.assertEquals(LibaioContext.getBlockSize(temporaryFolder.getRoot()), LibaioContext.getBlockSize(file1));
       Assert.assertEquals(LibaioContext.getBlockSize(file1), LibaioContext.getBlockSize(file2));
-      System.out.println("blockSize = " + fileDescriptor[0].getBlockSize());
-      System.out.println("blockSize /tmp= " + LibaioContext.getBlockSize("/tmp"));
+      logger.debug("blockSize = " + fileDescriptor[0].getBlockSize());
+      logger.debug("blockSize /tmp= " + LibaioContext.getBlockSize("/tmp"));
 
       ByteBuffer buffer = LibaioContext.newAlignedBuffer(4096, 4096);
 
@@ -302,7 +305,7 @@
          fileDescriptor.write(0, BUFFER_SIZE, buffer, callback);
 
          int retValue = control.poll(callbacks, 1, LIBAIO_QUEUE_SIZE);
-         System.out.println("Return from poll::" + retValue);
+         logger.debug("Return from poll::" + retValue);
          Assert.assertEquals(1, retValue);
 
          Assert.assertSame(callback, callbacks[0]);
@@ -401,7 +404,7 @@
          // Error condition
          Assert.assertSame(callbacks[0], callback);
 
-         System.out.println("Error:" + callbacks[0]);
+         logger.debug("Error:" + callbacks[0]);
 
          buffer = fileDescriptor.newBuffer(4096);
          for (int i = 0; i < 4096; i++) {
@@ -682,7 +685,7 @@
 
       latch.await();
 
-      System.out.println("time = " + (end - start) + " writes/second=" + NUMBER_OF_BLOCKS * 1000L / (end - start));
+      logger.debug("time = " + (end - start) + " writes/second=" + NUMBER_OF_BLOCKS * 1000L / (end - start));
 
       blockedContext.close();
       t.join();
diff --git a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LoadedTest.java b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LoadedTest.java
index 6a5a05d..6e803ef 100644
--- a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LoadedTest.java
+++ b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/LoadedTest.java
@@ -19,12 +19,16 @@
 
 import org.apache.activemq.artemis.nativo.jlibaio.LibaioContext;
 import org.junit.Assert;
+import org.junit.Assume;
 import org.junit.Test;
 
 public class LoadedTest {
+   private static final String OS = System.getProperty("os.name").toLowerCase();
+   private static final boolean IS_LINUX = OS.startsWith("linux");
 
    @Test
    public void testValidateIsLoaded() {
+      Assume.assumeTrue(IS_LINUX);
       Assert.assertTrue(LibaioContext.isLoaded());
    }
 
diff --git a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/OpenCloseContextTest.java b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/OpenCloseContextTest.java
index e6c27f2..1d8775e 100644
--- a/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/OpenCloseContextTest.java
+++ b/src/test/java/org/apache/activemq/artemis/nativo/jlibaio/test/OpenCloseContextTest.java
@@ -30,9 +30,13 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class OpenCloseContextTest {
 
+   Logger logger = LoggerFactory.getLogger(OpenCloseContextTest.class);
+
    @BeforeClass
    public static void testAIO() {
       Assume.assumeTrue(LibaioContext.isLoaded());
@@ -52,7 +56,7 @@
          buffer.put((byte) 'x');
 
       for (int i = 0; i < 10; i++) {
-         System.out.println("#test " + i);
+         logger.debug("#test " + i);
          final LibaioContext control = new LibaioContext<>(5, true, true);
          Thread t = new Thread() {
             @Override
@@ -79,7 +83,7 @@
                } catch (Throwable e) {
                   e.printStackTrace();
                }
-               System.out.println("done");
+               logger.debug("done");
             }
          });
 
@@ -110,7 +114,7 @@
          buffer.put((byte) 'x');
 
       for (int i = 0; i < 10; i++) {
-         System.out.println("#test " + i);
+         logger.debug("#test " + i);
          final LibaioContext control = new LibaioContext<>(5, true, true);
          Thread t = new Thread() {
             @Override
@@ -137,7 +141,7 @@
                } catch (Throwable e) {
                   e.printStackTrace();
                }
-               System.out.println("done");
+               logger.debug("done");
             }
          });
 
@@ -172,8 +176,6 @@
 
       control2.close();
       control2.poll();
-
-      System.out.println("Hello!!");
    }
 
 }
