/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.logging.ConsoleLogger");
dojo.require("dojo.logging.Logger");

dojo.lang.extend(dojo.logging.MemoryLogHandler,{
	
	debug:function(){
		dojo.hostenv.println.apply(this,arguments);
	},
	info:function(){
		dojo.hostenv.println.apply(this,arguments);
	},
	warn:function(){
		dojo.hostenv.println.apply(this,arguments);
	},
	error:function(){
		dojo.hostenv.println.apply(this,arguments);
	},
	critical:function(){
		dojo.hostenv.println.apply(this,arguments);
	},
	
	emit:function(record){
		if (!djConfig.isDebug) { return; }
		
		var funcName=null;
		switch(record.level){
			case 1:
				funcName="debug";
				break;
			case 2:
				funcName="info";
				break;
			case 3:
				funcName="warn";
				break;
			case 4:
				funcName="error";
				break;
			case 5:
				funcName="critical";
				break;
			default:
				funcName="debug";
		}
		
		var logStr = String(dojo.log.getLevelName(record.level)+": "
					+record.time.toLocaleTimeString())+": "+record.message;
		if(record.msgArgs && record.msgArgs.length > 0){
			this[funcName].call(this, logStr, record.msgArgs);
		} else {
			this[funcName].call(this, logStr);
		}
		
		this.data.push(record);
		if(this.numRecords != -1){
			while(this.data.length>this.numRecords){
				this.data.shift();
			}
		}
	}
});

if(!dj_undef("console") && !dj_undef("info", console)){
dojo.lang.extend(dojo.logging.MemoryLogHandler,{
	debug:function(){
		console.debug.apply(this, arguments);
	},
	info:function(){
		console.info.apply(this, arguments);
	},
	warn:function(){
		console.warn.apply(this, arguments);
	},
	error:function(){
		console.error.apply(this, arguments);
	},
	critical:function(){
		console.error.apply(this, arguments);
	}
});

dojo.lang.extend(dojo.logging.Logger,{
	exception: function(msg, e, squelch){
		var args=[msg];
		
		if(e){
			msg+=" : "+ e.name + " " + (e.description||e.message);
			args.push(e);
		}
		
		this.logType("ERROR", args);
		if(!squelch){
			throw e;
		}
	}
});

}
