1
2
24
25
48
49 import org.omus.util.iObservable;
50 import org.omus.util.EventDispatcher;
51
52
53 import org.omus.msg.Message;
54 import org.omus.msg.EnvelopeFactory;
55
56 import org.omus.core.Session;
57 import org.omus.core.User;
58
59
83 class org.omus.util.Log implements iObservable
84 {
85
86
87
88
91 public var category:Number;
92
93
96 public var logLevel:Number;
97
98
101 private var logCache:Array;
102
103
106 private var _eventSource:EventDispatcher;
107
108
111 public static var CLIENT_OMUS:Number = 9;
112
115 public static var CLIENT_DEV:Number = 10;
116
117
120 private var LEVEL_DEBUG:Number;
121 private var LEVEL_INFO:Number;
122 private var LEVEL_WARN:Number;
123 private var LEVEL_ERROR:Number;
124 private var LEVEL_OFF:Number;
125
126
129 public static var enablePropLog:Boolean = true;
130
131
134 private static var _instance:Log;
135
136
137
138
139
146 private function Log(cat:Number)
147 {
148
149 _eventSource = new EventDispatcher();
150
151
152 this.LEVEL_DEBUG = 4;
153 this.LEVEL_INFO = 3;
154 this.LEVEL_WARN = 2;
155 this.LEVEL_ERROR = 1;
156 this.LEVEL_OFF = 0;
157
158 category = cat;
159 logLevel = LEVEL_DEBUG;
160 logCache = new Array();
161
162
163 }
164
165
166
167
168
169
173 public function toString():String
174 {
175 return "[Objet Log]";
176 }
177
178
183 public function debugEnabled ():Boolean
184 {
185 return (logLevel >= LEVEL_DEBUG);
186 }
187
188
193 public function infoEnabled ():Boolean
194 {
195 return (logLevel >= LEVEL_INFO);
196 }
197
198
199
204 public function warnEnabled ():Boolean
205 {
206 return (logLevel >= LEVEL_WARN);
207 }
208
209
214 public function errorEnabled ():Boolean
215 {
216 return (logLevel >= LEVEL_ERROR);
217 }
218
219
225 public function debug (errCode:String, info:String):Void
226 {
227 if (debugEnabled())
228 {
229 logLocal("DEBUG", errCode, info);
230 logRemote(LEVEL_DEBUG, errCode, info);
231 }
232 }
233
234
240 public function info (errCode:String, info:String):Void
241 {
242 if (infoEnabled())
243 {
244 logLocal("INFO", errCode, info);
245 logRemote(LEVEL_INFO, errCode, info);
246 }
247 }
248
249
255 public function warn (errCode:String, info:String):Void
256 {
257 if (warnEnabled())
258 {
259 logLocal("WARN", errCode, info);
260 logRemote(LEVEL_WARN, errCode, info);
261 }
262 }
263
264
270 public function error (errCode:String, info:String):Void
271 {
272 if (errorEnabled())
273 {
274 logLocal("ERROR", errCode, info);
275 logRemote(LEVEL_ERROR, errCode, info);
276 }
277 }
278
279
287 public function logLocal (levelStr:String, errCode:String, info:String):Void
288 {
289
290 if (category == org.omus.util.Log.CLIENT_DEV) errCode = "cld-" + errCode;
291
292 levelStr += (levelStr.length == 4) ? " #" : " " ;
293 var logStr = "\n##### " + levelStr + "############################################\n\n";
294 logStr += "error code - " + errCode + "\ndescription - " + org.omus.util._Error.desc[errCode];
295 if (info != undefined && info.length > 0) {
296 logStr += "\n\n===== additional info ==================================\n\n" + info;
297 }
298 logStr += "\n\n########################################################\n\n";
299
300
301 trace (logStr);
302
303 fireEvent("", "onLog", "\n" + logStr);
304 }
305
306
313 public function logRemote (level:Number, errCode:String, info:String):Void
314 {
315 if (category == org.omus.util.Log.CLIENT_DEV) errCode = "cld-" + errCode;
316
317 var msg = new Message("");
318 var attach = msg.getAttachment();
319 attach.level = level;
320 attach.category = this.category;
321 attach.errorCode = errCode;
322 attach.info = info + "\nplayer version: " + System.capabilities.version;
323
324
325
326 var session = Session.getInstance();
327 var user = User.getInstance();
328 var envFactory = EnvelopeFactory.getInstance();
329
330 if (session.isConnected()) {
331 attach.info += "\nusername: " + user.getName();
332 session.sendMessage(envFactory.getOutgoing(msg, "log"));
333 } else {
334 logCache.push(msg);
335 }
336 }
337
338
341 public function sendCache ():Void
342 {
343
344 var envFactory = EnvelopeFactory.getInstance();
345 var session = Session.getInstance();
346 var user = User.getInstance();
347
348
349 var len = logCache.length;
350 for (var i = 0; i < len; i++)
351 {
352 var msg = logCache[i];
353 var attach = msg.getAttachment();
354 attach.info += "\nusername: " + user.getName();
355 var env = envFactory.getOutgoing(msg, "log");
356 session.sendMessage(env);
357 }
358 clearCache();
359 }
360
361
364 public function clearCache ():Void
365 {
366 logCache = new Array();
367 }
368
369
375 public function setLogLevel (ll:Number):Void
376 {
377
378 logLevel = ll;
379 }
380
381
382
389 private function fireEvent (logLevel:String, eventName:String):Void
390 {
391 _eventSource.fireEvent.apply (_eventSource, arguments);
392 }
393
394
400 public function addListener (listener:Object):Boolean
401 {
402 return _eventSource.addListener(listener);
403 }
404
405
411 public function removeListener (listener:Object):Boolean
412 {
413 return _eventSource.removeListener(listener);
414 }
415
416
419 public function removeAllListeners ():Void
420 {
421 _eventSource.removeAllListeners();
422 }
423
424
429 public function countListeners ():Number
430 {
431 return _eventSource.countListeners();
432 }
433
434
435
436
437
441 public static function getInstance():Log
442 {
443 if(_instance == undefined)
444 {
445
446 if (typeof(_global.oregano) != "object") _global.oregano = new Object();
447
448
449
450 _global.oregano.iLog = new Log(org.omus.util.Log.CLIENT_OMUS);
451
452
453 _global.ASSetPropFlags (_global, ["oregano"], 4);
454 _global.ASSetPropFlags (_global.oregano, ["iLog"], 4);
455
456 _instance = new Log(org.omus.util.Log.CLIENT_DEV);
457 }
458 return _instance;
459 }
460
461
468 public static function formatObject (obj:Object, indent:Number):String
469 {
470 var cnt = 0;
471 for (var each:String in obj) cnt++;
472 var s = "Object(" + cnt + "):";
473 for (var each:String in obj)
474 {
475 s += "\n";
476 for (var idx = 0; idx < indent; idx++) s += " ";
477 s += each + " = " + org.omus.util.Log.format(obj[each], indent + 1);
478 }
479 return s;
480 }
481
482
488 public static function formatArray (arr:Object, indent:Number):String
489 {
490 var s = "Array(" + arr.length + "):";
491 var len = arr.length;
492 for (var i = 0; i < len; i++)
493 {
494 s += "\n";
495 for (var idx = 0; idx < indent; idx++) s += " ";
496 s += "[" + i + "] = " + org.omus.util.Log.format(arr[i], indent + 1);
497 }
498 return s;
499 }
500
501
507 public static function format (val:Object, indent:Number):String
508 {
509 if (typeof(val) != "object") return val.toString();
510 var proto = val.__proto__;
511 if (proto == Object.prototype) return org.omus.util.Log.formatObject(val, indent);
512 if (proto == Array.prototype) return org.omus.util.Log.formatArray(val, indent);
513 var constr = val.constructor.toString();
514 org.omus.util.Log.enablePropLog = false;
515 if (constr.substr(0, 5) == "org.omus." && typeof(val.format) == "function") return val.format(indent);
516 org.omus.util.Log.enablePropLog = true;
517 return val.toString();
518 }
519
520
524 public static function toLog():String
525 {
526 return "[Objet Log]";
527 }
528 }
529