From 7dceb9c255b01658cb92bcb2ac38e305ab7634a9 Mon Sep 17 00:00:00 2001 From: shaper Date: Tue, 8 Oct 2002 02:17:57 +0000 Subject: [PATCH] Added rudimentary facilities to the default log provider for caching log messages. git-svn-id: https://samskivert.googlecode.com/svn/trunk@861 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- .../samskivert/util/DefaultLogProvider.java | 57 +++++++++++++++++-- .../src/java/com/samskivert/util/Log.java | 10 +++- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/projects/samskivert/src/java/com/samskivert/util/DefaultLogProvider.java b/projects/samskivert/src/java/com/samskivert/util/DefaultLogProvider.java index 7bce2189..b7315ab9 100644 --- a/projects/samskivert/src/java/com/samskivert/util/DefaultLogProvider.java +++ b/projects/samskivert/src/java/com/samskivert/util/DefaultLogProvider.java @@ -1,5 +1,5 @@ // -// $Id: DefaultLogProvider.java,v 1.14 2002/09/24 07:57:40 mdb Exp $ +// $Id: DefaultLogProvider.java,v 1.15 2002/10/08 02:17:57 shaper Exp $ // // samskivert library - useful routines for java programs // Copyright (C) 2001 Michael Bayne @@ -22,14 +22,19 @@ package com.samskivert.util; import java.awt.Dimension; +import java.io.PrintWriter; +import java.io.StringWriter; + import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; +import java.util.List; /** * If no log provider is registered with the log services, the default - * provider will be used. The default provider simple logs messages to + * provider will be used. The default provider simply logs messages to * System.err and manages log levels in a simplistic way. * * @see Log @@ -54,13 +59,42 @@ public class DefaultLogProvider implements LogProvider } } + /** + * Sets whether recent log messages should be cached and made + * available via {@link #getRecentMessages}. The default setting is + * false. Note that currently all messages logged after + * caching is turned on will be kept forever (or until caching is + * turned off.) + */ + public synchronized void setCacheMessages (boolean cache) + { + if (cache && _recent == null) { + _recent = new ArrayList(); + } else if (!cache && _recent != null) { + _recent = null; + } + } + + /** + * Returns a list of the recent log messages, or null if + * log messages are not currently being cached. + */ + public synchronized List getRecentMessages () + { + return _recent; + } + public synchronized void log ( int level, String moduleName, String message) { Integer tlevel = (Integer)_levels.get(moduleName); if ((tlevel != null && level >= tlevel.intValue()) || (level >= _level)) { - System.err.println(formatEntry(moduleName, level, message)); + String entry = formatEntry(moduleName, level, message); + if (_recent != null) { + _recent.add(entry); + } + System.err.println(entry); } } @@ -70,7 +104,17 @@ public class DefaultLogProvider implements LogProvider Integer tlevel = (Integer)_levels.get(moduleName); if ((tlevel != null && level >= tlevel.intValue()) || (level >= _level)) { - System.err.println(formatEntry(moduleName, level, t.getMessage())); + String entry = formatEntry(moduleName, level, t.getMessage()); + if (_recent != null) { + _recent.add(entry); + } + System.err.println(entry); + + if (_recent != null) { + StringWriter sw = new StringWriter(); + t.printStackTrace(new PrintWriter(sw)); + _recent.add(sw.toString()); + } t.printStackTrace(System.err); } } @@ -181,6 +225,11 @@ public class DefaultLogProvider implements LogProvider protected SimpleDateFormat _format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS"); + /** The cached recent log messages that are made available to any + * external entities that would like access to them if we're actually + * caching messages. */ + protected ArrayList _recent; + /** Contains the dimensions of the terminal window in which we're * running, if it was possible to obtain them. Otherwise, it contains * the default dimensions. This is used to wrap lines. */ diff --git a/projects/samskivert/src/java/com/samskivert/util/Log.java b/projects/samskivert/src/java/com/samskivert/util/Log.java index 1a1148d0..bdf8db86 100644 --- a/projects/samskivert/src/java/com/samskivert/util/Log.java +++ b/projects/samskivert/src/java/com/samskivert/util/Log.java @@ -1,5 +1,5 @@ // -// $Id: Log.java,v 1.7 2002/05/31 20:44:41 mdb Exp $ +// $Id: Log.java,v 1.8 2002/10/08 02:17:57 shaper Exp $ // // samskivert library - useful routines for java programs // Copyright (C) 2001 Michael Bayne @@ -137,6 +137,14 @@ public final class Log _provider.setLevel(level); } + /** + * Returns the log provider currently in use by the logging services. + */ + public static LogProvider getLogProvider () + { + return _provider; + } + /** * Instructs the logging services to use the specified log provider to * perform the actual logging.