made logging asynchronous even when writing to System.out

This commit is contained in:
hns 2001-01-18 18:08:55 +00:00
parent 0870e87f3e
commit 30d5ca129e

View file

@ -31,6 +31,10 @@ public class Logger implements Runnable {
public Logger (PrintStream out) { public Logger (PrintStream out) {
dformat = DateFormat.getInstance (); dformat = DateFormat.getInstance ();
this.out = out; 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 { 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 // it's enough to render the date every 15 seconds
if (System.currentTimeMillis () - 15000 > dateLastRendered) if (System.currentTimeMillis () - 15000 > dateLastRendered)
renderDate (); renderDate ();
// log directly to printstream or to buffer? entries.addElement (dateCache + " " + msg);
if (out == null)
entries.addElement (dateCache + " " + msg);
else
out.println (dateCache + " " + msg);
} }
private void renderDate () { private synchronized void renderDate () {
dateCache = dformat.format (new Date());
dateLastRendered = System.currentTimeMillis (); dateLastRendered = System.currentTimeMillis ();
dateCache = dformat.format (new Date());
} }
public void run () { public void run () {
while (Thread.currentThread () == logger) { while (Thread.currentThread () == logger) {
try { try {
if (currentFile.length() > 10000000) { if (currentFile != null && currentFile.length() > 10000000) {
// rotate log files each 10 megs // rotate log files each 10 megs
swapFile (); swapFile ();
} }
int l = entries.size(); int l = entries.size();
for (int i=0; i<l; i++) { for (int i=0; i<l; i++) {
Object entry = entries.elementAt (0); Object entry = entries.elementAt (0);
entries.removeElementAt (0); entries.removeElementAt (0);
currentWriter.println (entry.toString()); if (out != null)
out.println (entry.toString());
else
currentWriter.println (entry.toString());
} }
currentWriter.flush ();
if (currentWriter != null)
currentWriter.flush ();
logger.sleep (1000l); logger.sleep (1000l);
} catch (InterruptedException ir) { } catch (InterruptedException ir) {
Thread.currentThread().interrupt (); Thread.currentThread().interrupt ();
} }