diff options
author | Andrew Su <[email protected]> | 2011-01-17 13:44:31 -0500 |
---|---|---|
committer | Andrew Su <[email protected]> | 2011-01-17 13:44:31 -0500 |
commit | e9f1f6b9df10ddcb59335321329fdb5ef13cf8e9 (patch) | |
tree | 0c4f186cf0ca1773ece7684e9d32592d258559c6 /netx/net/sourceforge/jnlp | |
parent | c361508174a8703a002d3231068c73c2fc93b967 (diff) |
Add logging for applet exceptions.
Diffstat (limited to 'netx/net/sourceforge/jnlp')
-rw-r--r-- | netx/net/sourceforge/jnlp/AppletLog.java | 52 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/Log.java | 42 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/NetxPanel.java | 11 |
3 files changed, 105 insertions, 0 deletions
diff --git a/netx/net/sourceforge/jnlp/AppletLog.java b/netx/net/sourceforge/jnlp/AppletLog.java new file mode 100644 index 0000000..bde8ede --- /dev/null +++ b/netx/net/sourceforge/jnlp/AppletLog.java @@ -0,0 +1,52 @@ +package net.sourceforge.jnlp; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.XMLFormatter; + +/** + * This class writes log information to file. + * + * @author Andrew Su ([email protected], [email protected]) + * + */ +class AppletLog extends Log { + private static Logger logger; + static { + try { + // If logging is enabled, we create logger. + if (enableLogging) { + String fn = icedteaLogDir + "plugin" + java.lang.System.currentTimeMillis() + ".log"; + boolean append = false; + FileHandler fh = new FileHandler(fn, append); + fh.setFormatter(new XMLFormatter()); + String logClassName = AppletLog.class.getName(); + logger = Logger.getLogger(logClassName); + logger.setLevel(Level.ALL); + logger.addHandler(fh); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private AppletLog() { + } + + /** + * Log the exception to file. + * + * @param e Exception that was thrown. + */ + public synchronized static void log(Throwable e) { + if (enableLogging && logger != null) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(baos); + e.printStackTrace(ps); + logger.log(Level.FINE, baos.toString()); + } + } +} diff --git a/netx/net/sourceforge/jnlp/Log.java b/netx/net/sourceforge/jnlp/Log.java new file mode 100644 index 0000000..a7aa102 --- /dev/null +++ b/netx/net/sourceforge/jnlp/Log.java @@ -0,0 +1,42 @@ +package net.sourceforge.jnlp; + +import java.io.File; + +import net.sourceforge.jnlp.config.DeploymentConfiguration; +import net.sourceforge.jnlp.runtime.JNLPRuntime; + +/** + * This file provides the information required to do logging. + * + * @author Andrew Su ([email protected], [email protected]) + * + */ +abstract class Log { + + // Directory where the logs are stored. + protected static String icedteaLogDir; + + protected static boolean enableLogging = false; + protected static boolean enableTracing = false; + + // Prepare for logging. + static { + DeploymentConfiguration config = JNLPRuntime.getConfiguration(); + + // Check whether logging and tracing is enabled. + enableLogging = Boolean.parseBoolean(config.getProperty(DeploymentConfiguration.KEY_ENABLE_LOGGING)); + enableTracing = Boolean.parseBoolean(config.getProperty(DeploymentConfiguration.KEY_ENABLE_TRACING)); + + // Get log directory, create it if it doesn't exist. If unable to create and doesn't exist, don't log. + icedteaLogDir = config.getProperty(DeploymentConfiguration.KEY_USER_LOG_DIR); + if (icedteaLogDir != null) { + File f = new File(icedteaLogDir); + if (f.isDirectory() || f.mkdirs()) + icedteaLogDir += File.separator; + else { + enableLogging = false; + enableTracing = false; + } + } + } +} diff --git a/netx/net/sourceforge/jnlp/NetxPanel.java b/netx/net/sourceforge/jnlp/NetxPanel.java index e049b10..2b3037a 100644 --- a/netx/net/sourceforge/jnlp/NetxPanel.java +++ b/netx/net/sourceforge/jnlp/NetxPanel.java @@ -22,6 +22,7 @@ package net.sourceforge.jnlp; +import net.sourceforge.jnlp.AppletLog; import net.sourceforge.jnlp.runtime.AppThreadGroup; import net.sourceforge.jnlp.runtime.AppletInstance; import net.sourceforge.jnlp.runtime.JNLPRuntime; @@ -68,6 +69,16 @@ public class NetxPanel extends AppletViewerPanel { super.run(); } + @Override + protected void showAppletException(Throwable t) { + /* + * Log any exceptions thrown while loading, initializing, starting, + * and stopping the applet. + */ + AppletLog.log(t); + super.showAppletException(t); + } + //Overriding to use Netx classloader. You might need to relax visibility //in sun.applet.AppletPanel for runLoader(). protected void runLoader() { |