package net.minecraft.src;

import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;

import java.io.PrintWriter;
import java.io.StringWriter;

public class PC_LogFormatter extends Formatter {

	static final String nl = System.getProperty("line.separator");
	
	private boolean lastFine = true;

	public String format(LogRecord record) {

		StringBuffer buf = new StringBuffer(180);


		Level level = record.getLevel();
		String trail = "";
		if(level == Level.CONFIG) trail="CONFIG: ";
		if(level == Level.FINE){
			trail=(lastFine?"":nl);
			lastFine = true;
		}
		if(level == Level.FINER) trail="\t";
		if(level == Level.FINEST) trail="\t\t";
		if(level == Level.INFO) trail="INFO: ";
		if(level == Level.SEVERE) trail="SEVERE: ";
		if(level == Level.WARNING) trail="WARNING: ";
		
		if(level != Level.FINE) lastFine=false;

		
		buf.append(trail);
		buf.append(formatMessage(record));

		buf.append(nl);

		Throwable throwable = record.getThrown();
		if (throwable != null) {
			
			buf.append("at ");
			buf.append(record.getSourceClassName());
			buf.append('.');
			buf.append(record.getSourceMethodName());
			buf.append(nl);
			
			StringWriter sink = new StringWriter();
			throwable.printStackTrace(new PrintWriter(sink, true));
			buf.append(sink.toString());

			buf.append(nl);
		}

		return buf.toString();
	}
}
