1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-08 01:25:23 +02:00

Bug 148484 - Refactor logging plugin

This commit is contained in:
David Dykstal 2006-06-25 02:46:24 +00:00
parent 568e8c931c
commit 891609edee
21 changed files with 888 additions and 1199 deletions

View file

@ -12,15 +12,18 @@ Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
Contributors:
{Name} (company) - description of contribution.
Michael Berger (IBM Canada) - 148434 Better user assistance for logging preference page.
-->
<?NLS TYPE="org.eclipse.help.contexts"?>
<contexts>
<context id="pref0000">
<description>Settings for the logging of messages.</description>
</context>
<!-- RSE logging -->
<context id="rsel0000">
<description>This is the RSE Logging preference page.
You can specify what severity of messages you wish to log - from informational messages, to warnings, to errors.
The debug setting provides the most detail.
Messages are logged to the .log file in the .metadata folder of the workspace.
</description>
</context>
</contexts>

View file

@ -9,5 +9,6 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Eclipse-LazyStart: true
Export-Package: org.eclipse.rse.logging,
org.eclipse.rse.logging.performance
org.eclipse.rse.logging.performance,
org.eclipse.rse.logging.ui
Bundle-Vendor: Eclipse.org

View file

@ -1,5 +1,4 @@
bin.includes = HelpContexts.xml,\
RemoteSystemsLogging.properties,\
plugin.properties,\
plugin.xml,\
style/,\

View file

@ -31,7 +31,7 @@ Contributors:
<!-- Preferences -->
<extension point="org.eclipse.core.runtime.preferences">
<initializer class="org.eclipse.rse.logging.LoggingPreferenceInitializer"/>
<initializer class="org.eclipse.rse.internal.logging.LoggingPreferenceInitializer"/>
</extension>
</plugin>

View file

@ -1,57 +0,0 @@
/********************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.internal.logging;
import java.util.Hashtable;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.rse.logging.Logger;
public class LoggerController {
private static Hashtable pluginTable = new Hashtable();
/**
* Return an previously cached Logger instance.<br>
* It will return null if no Logger instance has been created
* for this plugin before.
*/
public static Logger getInst(Plugin plugin) {
if (pluginTable.containsKey(plugin))
return (Logger) pluginTable.get(plugin);
else
return null;
}
public static void registerInst(Plugin plugin, Logger logger) {
pluginTable.put(plugin, logger);
return;
}
public static void freeInst(Plugin plugin) {
// get cached instance if one exists.
Logger logger = getInst(plugin);
// no luck, this means we have an incorrect free, do nothing.
if (logger == null)
return;
logger.freeResources();
pluginTable.remove(plugin);
return;
}
}

View file

@ -14,26 +14,30 @@
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.logging;
package org.eclipse.rse.internal.logging;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.rse.logging.IRemoteSystemsLogging;
import org.eclipse.rse.logging.RemoteSystemsLoggingPlugin;
/**
* This class initializes logging preferences.
*/
public class LoggingPreferenceInitializer extends AbstractPreferenceInitializer {
/**
* Constructor.
*/
public LoggingPreferenceInitializer() {
super();
}
/**
* Constructor.
*/
public LoggingPreferenceInitializer() {
super();
}
/**
* @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
*/
public void initializeDefaultPreferences() {
RemoteSystemsLoggingPlugin.getDefault().initializeDefaultPreferences();
}
/**
* @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
*/
public void initializeDefaultPreferences() {
Preferences prefs = RemoteSystemsLoggingPlugin.getDefault().getPluginPreferences();
prefs.setDefault(IRemoteSystemsLogging.DEBUG_LEVEL, IRemoteSystemsLogging.LOG_ERROR);
}
}

View file

@ -1,59 +0,0 @@
/********************************************************************************
* Copyright (c) 2006 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.logging;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;
/**
* The main plugin class to be used in the desktop.
*/
public class Activator extends Plugin {
//The shared instance.
private static Activator plugin;
/**
* The constructor.
*/
public Activator() {
plugin = this;
}
/**
* This method is called upon plug-in activation
*/
public void start(BundleContext context) throws Exception {
super.start(context);
}
/**
* This method is called when the plug-in is stopped
*/
public void stop(BundleContext context) throws Exception {
super.stop(context);
plugin = null;
}
/**
* Returns the shared instance.
*/
public static Activator getDefault() {
return plugin;
}
}

View file

