made logging asynchronous even when writing to System.out
This commit is contained in:
parent
0870e87f3e
commit
30d5ca129e
1 changed files with 17 additions and 10 deletions
|
@ -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 ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue