From 30d5ca129e82cf3b6b227fdd585d21c0f1db3e35 Mon Sep 17 00:00:00 2001 From: hns Date: Thu, 18 Jan 2001 18:08:55 +0000 Subject: [PATCH] made logging asynchronous even when writing to System.out --- src/helma/util/Logger.java | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/helma/util/Logger.java b/src/helma/util/Logger.java index 51bc8edd..6a5e3ac6 100644 --- a/src/helma/util/Logger.java +++ b/src/helma/util/Logger.java @@ -31,6 +31,10 @@ public class Logger implements Runnable { public Logger (PrintStream out) { dformat = DateFormat.getInstance (); this.out = out; + entries = new Vector (); + logger = new Thread (this); + // logger.setPriority (Thread.MIN_PRIORITY+2); + logger.start (); } public Logger (String dirname, String filename) throws IOException { @@ -57,33 +61,36 @@ public class Logger implements Runnable { // it's enough to render the date every 15 seconds if (System.currentTimeMillis () - 15000 > dateLastRendered) renderDate (); - // log directly to printstream or to buffer? - if (out == null) - entries.addElement (dateCache + " " + msg); - else - out.println (dateCache + " " + msg); + entries.addElement (dateCache + " " + msg); } - private void renderDate () { - dateCache = dformat.format (new Date()); + private synchronized void renderDate () { dateLastRendered = System.currentTimeMillis (); + dateCache = dformat.format (new Date()); } public void run () { while (Thread.currentThread () == logger) { try { - if (currentFile.length() > 10000000) { + if (currentFile != null && currentFile.length() > 10000000) { // rotate log files each 10 megs swapFile (); } + int l = entries.size(); for (int i=0; i