1 //jls.loader.provide('jls.lang.Logger'); 2 3 /** 4 * @class Default logger implementation. 5 * A Logger object is used to log messages for a specific system or application component. 6 */ 7 jls.lang.Logger = jls.lang.Class.create(/** @lends jls.lang.Logger.prototype */ 8 { 9 initialize : function(level) { 10 this._level = level || jls.lang.Logger.INFO; 11 }, 12 getLogLevel : function() { 13 return this._level; 14 }, 15 setLogLevel : function(level) { 16 if (typeof level == 'number') { 17 this._level = level; 18 } else if (typeof level == 'string') { 19 level = level.toUpperCase(); 20 if (level in jls.lang.Logger) { 21 this._level = jls.lang.Logger[level]; 22 } 23 } 24 }, 25 isTraceEnabled : function() { 26 return this.isEnabledFor(jls.lang.Logger.TRACE); 27 }, 28 isDebugEnabled : function() { 29 return this.isEnabledFor(jls.lang.Logger.DEBUG); 30 }, 31 isEnabledFor : function(level) { 32 return this._level <= level; 33 }, 34 trace : function(msg) { 35 this.log(jls.lang.Logger.TRACE, msg); 36 }, 37 debug : function(msg) { 38 this.log(jls.lang.Logger.DEBUG, msg); 39 }, 40 info : function(msg) { 41 this.log(jls.lang.Logger.INFO, msg); 42 }, 43 warn : function(msg) { 44 this.log(jls.lang.Logger.WARN, msg); 45 }, 46 error : function(msg) { 47 this.log(jls.lang.Logger.ERROR, msg); 48 }, 49 dumpObject : function(msg, o) { 50 this.trace(msg + ': ' + o); 51 for (var k in o) { 52 if (typeof (o[k]) == 'function') { 53 this.trace(' ' + k + '()'); 54 } else { 55 this.trace(' ' + k + ': ' + o[k]); 56 } 57 } 58 }, 59 log : function(level, msg) { 60 if ((level < jls.lang.Logger.FINEST) || (level > jls.lang.Logger.ERROR)) { 61 throw new jls.lang.Exception("Invalid log level " + level); 62 } 63 _native.core.log(level, msg); 64 } 65 }); 66 67 /* 68 * Could be used as the following: 69 * new jls.lang.Exception().printStackTrace(new jls.lang.Logger.PrintStream(jls.logger, jls.lang.Logger.WARN)); 70 */ 71 jls.lang.Logger.PrintStream = jls.lang.Class.create({ 72 initialize : function(logger, level) { 73 this._logger = logger; 74 this._level = level || jls.lang.Logger.DEBUG; 75 this._buffer = null; 76 }, 77 flush : function() { 78 if (this._buffer != null) { 79 this._logger.log(this._level, this._buffer); 80 this._buffer = null; 81 } 82 return this; 83 }, 84 print : function(s) { 85 if (this._buffer == null) { 86 this._buffer = s; 87 } else { 88 this._buffer += s; 89 } 90 if (s.indexOf('\n') >= 0) { 91 this.flush(); 92 } 93 return s.length; 94 }, 95 println : function(s) { 96 return this.print(s + jls.io.PrintStream.separator); 97 } 98 }); 99 100 Object.extend(jls.lang.Logger, /** @lends jls.lang.Logger */ 101 { 102 FINEST: 1, 103 FINE: 2, 104 TRACE: 3, 105 DEBUG: 4, 106 INFO: 5, 107 WARN: 6, 108 ERROR: 7 109 }); 110 111