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