SLING-8646 : Remove LogService implementation
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;
     }