logger-debug.js
来自「国外很不错的一个开源OA系统Group-Office」· JavaScript 代码 · 共 1,560 行 · 第 1/3 页
JS
1,560 行
var category = aArgs[0]; if(oSelf._elFt) { oSelf._createCategoryCheckbox(category); }};/** * Handles Logger's sourceCreateEvent. * * @method _onSourceCreate * @param sType {String} The event. * @param aArgs {Object[]} Data passed from event firer. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onSourceCreate = function(sType, aArgs, oSelf) { var source = aArgs[0]; if(oSelf._elFt) { oSelf._createSourceCheckbox(source); }};/** * Handles check events on the category filter checkboxes. * * @method _onCheckCategory * @param v {HTMLEvent} The click event. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onCheckCategory = function(v, oSelf) { var newFilter = this.category; var filtersArray = oSelf._categoryFilters; if(!this.checked) { // Remove category from filters for(var i=0; i<filtersArray.length; i++) { if(newFilter == filtersArray[i]) { filtersArray.splice(i, 1); break; } } } else { // Add category to filters filtersArray.push(newFilter); } oSelf._filterLogs();};/** * Handles check events on the category filter checkboxes. * * @method _onCheckSource * @param v {HTMLEvent} The click event. * @param oSelf {Object} The log reader instance. * @private */YAHOO.widget.LogReader.prototype._onCheckSource = function(v, oSelf) { var newFilter = this.source; var filtersArray = oSelf._sourceFilters; if(!this.checked) { // Remove category from filters for(var i=0; i<filtersArray.length; i++) { if(newFilter == filtersArray[i]) { filtersArray.splice(i, 1); break; } } } else { // Add category to filters filtersArray.push(newFilter); } oSelf._filterLogs();};/** * Handles click events on the collapse button. * * @method _onClickCollapseBtn * @param v {HTMLEvent} The click event. * @param oSelf {Object} The LogReader instance * @private */YAHOO.widget.LogReader.prototype._onClickCollapseBtn = function(v, oSelf) { var btn = oSelf._btnCollapse; if(btn.value == "Expand") { oSelf._elConsole.style.display = "block"; if(oSelf._elFt) { oSelf._elFt.style.display = "block"; } btn.value = "Collapse"; } else { oSelf._elConsole.style.display = "none"; if(oSelf._elFt) { oSelf._elFt.style.display = "none"; } btn.value = "Expand"; }};/** * Handles click events on the pause button. * * @method _onClickPauseBtn * @param v {HTMLEvent} The click event. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onClickPauseBtn = function(v, oSelf) { var btn = oSelf._btnPause; if(btn.value == "Resume") { oSelf.resume(); btn.value = "Pause"; } else { oSelf.pause(); btn.value = "Resume"; }};/** * Handles click events on the clear button. * * @method _onClickClearBtn * @param v {HTMLEvent} The click event. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onClickClearBtn = function(v, oSelf) { oSelf._clearConsole();};/** * Handles Logger's newLogEvent. * * @method _onNewLog * @param sType {String} The event. * @param aArgs {Object[]} Data passed from event firer. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onNewLog = function(sType, aArgs, oSelf) { var logEntry = aArgs[0]; oSelf._buffer.push(logEntry); if (oSelf.logReaderEnabled === true && oSelf._timeout === null) { oSelf._timeout = setTimeout(function(){oSelf._printBuffer();}, 100); }};/** * Handles Logger's resetEvent. * * @method _onReset * @param sType {String} The event. * @param aArgs {Object[]} Data passed from event firer. * @param oSelf {Object} The LogReader instance. * @private */YAHOO.widget.LogReader.prototype._onReset = function(sType, aArgs, oSelf) { oSelf._filterLogs();}; /** * The Logger widget provides a simple way to read or write log messages in * JavaScript code. Integration with the YUI Library's debug builds allow * implementers to access under-the-hood events, errors, and debugging messages. * Output may be read through a LogReader console and/or output to a browser * console. * * @module logger * @requires yahoo, event, dom * @optional dragdrop * @namespace YAHOO.widget * @title Logger Widget *//****************************************************************************//****************************************************************************//****************************************************************************//** * The singleton Logger class provides core log management functionality. Saves * logs written through the global YAHOO.log function or written by a LogWriter * instance. Provides access to logs for reading by a LogReader instance or * native browser console such as the Firebug extension to Firefox or Safari's * JavaScript console through integration with the console.log() method. * * @class Logger * @static */YAHOO.widget.Logger = { // Initialize members loggerEnabled: true, _browserConsoleEnabled: false, categories: ["info","warn","error","time","window"], sources: ["global"], _stack: [], // holds all log msgs maxStackEntries: 2500, _startTime: new Date().getTime(), // static start timestamp _lastTime: null // timestamp of last logged message};///////////////////////////////////////////////////////////////////////////////// Public methods////////////////////////////////////////////////////////////////////////////////** * Saves a log message to the stack and fires newLogEvent. If the log message is * assigned to an unknown category, creates a new category. If the log message is * from an unknown source, creates a new source. If browser console is enabled, * outputs the log message to browser console. * * @method log * @param sMsg {String} The log message. * @param sCategory {String} Category of log message, or null. * @param sSource {String} Source of LogWriter, or null if global. */YAHOO.widget.Logger.log = function(sMsg, sCategory, sSource) { if(this.loggerEnabled) { if(!sCategory) { sCategory = "info"; // default category } else { sCategory = sCategory.toLocaleLowerCase(); if(this._isNewCategory(sCategory)) { this._createNewCategory(sCategory); } } var sClass = "global"; // default source var sDetail = null; if(sSource) { var spaceIndex = sSource.indexOf(" "); if(spaceIndex > 0) { // Substring until first space sClass = sSource.substring(0,spaceIndex); // The rest of the source sDetail = sSource.substring(spaceIndex,sSource.length); } else { sClass = sSource; } if(this._isNewSource(sClass)) { this._createNewSource(sClass); } } var timestamp = new Date(); var logEntry = new YAHOO.widget.LogMsg({ msg: sMsg, time: timestamp, category: sCategory, source: sClass, sourceDetail: sDetail }); var stack = this._stack; var maxStackEntries = this.maxStackEntries; if(maxStackEntries && !isNaN(maxStackEntries) && (stack.length >= maxStackEntries)) { stack.shift(); } stack.push(logEntry); this.newLogEvent.fire(logEntry); if(this._browserConsoleEnabled) { this._printToBrowserConsole(logEntry); } return true; } else { return false; }};/** * Resets internal stack and startTime, enables Logger, and fires logResetEvent. * * @method reset */YAHOO.widget.Logger.reset = function() { this._stack = []; this._startTime = new Date().getTime(); this.loggerEnabled = true; this.log("Logger reset"); this.logResetEvent.fire();};/** * Public accessor to internal stack of log message objects. * * @method getStack * @return {Object[]} Array of log message objects. */YAHOO.widget.Logger.getStack = function() { return this._stack;};/** * Public accessor to internal start time. * * @method getStartTime * @return {Date} Internal date of when Logger singleton was initialized. */YAHOO.widget.Logger.getStartTime = function() { return this._startTime;};/** * Disables output to the browser's global console.log() function, which is used * by the Firebug extension to Firefox as well as Safari. * * @method disableBrowserConsole */YAHOO.widget.Logger.disableBrowserConsole = function() { YAHOO.log("Logger output to the function console.log() has been disabled."); this._browserConsoleEnabled = false;};/** * Enables output to the browser's global console.log() function, which is used * by the Firebug extension to Firefox as well as Safari. * * @method enableBrowserConsole */YAHOO.widget.Logger.enableBrowserConsole = function() { this._browserConsoleEnabled = true; YAHOO.log("Logger output to the function console.log() has been enabled.");};///////////////////////////////////////////////////////////////////////////////// Public events/////////////////////////////////////////////////////////////////////////////// /** * Fired when a new category has been created. * * @event categoryCreateEvent * @param sCategory {String} Category name. */YAHOO.widget.Logger.categoryCreateEvent = new YAHOO.util.CustomEvent("categoryCreate", this, true); /** * Fired when a new source has been named. * * @event sourceCreateEvent * @param sSource {String} Source name. */YAHOO.widget.Logger.sourceCreateEvent = new YAHOO.util.CustomEvent("sourceCreate", this, true); /** * Fired when a new log message has been created. * * @event newLogEvent * @param sMsg {String} Log message. */YAHOO.widget.Logger.newLogEvent = new YAHOO.util.CustomEvent("newLog", this, true);/** * Fired when the Logger has been reset has been created. * * @event logResetEvent */YAHOO.widget.Logger.logResetEvent = new YAHOO.util.CustomEvent("logReset", this, true);///////////////////////////////////////////////////////////////////////////////// Private methods////////////////////////////////////////////////////////////////////////////////** * Creates a new category of log messages and fires categoryCreateEvent. * * @method _createNewCategory * @param sCategory {String} Category name. * @private */YAHOO.widget.Logger._createNewCategory = function(sCategory) { this.categories.push(sCategory); this.categoryCreateEvent.fire(sCategory);};/** * Checks to see if a category has already been created. * * @method _isNewCategory * @param sCategory {String} Category name. * @return {Boolean} Returns true if category is unknown, else returns false. * @private */YAHOO.widget.Logger._isNewCategory = function(sCategory) { for(var i=0; i < this.categories.length; i++) { if(sCategory == this.categories[i]) { return false; } } return true;};/** * Creates a new source of log messages and fires sourceCreateEvent. * * @method _createNewSource * @param sSource {String} Source name. * @private */YAHOO.widget.Logger._createNewSource = function(sSource) { this.sources.push(sSource); this.sourceCreateEvent.fire(sSource);};/** * Checks to see if a source already exists. * * @method _isNewSource * @param sSource {String} Source name. * @return {Boolean} Returns true if source is unknown, else returns false. * @private */YAHOO.widget.Logger._isNewSource = function(sSource) { if(sSource) { for(var i=0; i < this.sources.length; i++) { if(sSource == this.sources[i]) { return false; } } return true; }};/** * Outputs a log message to global console.log() function. * * @method _printToBrowserConsole * @param oEntry {Object} Log entry object. * @private */YAHOO.widget.Logger._printToBrowserConsole = function(oEntry) { if(window.console && console.log) { var category = oEntry.category; var label = oEntry.category.substring(0,4).toUpperCase(); var time = oEntry.time; if (time.toLocaleTimeString) { var localTime = time.toLocaleTimeString(); } else { localTime = time.toString(); } var msecs = time.getTime(); var elapsedTime = (YAHOO.widget.Logger._lastTime) ? (msecs - YAHOO.widget.Logger._lastTime) : 0; YAHOO.widget.Logger._lastTime = msecs; var output = localTime + " (" + elapsedTime + "ms): " + oEntry.source + ": " + oEntry.msg; console.log(output); }};///////////////////////////////////////////////////////////////////////////////// Private event handlers////////////////////////////////////////////////////////////////////////////////** * Handles logging of messages due to window error events. * * @method _onWindowError * @param sMsg {String} The error message. * @param sUrl {String} URL of the error. * @param sLine {String} Line number of the error. * @private */YAHOO.widget.Logger._onWindowError = function(sMsg,sUrl,sLine) { // Logger is not in scope of this event handler try { YAHOO.widget.Logger.log(sMsg+' ('+sUrl+', line '+sLine+')', "window"); if(YAHOO.widget.Logger._origOnWindowError) { YAHOO.widget.Logger._origOnWindowError(); } } catch(e) { return false; }};///////////////////////////////////////////////////////////////////////////////// Enable handling of native JavaScript errors// NB: Not all browsers support the window.onerror event///////////////////////////////////////////////////////////////////////////////if(window.onerror) { // Save any previously defined handler to call YAHOO.widget.Logger._origOnWindowError = window.onerror;}window.onerror = YAHOO.widget.Logger._onWindowError;///////////////////////////////////////////////////////////////////////////////// First log///////////////////////////////////////////////////////////////////////////////YAHOO.widget.Logger.log("Logger initialized");
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?