package com.limegroup.gnutella.bugs;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
/**
* Generates a buffered log. It buffers the input and dumps it out after
* buffer gets full. It dumps the logs to prespecified file.
* @author asingla
*/
public class BugLog {
/**
* The output stream to write to
*/
private static PrintStream _out = null;
/**
* Initial capacity for the buffer (no. of characters)
*/
private static final int BUFFER_INITIAL_CAPACITY = 10000;
/**
* The internal buffer
*/
private static StringBuffer _buffer
= new StringBuffer(BUFFER_INITIAL_CAPACITY);
/**
* The number of calls to print/append methods that are buffered,
* before actually
* outputting the result to the out stream.
*/
private static final int BUFFERING_LIMIT = 300;
/**
* Number of calls that have been made to print/append methods, after the
* buffer was last written out to the 'out' stream
*/
private static int _count = 0;
//static initializer
static
{
try
{
_out = new PrintStream(
new FileOutputStream("/home/logs/BugLog",true));
}
catch(IOException ioe)
{
_out = null;
ioe.printStackTrace();
}
}
/**
* schedules the passed object for writing out to the stream
*/
public static void println(Object o)
{
//append to the buffer
_buffer.append(o);
_buffer.append("\n");
//increment the count
_count++;
//if count reached threshold
if(_count >= BUFFERING_LIMIT)
{
//write the buffer out to the stream
writeBufferOut();
//reinitialize the count
_count = 0;
}
}//end of fn append
/**
* Writes the buffer to the 'out' stream
*/
private static void writeBufferOut()
{
//write out
_out.print(_buffer);
_out.flush();
//reinitialize buffer
_buffer = new StringBuffer(BUFFER_INITIAL_CAPACITY);
}
/**
* Forces the internal buffer to be written out to the out stream
*/
public static void flush()
{
writeBufferOut();
}
}