X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeLogger.java;h=ac0c8469f9297f42329945e96ffa6188f0dc9969;hb=39d2a8a4c4f292eded654dc58bdef5f649df1732;hp=1264b2452d6a8ae06e0aa3d9592c9d949350d381;hpb=0a7d938324d33848ac7dc4ef4007c73a714171ee;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeLogger.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeLogger.java index 1264b2452..ac0c8469f 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeLogger.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeLogger.java @@ -15,8 +15,10 @@ */ package org.argeo.cms.internal.kernel; +import java.security.SignatureException; import java.util.ArrayList; import java.util.Collections; +import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -27,6 +29,8 @@ import java.util.Properties; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.LogManager; @@ -37,9 +41,13 @@ import org.argeo.ArgeoException; import org.argeo.ArgeoLogListener; import org.argeo.ArgeoLogger; import org.argeo.cms.auth.CurrentUser; +import org.osgi.service.log.LogEntry; +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 { +class NodeLogger implements ArgeoLogger, LogListener { private Boolean disabled = false; @@ -73,6 +81,14 @@ class NodeLogger implements ArgeoLogger { } }; + @SuppressWarnings("unchecked") + public NodeLogger(LogReaderService lrs) { + Enumeration logEntries = lrs.getLog(); + while (logEntries.hasMoreElements()) + logged(logEntries.nextElement()); + lrs.addLogListener(this); + } + public void init() { try { events = new LinkedBlockingQueue(); @@ -108,6 +124,30 @@ class NodeLogger implements ArgeoLogger { // this.layout = layout; // } + // + // OSGi LOGGER + // + @Override + public void logged(LogEntry status) { + Log pluginLog = LogFactory.getLog(status.getBundle().getSymbolicName()); + Integer severity = status.getLevel(); + if (severity == LogService.LOG_ERROR) { + // FIXME Fix Argeo TP + if (status.getException() instanceof SignatureException) + return; + pluginLog.error(status.getMessage(), status.getException()); + } else if (severity == LogService.LOG_WARNING) + pluginLog.warn(status.getMessage(), status.getException()); + else if (severity == LogService.LOG_INFO && pluginLog.isDebugEnabled()) + pluginLog.debug(status.getMessage(), status.getException()); + else if (severity == LogService.LOG_DEBUG && pluginLog.isTraceEnabled()) + pluginLog.trace(status.getMessage(), status.getException()); + } + + // + // ARGEO LOGGER + // + public synchronized void register(ArgeoLogListener listener, Integer numberOfPreviousEvents) { String username = CurrentUser.getUsername();