aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge/jnlp
diff options
context:
space:
mode:
authorAndrew Su <[email protected]>2011-01-17 13:44:31 -0500
committerAndrew Su <[email protected]>2011-01-17 13:44:31 -0500
commite9f1f6b9df10ddcb59335321329fdb5ef13cf8e9 (patch)
tree0c4f186cf0ca1773ece7684e9d32592d258559c6 /netx/net/sourceforge/jnlp
parentc361508174a8703a002d3231068c73c2fc93b967 (diff)
Add logging for applet exceptions.
Diffstat (limited to 'netx/net/sourceforge/jnlp')
-rw-r--r--netx/net/sourceforge/jnlp/AppletLog.java52
-rw-r--r--netx/net/sourceforge/jnlp/Log.java42
-rw-r--r--netx/net/sourceforge/jnlp/NetxPanel.java11
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() {