diff --git a/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java b/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java
index 6d9bf64..878a381 100644
--- a/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java
+++ b/src/main/java/org/apache/sling/commons/logservice/internal/Activator.java
@@ -16,9 +16,12 @@
  */
 package org.apache.sling.commons.logservice.internal;
 
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
 import org.osgi.service.log.LogReaderService;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
@@ -37,7 +40,10 @@
      */
     @Override
     public void start(final BundleContext context) throws Exception {
-        final SLF4JSupport listener = new SLF4JSupport();
+        // get framework start level
+        final Bundle systemBundle = context.getBundle(Constants.SYSTEM_BUNDLE_ID);
+
+        final SLF4JSupport listener = new SLF4JSupport(systemBundle.adapt(FrameworkStartLevel.class));
         this.logReaderTracker = new ServiceTracker<>(context, LogReaderService.class,
                 new ServiceTrackerCustomizer<LogReaderService, LogReaderService>() {
 
diff --git a/src/main/java/org/apache/sling/commons/logservice/internal/SLF4JSupport.java b/src/main/java/org/apache/sling/commons/logservice/internal/SLF4JSupport.java
index 4a7b96c..85a6f47 100644
--- a/src/main/java/org/apache/sling/commons/logservice/internal/SLF4JSupport.java
+++ b/src/main/java/org/apache/sling/commons/logservice/internal/SLF4JSupport.java
@@ -25,6 +25,7 @@
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
 import org.osgi.service.component.ComponentConstants;
 import org.osgi.service.log.LogEntry;
 import org.osgi.service.log.LogListener;
@@ -36,6 +37,30 @@
  */
 public class SLF4JSupport implements LogListener {
 
+    /**
+     * The service property name of the component name (value is "component.name").
+     * Note: We use a private constant here to not create a unneeded dependency on
+     * the org.osgi.service.component package.
+     */
+    private static final String COMPONENT_NAME = ComponentConstants.COMPONENT_NAME; // "component.name";
+
+    private static final String LOGGER_EVENT_FRAMEWORK = "Events.Framework";
+    private static final String LOGGER_EVENT_BUNDLE = "Events.Bundle";
+    private static final String LOGGER_EVENT_SERVICE = "Events.Service";
+    private static final String LOGGER_EVENT_LOG_SERVICE = "LogService";
+
+    private static final String SL_MARKER = "STARTLEVEL CHANGED";
+
+    /** Framework start level. */
+    private final FrameworkStartLevel startLevel;
+
+    private final List<String> logServiceLoggers = Arrays.asList(LOGGER_EVENT_FRAMEWORK, LOGGER_EVENT_BUNDLE,
+            LOGGER_EVENT_SERVICE, LOGGER_EVENT_LOG_SERVICE);
+
+    public SLF4JSupport(final FrameworkStartLevel startLevel) {
+        this.startLevel = startLevel;
+    }
+
     @Override
     public void logged(final LogEntry logEntry) {
         doLog(logEntry);
@@ -43,23 +68,16 @@
 
     private void doLog(final LogEntry logEntry) {
         // get the logger for the bundle
-        final boolean isLogService = "LogService".equals(logEntry.getLoggerName());
+        final boolean isLogService = logServiceLoggers.contains(logEntry.getLoggerName());
         final Logger logger = LoggerFactory
                 .getLogger(isLogService ? getLoggerName(logEntry.getBundle()) : logEntry.getLoggerName());
         if (!isEnabled(logger, logEntry)) {
-            // early Exit, this message will not be logged, don't do any work...
+            // early exit, this message will not be logged, don't do any work...
             return;
         }
         logOut(logger, logEntry);
     }
 
-    /**
-     * The service property name of the component name (value is "component.name").
-     * Note: We use a private constant here to not create a unneeded dependency on
-     * the org.osgi.service.component package.
-     */
-    private static final String COMPONENT_NAME = ComponentConstants.COMPONENT_NAME; // "component.name";
-
     private String getLoggerName(final Bundle bundle) {
         String name;
         if (bundle == null) {
@@ -112,6 +130,10 @@
 
         if (logEntry.getMessage() != null) {
             msg.append(logEntry.getMessage());
+            if (LOGGER_EVENT_FRAMEWORK.equals(logEntry.getLoggerName()) && logEntry.getMessage().contains(SL_MARKER)) {
+                msg.append(" to ");
+                msg.append(String.valueOf(this.startLevel.getStartLevel()));
+            }
         }
 
         Throwable exception = logEntry.getException();
@@ -136,8 +158,8 @@
         case TRACE:
                 logger.trace(message, exception);
                 break;
-        case AUDIT: // we treat audit as info for now as there is no audit in slf4j (TODO)
-            logger.info(message, exception);
+        case AUDIT: // we treat audit as trace
+            logger.trace(message, exception);
             break;
         }
     }
@@ -154,8 +176,8 @@
             return logger.isErrorEnabled();
         case TRACE:
             return logger.isTraceEnabled();
-        case AUDIT: // we treat audit as info for now as there is no audit in slf4j (TODO)
-            return logger.isInfoEnabled();
+        case AUDIT: // we treat audit as trace
+            return logger.isTraceEnabled();
         }
         return false;
     }
