| /*******************************************************************************
|
| * Copyright (c) 2010, 2019 Mia-Software and others.
|
| * All rights reserved. This program and the accompanying materials
|
| * are made available under the terms of the Eclipse Public License v2.0
|
| * which accompanies this distribution, and is available at
|
| * http://www.eclipse.org/legal/epl-v20.html
|
| *
|
| * Contributors:
|
| * Fabien Giquel (Mia-Software) - initial API and implementation
|
| * Nicolas Bros (Mia-Software)
|
| * Nicolas Bros (Mia-Software) - Bug 339657 - Move Logger to org.eclipse.modisco.facet.util.core
|
| * Nicolas Bros (Mia-Software) - Bug 340031 - NPE in org.eclipse.modisco.facet.util.core.Logger#log
|
| * Grégoire Dupé (Mia-Software) - Bug 483451 - Logger and DebugUtils : Add "String.format" API
|
| *******************************************************************************/ |
| package org.eclipse.modisco.facet.util.core;
|
|
|
| import java.lang.reflect.InvocationTargetException;
|
|
|
| import org.eclipse.core.runtime.CoreException;
|
| import org.eclipse.core.runtime.IStatus;
|
| import org.eclipse.core.runtime.MultiStatus;
|
| import org.eclipse.core.runtime.Plugin;
|
| import org.eclipse.core.runtime.Status;
|
| import org.eclipse.modisco.facet.util.core.internal.Activator;
|
|
|
| /**
|
| * Helper for logging using Eclipse API
|
| *
|
| * @author fgiquel
|
| *
|
| */
|
| public final class Logger {
|
|
|
| private Logger() {
|
| // Nothing
|
| }
|
|
|
| public static void logError(final Throwable e, final Plugin plugin) {
|
| Logger.log(e, IStatus.ERROR, e.getMessage(), plugin);
|
| }
|
|
|
| public static void logError(final String message, final Plugin plugin) {
|
| Logger.log(null, IStatus.ERROR, message, plugin);
|
| }
|
|
|
| public static void logError(final Throwable e, final String message, final Plugin plugin) {
|
| Logger.log(e, IStatus.ERROR, message, plugin);
|
| }
|
|
|
| public static void logWarning(final Throwable e, final Plugin plugin) {
|
| Logger.log(e, IStatus.WARNING, e.getMessage(), plugin);
|
| }
|
|
|
| public static void logWarning(final String message, final Plugin plugin) {
|
| Logger.log(null, IStatus.WARNING, message, plugin);
|
| }
|
|
|
| public static void logWarning(final Throwable e, final String message, final Plugin plugin) {
|
| Logger.log(e, IStatus.WARNING, message, plugin);
|
| }
|
|
|
| public static void logInfo(final Throwable e, final Plugin plugin) {
|
| Logger.log(e, IStatus.INFO, e.getMessage(), plugin);
|
| }
|
|
|
| public static void logInfo(final String message, final Plugin plugin) {
|
| Logger.log(null, IStatus.INFO, message, plugin);
|
| }
|
|
|
| /**
|
| * @since 1.1
|
| * @param messageTemplate
|
| * A format string (cf. java.util.Formatter)
|
| * @param args
|
| * Arguments referenced by messageTemplates
|
| */
|
| public static void logError(final Plugin plugin,
|
| final String messageTemplate, final Object... args) {
|
| Logger.log(null, IStatus.ERROR, plugin, messageTemplate, args);
|
| }
|
|
|
| /**
|
| * @since 1.1
|
| * @param messageTemplate
|
| * A format string (cf. java.util.Formatter)
|
| * @param args
|
| * Arguments referenced by messageTemplates
|
| */
|
| public static void logError(final Throwable e, final Plugin plugin,
|
| final String messageTemplate, final Object... args) {
|
| Logger.log(e, IStatus.ERROR, plugin, messageTemplate, args);
|
| }
|
|
|
| /**
|
| * @since 1.1
|
| * @param messageTemplate
|
| * A format string (cf. java.util.Formatter)
|
| * @param args
|
| * Arguments referenced by messageTemplates
|
| */
|
| public static void logWarning(final Plugin plugin,
|
| final String messageTemplace, final Object... args) {
|
| Logger.log(null, IStatus.WARNING, plugin, messageTemplace, args);
|
| }
|
|
|
| /**
|
| * @since 1.1
|
| */
|
| public static void logWarning(final Throwable e, final Plugin plugin,
|
| final String messageTemplace, final Object... args) {
|
| Logger.log(e, IStatus.WARNING, plugin, messageTemplace, args);
|
| }
|
|
|
| /**
|
| * @since 1.1
|
| * @param messageTemplate
|
| * A format string (cf. java.util.Formatter)
|
| * @param args
|
| * Arguments referenced by messageTemplates
|
| */
|
| public static void logInfo(final Plugin plugin,
|
| final String messageTemplace, final Object... args) {
|
| Logger.log(null, IStatus.INFO, plugin, messageTemplace, args);
|
| }
|
|
|
| /**
|
| * An exception that is instantiated with the sole purpose of providing a
|
| * stack trace when there wouldn't be one otherwise.
|
| */
|
| protected static class LogStackTrace extends Exception {
|
| private static final long serialVersionUID = 309882934616507415L;
|
| }
|
|
|
| /**
|
| * @since 1.1
|
| * @param messageTemplate
|
| * A format string (cf. java.util.Formatter)
|
| * @param args
|
| * Arguments referenced by messageTemplates
|
| */
|
| public static void log(final Throwable e, final int level,
|
| final Plugin plugin, final String messageTemplate,
|
| final Object... args) {
|
| final String message = String.format(messageTemplate, args);
|
| log(e, level, message, plugin);
|
| }
|
|
|
| public static void log(final Throwable e, final int level,
|
| final String message, final Plugin plugin) {
|
|
|
| Throwable effectiveE = e;
|
| Plugin effectivePlugin = plugin;
|
| String effectiveMessage = message;
|
| IStatus status = null;
|
|
|
| if (effectiveE instanceof InvocationTargetException) {
|
| effectiveE = ((InvocationTargetException) effectiveE).getTargetException();
|
| }
|
| if (effectivePlugin == null) {
|
| effectivePlugin = Activator.getDefault();
|
| }
|
|
|
| if (effectiveE instanceof CoreException) {
|
| MultiStatus mstatus = new MultiStatus(plugin.getBundle().getSymbolicName(), level,
|
| new IStatus[] { ((CoreException) effectiveE).getStatus() }, message, effectiveE);
|
| status = mstatus;
|
| } else {
|
| if (effectiveMessage == null && effectiveE != null) {
|
| effectiveMessage = effectiveE.getMessage();
|
| }
|
| if (effectiveMessage == null && effectiveE != null) {
|
| effectiveMessage = effectiveE.toString();
|
| }
|
| if (effectiveMessage == null) {
|
| effectiveMessage = ""; //$NON-NLS-1$
|
| }
|
| try {
|
| effectiveMessage = effectiveMessage + " (" //$NON-NLS-1$
|
| + effectivePlugin.getBundle().getSymbolicName() + "_" //$NON-NLS-1$
|
| + effectivePlugin.getBundle().getVersion() + ")"; //$NON-NLS-1$
|
| } catch (NullPointerException e2) {
|
| effectiveMessage += " (activator class = " //$NON-NLS-1$
|
| + effectivePlugin.getClass().getName() + ")"; //$NON-NLS-1$
|
| }
|
| if (effectiveE == null) {
|
| // record a stacktrace
|
| effectiveE = new LogStackTrace();
|
| }
|
| status = new Status(level, effectivePlugin.getBundle().getSymbolicName(),
|
| effectiveMessage, effectiveE);
|
| }
|
| effectivePlugin.getLog().log(status);
|
| }
|
|
|
| // private static String getPosition() {
|
| // try {
|
| // // get the stack element corresponding to the caller of the log
|
| // // method
|
| // StackTraceElement element = new Exception().getStackTrace()[2];
|
| // return " \n[" + element.getClassName() + "#" + element.getMethodName() + " : " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
| // + element.getLineNumber() + "]"; //$NON-NLS-1$
|
| // } catch (Throwable e) {
|
| // return ""; //$NON-NLS-1$
|
| // }
|
| // }
|
| }
|