Start factoring OSGi accesses.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / NodeLogger.java
index 5571d70acc81e3323da4135d1f0320334ad0f583..fef7a7a30a0e4b308cdca33a374fac8f57e6d849 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed 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.argeo.cms.internal.kernel;
 
 import java.io.IOException;
@@ -46,20 +31,20 @@ import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.log4j.PropertyConfigurator;
 import org.apache.log4j.spi.LoggingEvent;
+import org.argeo.api.ArgeoLogListener;
+import org.argeo.api.ArgeoLogger;
+import org.argeo.api.NodeConstants;
 import org.argeo.cms.CmsException;
 import org.argeo.cms.auth.CurrentUser;
-import org.argeo.node.ArgeoLogListener;
-import org.argeo.node.ArgeoLogger;
-import org.argeo.node.NodeConstants;
 import org.argeo.osgi.useradmin.UserAdminConf;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogLevel;
 import org.osgi.service.log.LogListener;
 import org.osgi.service.log.LogReaderService;
-import org.osgi.service.log.LogService;
 
 /** Not meant to be used directly in standard log4j config */
 class NodeLogger implements ArgeoLogger, LogListener {
@@ -101,30 +86,32 @@ class NodeLogger implements ArgeoLogger, LogListener {
        };
 
        public NodeLogger(LogReaderService lrs) {
-               Enumeration<LogEntry> logEntries = lrs.getLog();
-               while (logEntries.hasMoreElements())
-                       logged(logEntries.nextElement());
-               lrs.addLogListener(this);
-
-               // configure log4j watcher
-               String log4jConfiguration = KernelUtils.getFrameworkProp("log4j.configuration");
-               if (log4jConfiguration != null && log4jConfiguration.startsWith("file:")) {
-                       if (log4jConfiguration.contains("..")) {
-                               if (log4jConfiguration.startsWith("file://"))
-                                       log4jConfiguration = log4jConfiguration.substring("file://".length());
-                               else if (log4jConfiguration.startsWith("file:"))
-                                       log4jConfiguration = log4jConfiguration.substring("file:".length());
-                       }
-                       try {
-                               Path log4jconfigPath;
-                               if (log4jConfiguration.startsWith("file:"))
-                                       log4jconfigPath = Paths.get(new URI(log4jConfiguration));
-                               else
-                                       log4jconfigPath = Paths.get(log4jConfiguration);
-                               Thread log4jConfWatcher = new Log4jConfWatcherThread(log4jconfigPath);
-                               log4jConfWatcher.start();
-                       } catch (Exception e) {
-                               stdErr("Badly formatted log4j configuration URI " + log4jConfiguration + ": " + e.getMessage());
+               if (lrs != null) {
+                       Enumeration<LogEntry> logEntries = lrs.getLog();
+                       while (logEntries.hasMoreElements())
+                               logged(logEntries.nextElement());
+                       lrs.addLogListener(this);
+
+                       // configure log4j watcher
+                       String log4jConfiguration = KernelUtils.getFrameworkProp("log4j.configuration");
+                       if (log4jConfiguration != null && log4jConfiguration.startsWith("file:")) {
+                               if (log4jConfiguration.contains("..")) {
+                                       if (log4jConfiguration.startsWith("file://"))
+                                               log4jConfiguration = log4jConfiguration.substring("file://".length());
+                                       else if (log4jConfiguration.startsWith("file:"))
+                                               log4jConfiguration = log4jConfiguration.substring("file:".length());
+                               }
+                               try {
+                                       Path log4jconfigPath;
+                                       if (log4jConfiguration.startsWith("file:"))
+                                               log4jconfigPath = Paths.get(new URI(log4jConfiguration));
+                                       else
+                                               log4jconfigPath = Paths.get(log4jConfiguration);
+                                       Thread log4jConfWatcher = new Log4jConfWatcherThread(log4jconfigPath);
+                                       log4jConfWatcher.start();
+                               } catch (Exception e) {
+                                       stdErr("Badly formatted log4j configuration URI " + log4jConfiguration + ": " + e.getMessage());
+                               }
                        }
                }
        }
@@ -171,22 +158,25 @@ class NodeLogger implements ArgeoLogger, LogListener {
        //
        // OSGi LOGGER
        //
-       @SuppressWarnings("deprecation")
        @Override
        public void logged(LogEntry status) {
                Log pluginLog = LogFactory.getLog(status.getBundle().getSymbolicName());
-               Integer severity = status.getLevel();
-               if (severity == LogService.LOG_ERROR) {
+               LogLevel severity = status.getLogLevel();
+               if (severity.equals(LogLevel.ERROR) && pluginLog.isErrorEnabled()) {
                        // FIXME Fix Argeo TP
                        if (status.getException() instanceof SignatureException)
                                return;
-                       // pluginLog.error(msg(status), status.getException());
-                       pluginLog.error(msg(status) + ": " + status.getException());
-               } else if (severity == LogService.LOG_WARNING)
-                       pluginLog.warn(msg(status), status.getException());
-               else if (severity == LogService.LOG_INFO && pluginLog.isDebugEnabled())
+                       pluginLog.error(msg(status), status.getException());
+               } else if (severity.equals(LogLevel.WARN) && pluginLog.isWarnEnabled()) {
+                       if (pluginLog.isTraceEnabled())
+                               pluginLog.warn(msg(status), status.getException());
+                       else
+                               pluginLog.warn(msg(status));
+               } else if (severity.equals(LogLevel.INFO) && pluginLog.isDebugEnabled())
                        pluginLog.debug(msg(status), status.getException());
-               else if (severity == LogService.LOG_DEBUG && pluginLog.isTraceEnabled())
+               else if (severity.equals(LogLevel.DEBUG) && pluginLog.isTraceEnabled())
+                       pluginLog.trace(msg(status), status.getException());
+               else if (severity.equals(LogLevel.TRACE) && pluginLog.isTraceEnabled())
                        pluginLog.trace(msg(status), status.getException());
        }