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 + -
显示快捷键?