@ -21,59 +21,39 @@ package org.eclipse.rse.logging;
*/
public interface IRemoteSystemsLogging {
// All attributes here are static final.
/**
* Name of the key that controls the logging level.<br>
*/
String PLUGIN_ID = "org.eclipse.rse.logging";
public static final String PLUGIN_ID = "org.eclipse.rse.logging";
/**
* Name of the key that controls the logging level.<br>
* (value is "debug_level").
*/
String DEBUG_LEVEL = "debug_level";
/**
* Name of the key that controls the log location.<br>
* (value is "log_location").
*/
String LOG_LOCATION = "log_location";
public static final String DEBUG_LEVEL = "debug_level";
/**
* Set debug_level to this value to get Error messages.<br>
* (value is 0).
*/
int LOG_ERROR = 0;
public static final int LOG_ERROR = 0;
/**
* Set debug_level to this value to get Warning messages.<br>
* (value is 1).
*/
int LOG_WARNING = 1;
public static final int LOG_WARNING = 1;
/**
* Set debug_level to this value to get Information messages.<br>
* (value is 2).
*/
int LOG_INFO = 2;
public static final int LOG_INFO = 2;
/**
* Set debug_level to this value to get Debug messages.<br>
* (value is 3).
*/
int LOG_DEBUG = 3;
/**
* Set log_location to this value to log to a file.<br>
* (value is "Log_To_File").
*/
String LOG_TO_FILE = "Log_To_File";
/**
* Set log_location to this value to log to a Std out.<br>
* (value is "Log_To_StdOut").
*/
String LOG_TO_STDOUT = "Log_To_StdOut";
public static final int LOG_DEBUG = 3;
}

View file

@ -19,15 +19,11 @@ package org.eclipse.rse.logging;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
import org.eclipse.rse.internal.logging.RemoteSystemLogListener;
import org.osgi.framework.Bundle;
/**
* Generic Logger class for handling Remote Systems logging and tracing.<br>
@ -59,10 +55,9 @@ import org.osgi.framework.Bundle;
* out.logInfo("loading myPlugin class.");<br>
* //out.logWarning("This is a warning message.");<br>
* //out.logError("This is an error.", new Exception());<br>
* //if (Logger.DEBUG)<br>
* // out.logDebugMessage(<br>
* // "myPlugin",<br>
* // "this is a debug message from class myPlugin.");<br>
* //out.logDebugMessage(<br>
* // "myPlugin",<br>
* // "this is a debug message from class myPlugin.");<br>
* ......<br>
* ......<br>
* }<br>
@ -77,70 +72,42 @@ import org.osgi.framework.Bundle;
*/
public class Logger implements IPropertyChangeListener {
public static final String Copyright =
"(C) Copyright IBM Corp. 2002, 2003. All Rights Reserved.";
/**
* This SHOULD be set to false in production.<br>
* Used to compile out developement debug messages.<br>
*/
public final static boolean DEBUG = false;
// Cashed workbenchPlugin Log, LogListener instances
private ILog systemsPluginLog = null;
private RemoteSystemLogListener logListener = null;
// Cashed Plugin ID, and plugin
private String pluginId = null;
Plugin systemPlugin = null;
private Plugin systemPlugin = null;
private int debug_level = IRemoteSystemsLogging.LOG_ERROR;
// Controls logging level
private int debug_level = 0;
// Captures initialization errors
private boolean init_ok = true;
protected Logger(Plugin systemPlugin) {
/**
* Creates a new Logger. Invoked by the LoggerFactory.
* @param systemPlugin The preferences for this plugin will determine the detail
* logged by this logger. This allows different levels of detail to be logged in the
* workbench.
* @see LoggerFactory#getInst(Plugin);
*/
Logger(Plugin systemPlugin) {
this.systemPlugin = systemPlugin;
this.pluginId = systemPlugin.getBundle().getSymbolicName();
initialize();
}
/**
* Initialize the Logger. The logger uses an ILog from the platform for this particular plugin, and
* establishes a listener on that log to format the items placed in the log.
*/
private void initialize() {
try {
systemsPluginLog = systemPlugin.getLog();
if (logListener == null)
logListener = new RemoteSystemLogListener(systemPlugin);
systemsPluginLog.addLogListener(logListener);
// get the debug level from plugin Preference store.
// note: logListener must be initialized before calling getPreference store!
Preferences store = systemPlugin.getPluginPreferences();
debug_level = store.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
store.addPropertyChangeListener(this);
store.addPropertyChangeListener(logListener);
} catch (Exception e) {
// Errors occured during initialize, disable logging.
// should never be here. Use Platform logger instead.
Bundle bundle = Platform.getBundle(Platform.PI_RUNTIME);
Platform.getLog(bundle).log(
new Status(
IStatus.ERROR,
IRemoteSystemsLogging.PLUGIN_ID,
IStatus.OK,
"could not create Logger for " + pluginId,
e));
init_ok = false;
}
systemsPluginLog = systemPlugin.getLog();
logListener = new RemoteSystemLogListener(systemPlugin);
systemsPluginLog.addLogListener(logListener);
Preferences store = systemPlugin.getPluginPreferences();
debug_level = store.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
store.addPropertyChangeListener(this);
store.addPropertyChangeListener(logListener);
}
/**
* Log a Debug message. This is intended to be wrapped as follows:<br>
* if (Logger.DEBUG)<br>
* Logger.logDebugMessage("someClassName", "someMessage");<br>
* Log a Debug message. This is intended to be used as follows:<br>
* Logger.logDebugMessage("someClassName", "someMessage");<br>
* <br>
* and the output will be:<br>
* <br>
@ -153,16 +120,10 @@ public class Logger implements IPropertyChangeListener {
* Note that since this message is only for developer debugging, it does not
* need to be localized to proper local.<br>
*/
public synchronized void logDebugMessage(
String className,
String message) {
if ((init_ok) && (debug_level >= IRemoteSystemsLogging.LOG_DEBUG)) {
// ie: print all INFO, WARNING and ERROR messages
MultiStatus debugStatus =
new MultiStatus(pluginId, IStatus.OK, className, null);
Status infoStatus =
new Status(IStatus.OK, pluginId, IStatus.OK, message, null);
public synchronized void logDebugMessage(String className, String message) {
if (debug_level >= IRemoteSystemsLogging.LOG_DEBUG) {
MultiStatus debugStatus = new MultiStatus(pluginId, IStatus.OK, className, null);
Status infoStatus = new Status(IStatus.OK, pluginId, IStatus.OK, message, null);
debugStatus.add(infoStatus);
systemsPluginLog.log(debugStatus);
}
@ -173,16 +134,11 @@ public class Logger implements IPropertyChangeListener {
* be localized to proper local.<br>
* ie: Resource.getString() should already have been called
*/
public synchronized void logError(String message, Throwable ex) {
if ((init_ok) && (debug_level >= IRemoteSystemsLogging.LOG_ERROR)) {
// ie: print only ERROR messages
if (message == null)
message = "";
Status errorStatus =
new Status(IStatus.ERROR, pluginId, IStatus.OK, message, ex);
if (debug_level >= IRemoteSystemsLogging.LOG_ERROR) {
if (message == null) message = "";
Status errorStatus = new Status(IStatus.ERROR, pluginId, IStatus.OK, message, ex);
systemsPluginLog.log(errorStatus);
}
}
@ -191,28 +147,21 @@ public class Logger implements IPropertyChangeListener {
* be localized to proper local.<br>
* ie: Resource.getString() should already have been called
*/
public synchronized void logInfo(String message)
{
public synchronized void logInfo(String message) {
logInfo(message, null);
}
/**
* Log an Information message. Note that the message should already
* be localized to proper local.<br>
* ie: Resource.getString() should already have been called
*/
public synchronized void logInfo(String message, Throwable ex) {
if ((init_ok) && (debug_level >= IRemoteSystemsLogging.LOG_INFO)) {
if (message == null)
message = "";
// ie: print all INFO, WARNING and ERROR messages
Status infoStatus =
new Status(IStatus.INFO, pluginId, IStatus.OK, message, ex);
if (debug_level >= IRemoteSystemsLogging.LOG_INFO) {
if (message == null) message = "";
Status infoStatus = new Status(IStatus.INFO, pluginId, IStatus.OK, message, ex);
systemsPluginLog.log(infoStatus);
}
}
/**
@ -220,8 +169,7 @@ public class Logger implements IPropertyChangeListener {
* be localized to proper local.<br>
* ie: Resource.getString() should already have been called
*/
public synchronized void logWarning(String message)
{
public synchronized void logWarning(String message) {
logWarning(message, null);
}
@ -231,26 +179,17 @@ public class Logger implements IPropertyChangeListener {
* ie: Resource.getString() should already have been called
*/
public synchronized void logWarning(String message, Throwable ex) {
if ((init_ok) && (debug_level >= IRemoteSystemsLogging.LOG_WARNING)) {
if (message == null)
message = "";
// ie: print all WARNING and ERROR messages
Status warningStatus =
new Status(
IStatus.WARNING,
pluginId,
IStatus.OK,
message,
ex);
if (debug_level >= IRemoteSystemsLogging.LOG_WARNING) {
if (message == null) message = "";
Status warningStatus = new Status(IStatus.WARNING, pluginId, IStatus.OK, message, ex);
systemsPluginLog.log(warningStatus);
}
}
public synchronized void setDebugLevel(int level) {
debug_level = level;
}
public synchronized int getDebugLevel() {
return debug_level;
}
@ -260,10 +199,9 @@ public class Logger implements IPropertyChangeListener {
}
/**
* Handle changes from Preferences page.
* Handle changes from a Preferences page.
*/
public synchronized void propertyChange(PropertyChangeEvent event) {
// refresh the debug level from plugin Preference store
Preferences prefs = systemPlugin.getPluginPreferences();
debug_level = prefs.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
}

View file

@ -16,8 +16,8 @@
package org.eclipse.rse.logging;
import java.util.Hashtable;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.rse.internal.logging.LoggerController;
/**
* Factory class for creating Logger instances.<br>
@ -27,39 +27,31 @@ import org.eclipse.rse.internal.logging.LoggerController;
*/
public class LoggerFactory {
private static Hashtable pluginTable = new Hashtable();
/**
* Returns a Logger instance for the given plugin.<br> Note that there is only
* a singelton instance of the Logger class per plugin. You are guarenteed the
* same instance if one has previously been created.
* Returns the Logger instance for a given plugin. There is only
* one instance of the Logger class per plugin.
*/
public static Logger getInst(Plugin plugin) {
// get cached instance from controller if one exists.
Logger inst = LoggerController.getInst(plugin);
// no luck, create it and register it with the controller, and create
// preference page.
if (inst == null) {
inst = new Logger(plugin);
LoggerController.registerInst(plugin, inst);
// Check to see if the Logging plugin out instance has been created yet.
// If it has, use it to log
if (RemoteSystemsLoggingPlugin.out != null)
RemoteSystemsLoggingPlugin.out.logInfo(
"Created Logger instance for "
+ plugin.getBundle().getSymbolicName());
public static Logger getLogger(Plugin plugin) {
Logger logger = (Logger) pluginTable.get(plugin);
if (logger == null) {
logger = new Logger(plugin);
pluginTable.put(plugin, logger);
}
return inst;
return logger;
}
/**
* Frees resources used by the Logger instance for the given plugin.<br>
* This methods must be called as part of the the plugin shutdown life cycle.
*/
public static void freeInst(Plugin plugin) {
// delegate to controller
LoggerController.freeInst(plugin);
* Frees resources used by the Logger instance for the given plugin.<br>
* This methods must be called as part of the the plugin shutdown life cycle.
*/
public static void freeLogger(Plugin plugin) {
Logger logger = (Logger) pluginTable.get(plugin);
if (logger != null) {
logger.freeResources();
pluginTable.remove(plugin);
}
}
}

View file

@ -14,7 +14,7 @@
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.internal.logging;
package org.eclipse.rse.logging;
import java.io.BufferedWriter;
import java.io.File;
@ -26,27 +26,22 @@ import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
import org.eclipse.rse.logging.IRemoteSystemsLogging;
/**
* Log Listener is a sink for messages coming from Logger.
*/
public class RemoteSystemLogListener implements ILogListener, IPropertyChangeListener {
class RemoteSystemLogListener implements ILogListener, IPropertyChangeListener {
private PrintWriter log = null;
private File outputFile = null;
private boolean log_to_stdout = false;
private Plugin plugin = null;
/**
* Create a new log listener for a plugin.
* @param plugin The plugin for which to create a log listener.
*/
public RemoteSystemLogListener(Plugin plugin) {
this.plugin = plugin;
IPath path = plugin.getStateLocation().addTrailingSeparator().append(".log");
outputFile = path.toFile();
if ((outputFile != null) && (outputFile.exists())) {
@ -61,13 +56,8 @@ public class RemoteSystemLogListener implements ILogListener, IPropertyChangeLis
*/
private void initialize() {
try {
Preferences store = plugin.getPluginPreferences();
String log_location = store.getString(IRemoteSystemsLogging.LOG_LOCATION);
if ((log_location != null) && (log_location.equalsIgnoreCase(IRemoteSystemsLogging.LOG_TO_STDOUT))) {
doLogToView();
} else {
doLogToFile();
}
freeResources();
log = new PrintWriter(new BufferedWriter(new FileWriter(outputFile.toString(), true)), true);
} catch (Exception e) {
log = null;
System.err.println("Exception in RemoteSystemLogListener.initialize(): " + e.getMessage());
@ -75,35 +65,11 @@ public class RemoteSystemLogListener implements ILogListener, IPropertyChangeLis
}
}
/**
* Logs to standard output.
*/
private void doLogToView() {
// make sure we free resources first
freeResources();
// log
log = new PrintWriter(System.out, true);
// cach last state
log_to_stdout = true;
}
private void doLogToFile() throws Exception {
// make sure we free resources first
freeResources();
// log
log =
new PrintWriter(
new BufferedWriter(new FileWriter(outputFile.toString(), true)),
true);
// cache last state
log_to_stdout = false;
}
public void logging(IStatus status) {
if (log == null)
return;
else {
// Need a to string here, because we need to be able to compate dates.
// Need a to string here, because we need to be able to compare dates.
String date = new Date().toString();
log.println(date);
int severity = status.getSeverity();
@ -119,17 +85,14 @@ public class RemoteSystemLogListener implements ILogListener, IPropertyChangeLis
log.print(" ");
log.print(status.getPlugin());
// removed for now because we do not use Error codes.
//log.print(" ");
//log.print(status.getCode());
log.print(" ");
log.println(status.getMessage());
if (status.getException() != null)
status.getException().printStackTrace(log);
if (status.getException() != null) status.getException().printStackTrace(log);
if (status.isMultiStatus()) {
IStatus[] children = status.getChildren();
for (int i = 0; i < children.length; i++)
for (int i = 0; i < children.length; i++) {
loggingChild(children[i]);
}
}
log.println("--------------------------------------------");
}
@ -149,8 +112,7 @@ public class RemoteSystemLogListener implements ILogListener, IPropertyChangeLis
else {
log.print("\t\t");
log.println(status.getMessage());
if (status.getException() != null)
status.getException().printStackTrace(log);
if (status.getException() != null) status.getException().printStackTrace(log);
if (status.isMultiStatus()) {
IStatus[] children = status.getChildren();
for (int i = 0; i < children.length; i++)
@ -168,14 +130,7 @@ public class RemoteSystemLogListener implements ILogListener, IPropertyChangeLis
}
public void freeResources() {
if (log == null)
return;
// make sure to not close std_out. A closed stream can *not*
// br re-opened!
if (log_to_stdout)
return;
if (log == null) return;
log.flush();
log.close();
log = null;

View file

@ -24,23 +24,15 @@ import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Preferences;
import org.osgi.framework.BundleContext;
/**
* Remote Systems Logging plugin.
*/
public class RemoteSystemsLoggingPlugin extends Plugin {
//The shared instance.
private static RemoteSystemsLoggingPlugin inst;
//Resource bundle.
private static RemoteSystemsLoggingPlugin singleton;
private ResourceBundle resourceBundle;
// The cached Logger inst.
public static Logger out = null;
/**
@ -48,17 +40,14 @@ public class RemoteSystemsLoggingPlugin extends Plugin {
*/
public RemoteSystemsLoggingPlugin() {
super();
if (inst == null) {
inst = this;
}
singleton = this;
}
/**
* Returns the shared plugin instance.
*/
public static RemoteSystemsLoggingPlugin getDefault() {
return inst;
return singleton;
}
/**
@ -79,47 +68,33 @@ public class RemoteSystemsLoggingPlugin extends Plugin {
* Returns the plugin's resource bundle.
*/
public ResourceBundle getResourceBundle() {
if (resourceBundle == null) {
try {
IPath path = new Path("$nl$/RemoteSystemsLogging.properties");
URL url = FileLocator.find(getBundle(), path, null);
resourceBundle = new PropertyResourceBundle(url.openStream());
} catch (Exception x) {
resourceBundle = null;
out.logInfo("RemoteSystemsLoggingPlugin - unable to log resourcebundle");
}
}
if (resourceBundle == null) {
try {
IPath path = new Path("$nl$/RemoteSystemsLogging.properties");
URL url = FileLocator.find(getBundle(), path, null);
resourceBundle = new PropertyResourceBundle(url.openStream());
} catch (Exception x) {
resourceBundle = null;
out.logInfo("RemoteSystemsLoggingPlugin - unable to log resourcebundle");
}
}
return resourceBundle;
}
/**
* Sets default preference values.
/* (non-Javadoc)
* @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
*/
public void initializeDefaultPreferences() {
Preferences prefs = getPluginPreferences();
prefs.setDefault(IRemoteSystemsLogging.DEBUG_LEVEL, IRemoteSystemsLogging.LOG_ERROR);
prefs.setDefault(IRemoteSystemsLogging.LOG_LOCATION, IRemoteSystemsLogging.LOG_TO_FILE);
public void start(BundleContext context) throws Exception {
super.start(context);
out = LoggerFactory.getLogger(this);
out.logInfo("loading RemoteSystemsLoggingPlugin class.");
}
/**
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
// don't need a preference page for this plugin.
out = LoggerFactory.getInst(this);
out.logInfo("loading RemoteSystemsLoggingPlugin class.");
}
/**
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
LoggerFactory.freeInst(this);
super.stop(context);
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
LoggerFactory.freeLogger(this);
super.stop(context);
}
}

View file

@ -14,7 +14,7 @@
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.internal.logging;
package org.eclipse.rse.logging.ui;
import java.util.HashSet;
import java.util.Set;

View file

@ -0,0 +1,30 @@
/********************************************************************************
* Copyright (c) 2006 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Dykstal (IBM) - 148434 Better F1 help.
********************************************************************************/
package org.eclipse.rse.logging.ui;
import org.eclipse.osgi.util.NLS;
public class LoggingPreferenceLabels extends NLS {
private static String BUNDLE_NAME = "org.eclipse.rse.logging.ui.LoggingPreferenceLabels";//$NON-NLS-1$
public static String LOGGING_PREFERENCE_PAGE_TOPLABEL1;
public static String LOGGING_PREFERENCE_PAGE_TOPLABEL2;
public static String LOGGING_PREFERENCE_PAGE_ERRORS_ONLY;
public static String LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS;
public static String LOGGING_PREFERENCE_PAGE_INFO_DEBUG;
public static String LOGGING_PREFERENCE_PAGE_FULL_DEBUG;
static {
// load message values from bundle file
NLS.initializeMessages(BUNDLE_NAME, LoggingPreferenceLabels.class);
}
}

View file

@ -21,12 +21,9 @@
# Preference Page
# ----------------
LoggingPreferencePage.topLabel1 = Specify the logging options for {0}
LoggingPreferencePage.topLabel2 = Logging Level:
LoggingPreferencePage.errors_only = Errors only
LoggingPreferencePage.warnings_errors = Warnings and errors
LoggingPreferencePage.info_debug = Warnings, errors and information messages
LoggingPreferencePage.full_debug = Full debug
LoggingPreferencePage.logging_location = Logging Location:
LoggingPreferencePage.log_to_file = Log to file (default)
LoggingPreferencePage.log_to_stdout = Log to Standard Out
LOGGING_PREFERENCE_PAGE_TOPLABEL1 = Specify the logging options for {0}
LOGGING_PREFERENCE_PAGE_TOPLABEL2 = Logging Level:
LOGGING_PREFERENCE_PAGE_ERRORS_ONLY = Errors only
LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS = Warnings and errors
LOGGING_PREFERENCE_PAGE_INFO_DEBUG = Warnings, errors and information messages
LOGGING_PREFERENCE_PAGE_FULL_DEBUG = Full debug

View file

@ -11,23 +11,20 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* Michael Berger (IBM Canada) - 148434 Better F1 help.
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.logging;
package org.eclipse.rse.logging.ui;
import java.text.MessageFormat;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.rse.internal.logging.LabelUtil;
import org.eclipse.rse.logging.IRemoteSystemsLogging;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@ -37,32 +34,21 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.Bundle;
/**
* An abstract preference page for all remote system logging.<br/>
* Use a subclass of this page if you need a preference page to control
* logging.
*/
public abstract class LoggingPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IExecutableExtension {
public abstract class LoggingPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private Button radioButton0;
private Button radioButton1;
private Button radioButton2;
private Button radioButton3;
private Button radioButtonLogFile;
private Button radioButtonLogView;
/**
* This is the plugin instance who's preference store will be used
* to control the settings on this page. Also, when this page is closed
* the settings are restored in the preference store of the above plugin.
*/
private Bundle bundle = null;
/**
* Creates composite control and sets the default layout data.
@ -90,37 +76,28 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
* Method declared on PreferencePage
*/
protected Control createContents(Composite parent) {
Bundle bundle = getBundle();
Composite composite_tab = createComposite(parent, 2);
String bundleName = (String)(bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME));
String topLabel1 = RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.topLabel1");
topLabel1 = MessageFormat.format(topLabel1, new Object[] {bundleName});
String bundleName = (String) (bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME));
String topLabel1 = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_TOPLABEL1;
topLabel1 = MessageFormat.format(topLabel1, new Object[] { bundleName });
createLabel(composite_tab, topLabel1);
forceSpace(composite_tab);
String topLabel2 = RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.topLabel2");
String topLabel2 = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_TOPLABEL2;
createLabel(composite_tab, topLabel2);
tabForward(composite_tab);
Composite composite1_radioButton = createComposite(composite_tab, 1);
String text = RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.errors_only");
String text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_ERRORS_ONLY;
Set used = LabelUtil.usedFromString("ad"); // the mnemonics already used on preference page (in English)
radioButton0 = createRadioButton(composite1_radioButton, LabelUtil.assignMnemonic(text, used));
text = RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.warnings_errors");
text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS;
radioButton1 = createRadioButton(composite1_radioButton, LabelUtil.assignMnemonic(text, used));
text = RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.info_debug");
text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_INFO_DEBUG;
radioButton2 = createRadioButton(composite1_radioButton, LabelUtil.assignMnemonic(text, used));
// now add debug stuff, that only shows up in a debug build.
if (Logger.DEBUG) {
radioButton3 = createRadioButton(composite1_radioButton, RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.full_debug"));
Composite composite_tab2 = createComposite(parent, 2);
Label label3 = createLabel(composite_tab2, RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.logging_location"));
tabForward(composite_tab2);
Composite composite_radioButton2 = createComposite(composite_tab2, 1);
radioButtonLogFile = createRadioButton(composite_radioButton2, RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.log_to_file"));
radioButtonLogView = createRadioButton(composite_radioButton2, RemoteSystemsLoggingPlugin.getResourceString("LoggingPreferencePage.log_to_stdout"));
WorkbenchHelp.setHelp(composite_tab2, "com.ibm.etools.systems.logging.pref0000");
}
text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_FULL_DEBUG;
radioButton3 = createRadioButton(composite1_radioButton, LabelUtil.assignMnemonic(text, used));
initializeValues();
RemoteSystemsLoggingPlugin.out.logInfo("created LoggingPreferencePage");
WorkbenchHelp.setHelp(composite_tab, "com.ibm.etools.systems.logging.pref0000");
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "com.ibm.etools.systems.logging.rsel0000");
return new Composite(parent, SWT.NULL);
}
@ -162,24 +139,27 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
*
*/
protected IPreferenceStore doGetPreferenceStore() {
Bundle bundle = getBundle();
if (bundle != null) {
AbstractUIPlugin plugin = getPlugin();
if (plugin != null) {
return plugin.getPreferenceStore();
}
else {
} else {
return new PreferenceStore();
}
}
else {
} else {
return new PreferenceStore();
}
}
protected abstract AbstractUIPlugin getPlugin();
private Bundle getBundle() {
Plugin plugin = getPlugin();
Bundle bundle = plugin.getBundle();
return bundle;
}
/**
* Method declared on IWorkbenchPreferencePage
*/
@ -195,36 +175,24 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
radioButton0.setSelection(false);
radioButton1.setSelection(false);
radioButton2.setSelection(false);
if (null != radioButton3)
radioButton3.setSelection(false);
if (Logger.DEBUG) {
radioButtonLogFile.setSelection(false);
radioButtonLogView.setSelection(false);
}
if (null != radioButton3) radioButton3.setSelection(false);
int choice = store.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
switch (choice) {
case 0 :
radioButton0.setSelection(true);
break;
case 1 :
radioButton1.setSelection(true);
break;
case 2 :
radioButton2.setSelection(true);
break;
case 3 :
if (null != radioButton3)
radioButton3.setSelection(true);
else
radioButton2.setSelection(true);
break;
}
if (Logger.DEBUG) {
String log_location = store.getString(IRemoteSystemsLogging.LOG_LOCATION);
if (log_location.equalsIgnoreCase(IRemoteSystemsLogging.LOG_TO_STDOUT))
radioButtonLogView.setSelection(true);
case 0:
radioButton0.setSelection(true);
break;
case 1:
radioButton1.setSelection(true);
break;
case 2:
radioButton2.setSelection(true);
break;
case 3:
if (null != radioButton3)
radioButton3.setSelection(true);
else
radioButtonLogFile.setSelection(true);
radioButton2.setSelection(true);
break;
}
}
@ -237,36 +205,24 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
radioButton0.setSelection(false);
radioButton1.setSelection(false);
radioButton2.setSelection(false);
if (null != radioButton3)
radioButton3.setSelection(false);
if (Logger.DEBUG) {
radioButtonLogFile.setSelection(false);
radioButtonLogView.setSelection(false);
}
if (null != radioButton3) radioButton3.setSelection(false);
int choice = store.getDefaultInt(IRemoteSystemsLogging.DEBUG_LEVEL);
switch (choice) {
case 0 :
radioButton0.setSelection(true);
break;
case 1 :
radioButton1.setSelection(true);
break;
case 2 :
radioButton2.setSelection(true);
break;
case 3 :
if (null != radioButton3)
radioButton3.setSelection(true);
else
radioButton2.setSelection(true);
break;
}
if (Logger.DEBUG) {
String log_location = store.getDefaultString(IRemoteSystemsLogging.LOG_LOCATION);
if (log_location.equalsIgnoreCase(IRemoteSystemsLogging.LOG_TO_STDOUT))
radioButtonLogView.setSelection(true);
case 0:
radioButton0.setSelection(true);
break;
case 1:
radioButton1.setSelection(true);
break;
case 2:
radioButton2.setSelection(true);
break;
case 3:
if (null != radioButton3)
radioButton3.setSelection(true);
else
radioButtonLogFile.setSelection(true);
radioButton2.setSelection(true);
break;
}
}
@ -296,17 +252,8 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
choice = 1;
else if (radioButton2.getSelection())
choice = 2;
else if (null != radioButton3 && radioButton3.getSelection())
choice = 3;
else if (null != radioButton3 && radioButton3.getSelection()) choice = 3;
store.setValue(IRemoteSystemsLogging.DEBUG_LEVEL, choice);
if (Logger.DEBUG) {
String log_location = "";
if (radioButtonLogFile.getSelection())
log_location = IRemoteSystemsLogging.LOG_TO_FILE;
else
log_location = IRemoteSystemsLogging.LOG_TO_STDOUT;
store.setValue(IRemoteSystemsLogging.LOG_LOCATION, log_location);
}
}
/**
@ -336,17 +283,4 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
data.horizontalSpan = 2;
label.setLayoutData(data);
}
/**
* This is needed to get to the plugin id, and then plugin instance.
*/
public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
try {
String pluginName = config.getDeclaringExtension().getContributor().getName();
this.bundle = Platform.getBundle(pluginName);
} catch (Exception e) {
RemoteSystemsLoggingPlugin.out.logError("Failed to create LoggingPreferencePage.", e);
}
}
}

View file

@ -16,7 +16,7 @@
package org.eclipse.rse.ui.propertypages;
import org.eclipse.rse.logging.LoggingPreferencePage;
import org.eclipse.rse.logging.ui.LoggingPreferencePage;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.ui.plugin.AbstractUIPlugin;

View file

@ -1810,7 +1810,7 @@ public class SystemFilterPoolManager implements ISystemFilterPoolManager
*/
public void logDebugMessage(String prefix, String message)
{
if ((Logger.DEBUG) && (logger!=null))
if ((logger!=null))
{
logger.logDebugMessage(prefix, message);
}

View file

@ -448,15 +448,13 @@ public abstract class AbstractConnectorService extends RSEModelObject implements
if (passwordInformation == null && oldUserId != null && !forcePrompt) {
SystemSignonInformation savedPasswordInformation = ppm.find(hostType, hostName, oldUserId);
if (savedPasswordInformation != null) {
if (validator != null) {
if (!validator.isValid(shell, savedPasswordInformation)) {
passwordValid = false;
clearPasswordCache();
passwordInformation = null;
} else {
setPasswordInformation(savedPasswordInformation);
passwordInformation = getPasswordInformation();
}
if (validator == null || validator.isValid(shell, savedPasswordInformation)) {
setPasswordInformation(savedPasswordInformation);
passwordInformation = getPasswordInformation();
} else {
passwordValid = false;
clearPasswordCache();
passwordInformation = null;
}
}
}
@ -1087,7 +1085,7 @@ public abstract class AbstractConnectorService extends RSEModelObject implements
}
private void logException(Throwable t) {
Logger log = LoggerFactory.getInst(RSEUIPlugin.getDefault());
Logger log = LoggerFactory.getLogger(RSEUIPlugin.getDefault());
log.logError("Unexpected exception", t);
}

View file

@ -655,10 +655,7 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
*/
public static void logDebugMessage(String prefix, String message)
{
if (Logger.DEBUG)
{
log.logDebugMessage(prefix, message);
}
log.logDebugMessage(prefix, message);
}
/**
@ -716,7 +713,7 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
// logger
if (log == null) {
log = LoggerFactory.getInst(this);
log = LoggerFactory.getLogger(this);
log.logInfo("Loading " + this.getClass());
}
}
@ -726,7 +723,7 @@ public abstract class SystemBasePlugin extends AbstractUIPlugin
*/
public void stop(BundleContext context) throws Exception {
logDebugMessage(this.getClass().getName(), "SHUTDOWN");
LoggerFactory.freeInst(this);
LoggerFactory.freeLogger(this);
super.stop(context);
}