diff options
7 files changed, 53 insertions, 34 deletions
diff --git a/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF index 65ff2ba2e..cb69e00b5 100644 --- a/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.osgi/META-INF/MANIFEST.MF @@ -67,7 +67,7 @@ Export-Package: org.eclipse.core.runtime.adaptor;x-friends:="org.eclipse.core.ru org.osgi.resource;version="1.0", org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto", org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework", - org.osgi.service.log;version="1.3";uses:="org.osgi.framework", + org.osgi.service.log;version="1.4";uses:="org.osgi.framework", org.osgi.service.log.admin;version="1.0", org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework", org.osgi.service.permissionadmin;version="1.2", diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/Arguments.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/Arguments.java index 9eeb9883b..6308feea1 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/Arguments.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/Arguments.java @@ -25,19 +25,24 @@ public class Arguments { ServiceReference<?> context = null; Throwable exception = null; Object object = arguments[arguments.length - 1]; - if (object instanceof Throwable) { + if (object instanceof Throwable || object instanceof ServiceReference) { length--; - exception = (Throwable) object; + if (object instanceof Throwable) { + exception = (Throwable) object; + } else { + context = (ServiceReference<?>) object; + } if (arguments.length > 1) { object = arguments[arguments.length - 2]; - if (object instanceof ServiceReference) { + if ((object instanceof ServiceReference && context == null) || (object instanceof Throwable && exception == null)) { length--; - context = (ServiceReference<?>) object; + if (object instanceof Throwable) { + exception = (Throwable) object; + } else { + context = (ServiceReference<?>) object; + } } } - } else if (object instanceof ServiceReference) { - length--; - context = (ServiceReference<?>) object; } serviceReference = context; throwable = exception; diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogEntryImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogEntryImpl.java index 335acf19a..86eac4cc4 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogEntryImpl.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogEntryImpl.java @@ -55,7 +55,7 @@ public class ExtendedLogEntryImpl implements ExtendedLogEntry, LogEntry { return threadId.longValue(); } - public ExtendedLogEntryImpl(Bundle bundle, String loggerName, Object contextObject, LogLevel logLevelEnum, int level, String message, Throwable throwable) { + public ExtendedLogEntryImpl(Bundle bundle, String loggerName, StackTraceElement stackTraceElement, Object contextObject, LogLevel logLevelEnum, int level, String message, Throwable throwable) { this.time = System.currentTimeMillis(); this.loggerName = loggerName; this.bundle = bundle; @@ -73,8 +73,7 @@ public class ExtendedLogEntryImpl implements ExtendedLogEntry, LogEntry { this.sequenceNumber = nextSequenceNumber++; } - // TODO need to find the calling stack here not just 2 up. - stackTraceElement = currentThread.getStackTrace()[2]; + this.stackTraceElement = stackTraceElement; } public String getLoggerName() { diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java index b6ef95760..1d00919a2 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java @@ -176,21 +176,21 @@ public class ExtendedLogReaderServiceFactory implements ServiceFactory<ExtendedL return count; } - void log(final Bundle bundle, final String name, final Object context, final LogLevel logLevelEnum, final int level, final String message, final Throwable exception) { + void log(final Bundle bundle, final String name, final StackTraceElement stackTraceElement, final Object context, final LogLevel logLevelEnum, final int level, final String message, final Throwable exception) { if (System.getSecurityManager() != null) { AccessController.doPrivileged(new PrivilegedAction<Void>() { public Void run() { - logPrivileged(bundle, name, context, logLevelEnum, level, message, exception); + logPrivileged(bundle, name, stackTraceElement, context, logLevelEnum, level, message, exception); return null; } }); } else { - logPrivileged(bundle, name, context, logLevelEnum, level, message, exception); + logPrivileged(bundle, name, stackTraceElement, context, logLevelEnum, level, message, exception); } } - void logPrivileged(Bundle bundle, String name, Object context, LogLevel logLevelEnum, int level, String message, Throwable exception) { - LogEntry logEntry = new ExtendedLogEntryImpl(bundle, name, context, logLevelEnum, level, message, exception); + void logPrivileged(Bundle bundle, String name, StackTraceElement stackTraceElement, Object context, LogLevel logLevelEnum, int level, String message, Throwable exception) { + LogEntry logEntry = new ExtendedLogEntryImpl(bundle, name, stackTraceElement, context, logLevelEnum, level, message, exception); storeEntry(logEntry); ArrayMap<LogListener, Object[]> listenersCopy; listenersLock.readLock(); diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogServiceFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogServiceFactory.java index cf92c747e..11feeb46d 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogServiceFactory.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogServiceFactory.java @@ -80,8 +80,8 @@ public class ExtendedLogServiceFactory implements ServiceFactory<ExtendedLogServ return logReaderServiceFactory.isLoggable(bundle, name, level); } - void log(Bundle bundle, String name, Object context, LogLevel logLevelEnum, int level, String message, Throwable exception) { - logReaderServiceFactory.log(bundle, name, context, logLevelEnum, level, message, exception); + void log(Bundle bundle, String name, StackTraceElement stackTraceElement, Object context, LogLevel logLevelEnum, int level, String message, Throwable exception) { + logReaderServiceFactory.log(bundle, name, stackTraceElement, context, logLevelEnum, level, message, exception); } void checkLogPermission() throws SecurityException { diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java index f22ff956a..ee098c0e5 100755 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java @@ -110,7 +110,7 @@ public class LoggerContextTargetMap { EquinoxLoggerContext loggerContext = loggerContexts.get(name); if (loggerContext == null) { loggerContext = factory.createEquinoxLoggerContext(name); - loggerContexts.put(null, loggerContext); + loggerContexts.put(name, loggerContext); } return loggerContext; } diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerImpl.java index bf2f385b4..1876e10ba 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerImpl.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerImpl.java @@ -17,7 +17,8 @@ import org.osgi.service.log.LogService; import org.osgi.service.log.admin.LoggerContext; public class LoggerImpl implements Logger { - + static final String THIS_PACKAGE_NAME = LoggerImpl.class.getName().substring(0, LoggerImpl.class.getName().length() - LoggerImpl.class.getSimpleName().length()); + static final Object[] EMPTY = new Object[0]; protected final ExtendedLogServiceImpl logServiceImpl; protected final String name; @@ -72,7 +73,7 @@ public class LoggerImpl implements Logger { logLevelEnum = getLogLevel(level); } if (enabledLevel.implies(logLevelEnum)) { - logServiceImpl.getFactory().log(entryBundle, name, context, logLevelEnum, level, message, exception); + logServiceImpl.getFactory().log(entryBundle, name, getLocation(), context, logLevelEnum, level, message, exception); } } @@ -99,12 +100,12 @@ public class LoggerImpl implements Logger { @Override public void trace(String message) { - trace(message, (Object) null); + trace(message, EMPTY); } @Override public void trace(String format, Object arg) { - trace(format, arg, null); + trace(format, new Object[] {arg}); } @Override @@ -124,12 +125,12 @@ public class LoggerImpl implements Logger { @Override public void debug(String message) { - debug(message, (Object) null); + debug(message, EMPTY); } @Override public void debug(String format, Object arg) { - debug(format, arg, null); + debug(format, new Object[] {arg}); } @Override @@ -149,12 +150,12 @@ public class LoggerImpl implements Logger { @Override public void info(String message) { - info(message, (Object) null); + info(message, EMPTY); } @Override public void info(String format, Object arg) { - info(format, arg, null); + info(format, new Object[] {arg}); } @Override @@ -174,12 +175,12 @@ public class LoggerImpl implements Logger { @Override public void warn(String message) { - warn(message, (Object) null); + warn(message, EMPTY); } @Override public void warn(String format, Object arg) { - warn(format, arg, null); + warn(format, new Object[] {arg}); } @Override @@ -199,12 +200,12 @@ public class LoggerImpl implements Logger { @Override public void error(String message) { - error(message, (Object) null); + error(message, EMPTY); } @Override public void error(String format, Object arg) { - error(format, arg, null); + error(format, new Object[] {arg}); } @Override @@ -219,12 +220,12 @@ public class LoggerImpl implements Logger { @Override public void audit(String message) { - audit(message, (Object) null); + audit(message, EMPTY); } @Override public void audit(String format, Object arg) { - audit(format, arg, null); + audit(format, new Object[] {arg}); } @Override @@ -243,9 +244,23 @@ public class LoggerImpl implements Logger { if (!enabledLevel.implies(level)) { return; } + StackTraceElement location = getLocation(); Arguments processedArguments = new Arguments(arguments); String message = processedArguments.isEmpty() ? format : formatMessage(format, processedArguments); - logServiceImpl.getFactory().log(logServiceImpl.getBundle(), name, processedArguments.serviceReference(), level, level.ordinal(), message.toString(), processedArguments.throwable()); + logServiceImpl.getFactory().log(logServiceImpl.getBundle(), name, location, processedArguments.serviceReference(), level, level.ordinal(), message.toString(), processedArguments.throwable()); + } + + private StackTraceElement getLocation() { + StackTraceElement[] elements = Thread.currentThread().getStackTrace(); + if (elements.length == 0) { + return null; + } + for (int i = 1; i < elements.length; i++) { + if (!elements[i].getClassName().startsWith(THIS_PACKAGE_NAME)) { + return elements[i]; + } + } + return elements[1]; } String formatMessage(String format, Arguments processedArguments) { |