Advertisement
Guest User

logger

a guest
May 10th, 2013
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function() {
  2.   var CryptographicBuffer, LOGGERS, WinJSFileAppender, WinJSRollingFileAppender, consoleAppender, fileAppender, getLogger, logLayout, rootLogger, stringEncoding,
  3.     __hasProp = {}.hasOwnProperty,
  4.     __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
  5.  
  6.   CryptographicBuffer = Windows.Security.Cryptography.CryptographicBuffer;
  7.  
  8.   stringEncoding = Windows.Security.Cryptography.BinaryStringEncoding.utf8;
  9.  
  10.   WinJSFileAppender = (function(_super) {
  11.  
  12.     __extends(WinJSFileAppender, _super);
  13.  
  14.     function WinJSFileAppender(filename, layout) {
  15.       this.filename = filename != null ? filename : 'log.xml';
  16.       if (layout == null) {
  17.         layout = new log4javascript.XmlLayout();
  18.       }
  19.       this.setLayout(layout);
  20.       this._queue = new Queue();
  21.       return;
  22.     }
  23.  
  24.     WinJSFileAppender.prototype.getOutputStreamAsync = function() {
  25.       var _this = this;
  26.       if (this._stream) {
  27.         return WinJS.Promise.as(this._stream);
  28.       } else {
  29.         return this.getFileAsync().then(function(file) {
  30.           return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
  31.         }).then(function(stream) {
  32.           return _this._stream = stream.getOutputStreamAt(stream.size);
  33.         });
  34.       }
  35.     };
  36.  
  37.     WinJSFileAppender.prototype.getFileAsync = function() {
  38.       var _this = this;
  39.       return Windows.Storage.ApplicationData.current.localFolder.createFolderAsync('logs', Windows.Storage.CreationCollisionOption.openIfExists).then(function(folder) {
  40.         return folder.createFileAsync(_this.filename, Windows.Storage.CreationCollisionOption.openIfExists);
  41.       });
  42.     };
  43.  
  44.     WinJSFileAppender.prototype.append = function(loggingEvent) {
  45.       this._queue.enqueue(loggingEvent);
  46.       this._drainQueue();
  47.     };
  48.  
  49.     WinJSFileAppender.prototype._drainQueue = function() {
  50.       var drainScheduled,
  51.         _this = this;
  52.       if (this._queue.isEmpty()) {
  53.         return;
  54.       }
  55.       if (this._draining) {
  56.         drainScheduled = true;
  57.         return;
  58.       }
  59.       this._draining = true;
  60.       return this.getOutputStreamAsync().then(function(stream) {
  61.         var buffer, logText, loggingEvent;
  62.         logText = '';
  63.         while (loggingEvent = _this._queue.dequeue()) {
  64.           logText += _this.layout.format(loggingEvent);
  65.           if (loggingEvent.exception && _this.layout.ignoresThrowable()) {
  66.             logText += "" + (loggingEvent.getThrowableStrRep()) + "\r\n";
  67.           }
  68.         }
  69.         buffer = CryptographicBuffer.convertStringToBinary(logText, stringEncoding);
  70.         return stream.writeAsync(buffer);
  71.       }).then(function() {
  72.         _this._draining = false;
  73.         if (drainScheduled) {
  74.           return _this._drainQueue();
  75.         }
  76.       }, function() {
  77.         return _this._draining = false;
  78.       });
  79.     };
  80.  
  81.     return WinJSFileAppender;
  82.  
  83.   })(log4javascript.Appender);
  84.  
  85.   WinJSRollingFileAppender = (function(_super) {
  86.  
  87.     __extends(WinJSRollingFileAppender, _super);
  88.  
  89.     function WinJSRollingFileAppender(layout) {
  90.       WinJSRollingFileAppender.__super__.constructor.call(this, this._getFilename(), layout);
  91.       this._registerListener();
  92.     }
  93.  
  94.     WinJSRollingFileAppender.prototype.resetAsync = function() {
  95.       var _this = this;
  96.       return WinJS.Promise.as(this._drainQueue()).then(function() {
  97.         var _ref;
  98.         if (!_this._stream) {
  99.           return;
  100.         }
  101.         if ((_ref = _this._timeOutPromise) != null) {
  102.           _ref.cancel();
  103.         }
  104.         _this._stream.close();
  105.         _this._stream = null;
  106.         _this.filename = _this._getFilename();
  107.         return _this._registerListener();
  108.       });
  109.     };
  110.  
  111.     WinJSRollingFileAppender.prototype._getFilename = function() {
  112.       return "app" + (moment().format('YYYY-MM-DD')) + ".log";
  113.     };
  114.  
  115.     WinJSRollingFileAppender.prototype._registerListener = function() {
  116.       var _this = this;
  117.       return setImmediate(function() {
  118.         var waitFor;
  119.         waitFor = moment().sod().add('d', 1).diff();
  120.         return _this._timeOutPromise = WinJS.Promise.timeout(waitFor).then(function() {
  121.           return _this.resetAsync();
  122.         });
  123.       });
  124.     };
  125.  
  126.     return WinJSRollingFileAppender;
  127.  
  128.   })(WinJSFileAppender);
  129.  
  130.   rootLogger = log4javascript.getRootLogger();
  131.  
  132.   logLayout = new log4javascript.PatternLayout('%d - [%c - %p] - %m%n');
  133.  
  134.   log4javascript.setShowStackTraces(true);
  135.  
  136.   if (config.debug) {
  137.     rootLogger.setLevel(log4javascript.Level.TRACE);
  138.     rootLogger.addAppender(consoleAppender = new log4javascript.BrowserConsoleAppender());
  139.     consoleAppender.layout = logLayout;
  140.     consoleAppender.setThreshold(log4javascript.Level.TRACE);
  141.   }
  142.  
  143.   fileAppender = new WinJSRollingFileAppender(logLayout);
  144.  
  145.   rootLogger.addAppender(fileAppender);
  146.  
  147.   WinJS.Application.addEventListener('checkpoint', function(event) {
  148.     return event.setPromise(fileAppender.resetAsync());
  149.   });
  150.  
  151.   Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", function(event) {
  152.     fileAppender.resetAsync();
  153.   });
  154.  
  155.   LOGGERS = {};
  156.  
  157.   getLogger = function(name, defaultLevel) {
  158.     var level, logLevelSetting, logger;
  159.     if (defaultLevel == null) {
  160.       defaultLevel = "DEBUG";
  161.     }
  162.     if (LOGGERS[name]) {
  163.       return LOGGERS[name];
  164.     }
  165.     logger = log4javascript.getLogger(name);
  166.     logLevelSetting = "loglevel-" + name;
  167.     level = settings.get(logLevelSetting, defaultLevel);
  168.     logger.setLevel(log4javascript.Level[level]);
  169.     Object.defineProperty(logger, "level", {
  170.       enumerable: true,
  171.       get: function() {
  172.         return logger.getLevel().name || defaultLevel;
  173.       },
  174.       set: function(newValue) {
  175.         settings.set(logLevelSetting, newValue);
  176.         return logger.setLevel(log4javascript.Level[newValue]);
  177.       }
  178.     });
  179.     LOGGERS[name] = logger;
  180.     return logger;
  181.   };
  182.  
  183.   window.logger = rootLogger;
  184.  
  185.   WinJS.Namespace.define('logger', {
  186.     get: getLogger,
  187.     all: {
  188.       get: function() {
  189.         var logger, name, _results;
  190.         _results = [];
  191.         for (name in LOGGERS) {
  192.           if (!__hasProp.call(LOGGERS, name)) continue;
  193.           logger = LOGGERS[name];
  194.           _results.push({
  195.             name: name,
  196.             logger: logger
  197.           });
  198.         }
  199.         return _results;
  200.       }
  201.     }
  202.   });
  203.  
  204. }).call(this);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement