/*
* Copyright © 2012, 2013 Pedro Agullo Soliveres.
*
* This file is part of Log4js-ext.
*
* Log4js-ext is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* Commercial use is permitted to the extent that the code/component(s)
* do NOT become part of another Open Source or Commercially developed
* licensed development library or toolkit without explicit permission.
*
* Log4js-ext is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Log4js-ext. If not, see <http://www.gnu.org/licenses/>.
*
* This software uses the ExtJs library (http://extjs.com), which is
* distributed under the GPL v3 license (see http://extjs.com/license).
*/
(function() {
"use strict"; //$NON-NLS-1$
/**
* The level is the importance or priority of a certain logging operation.
*
* Predefined levels are FATAL, ERROR, WARN, INFO, DEBUG, and TRACE.
*
* NONE and ALL are useful to control logging, but they can't be used
* in a logging operation, as they make no sense in that context.
*/
Ext.define('Sm.log.Level', { //$NON-NLS-1$
uses: ['Sm.log.util.Debug',
'Sm.log.util.Assert'],
statics : {
/**
* Initializes logging levels.
*
* @private
*
* @returns {void}
*
*/
initStatics : function() {
this.NONE = Ext.create( 'Sm.log.Level',
{name:'NONE', level: Math.pow(2,31)-1} );
this.FATAL = Ext.create( 'Sm.log.Level',
{name:'FATAL', level:600});
this.ERROR = Ext.create( 'Sm.log.Level',
{name:'ERROR', level:500});
this.WARN = Ext.create( 'Sm.log.Level',
{name:'WARN', level:400});
this.INFO = Ext.create( 'Sm.log.Level',
{name:'INFO', level:300});
this.DEBUG = Ext.create( 'Sm.log.Level',
{name:'DEBUG', level:200});
this.TRACE = Ext.create( 'Sm.log.Level',
{name:'TRACE', level:100});
this.ALL = Ext.create( 'Sm.log.Level',
{name:'ALL', level:0});
},
/**
* Returns a level, given its name.
*
* This can be very useful to get a level given a user-specified
* text via a combo, etc.
*
* @param {String} levelName The level name.
*
* @returns {Sm.log.Level} The level with the specified name.
*/
getLevel : function( levelName ) {
switch(levelName.toUpperCase()) {
case this.ALL.getName() : return this.ALL;
case this.NONE.getName() : return this.NONE;
case this.FATAL.getName() : return this.FATAL;
case this.ERROR.getName() : return this.ERROR;
case this.WARN.getName() : return this.WARN;
case this.INFO.getName() : return this.INFO;
case this.DEBUG.getName() : return this.DEBUG;
case this.TRACE.getName() : return this.TRACE;
default:
return null;
}
},
/**
* Returns a level's level, given the level name.
*
* @param {String} levelName The level name.
*
* @returns {Number}
*/
getLevelLevel :function( levelName ) {
switch(levelName.toUpperCase()) {
case this.ALL.getName() : return this.ALL.getLevel();
case this.NONE.getName() : return this.NONE.getLevel();
case this.FATAL.getName() : return this.FATAL.getLevel();
case this.ERROR.getName() : return this.ERROR.getLevel();
case this.WARN.getName() : return this.WARN.getLevel();
case this.INFO.getName() : return this.INFO.getLevel();
case this.DEBUG.getName() : return this.DEBUG.getLevel();
case this.TRACE.getName() : return this.TRACE.getLevel();
default:
Sm.log.util.Debug.abort( "This code should never execute");
return;
}
},
/**
* Represents 'no level', useful in some contexts to
* specify that no level should be logged.
*
* Do not use as a log operation level.
*
* @property {Sm.log.Level}
* @readonly
*/
NONE : undefined,
/**
* Represents a fatal error.
*
* The diference between error and fatal error depends on the
* context, and might or might not exist in some contexts. How to
* interpret that depends on the context, and has to be defined
* by the application
*
* @property {Sm.log.Level}
* @readonly
*/
FATAL : undefined,
/**
* Represents an error.
*
* The diference between error and fatal error depends on the
* context, and might or might not exist in some contexts. How to
* interpret that depends on the context, and has to be defined
* by the application
*
* @property {Sm.log.Level}
* @readonly
*/
ERROR : undefined,
/**
* Represents a warning.
*
* @property {Sm.log.Level}
* @readonly
*/
WARN : undefined,
/**
* Represents an informative log.
*
* @property {Sm.log.Level}
* @readonly
*/
INFO : undefined,
/**
* Represents a debug log.
*
* We will probably be interested in debug logs only while debugging.
*
* @property {Sm.log.Level}
* @readonly
*/
DEBUG : undefined,
/**
* Represents a low level debug log.
*
* We will probably be interested in trace logs only while heavily
* debugging.
*
* @property {Sm.log.Level}
* @readonly
*/
TRACE : undefined,
/**
* Represents 'all level', useful in some contexts to
* specify that alls levels should be logged.
*
* Do not use as a log operation level.
*
* @property {Sm.log.Level}
* @readonly
*/
ALL : undefined
},
config : {
/**
* @accessor
* @cfg [=value provided in constructor] (required)
*
* The level name.
*
* @readonly
*/
name : '',
/**
* @accessor
* @cfg [=value provided in constructor] (required)
*
* The level value.
*
* @readonly
*/
level : 0
},
/**
* Creates a new level.
*
* You should not create your own levels. The library has not been created
* with the idea of allowing user defined levels. Therefore, it might or
* might not work if you do so.
*
* @private
*
* @param cfg
*/
constructor : function (cfg) {
// Avoid this check because Assert might not be loaded, as
// this is called indirectly by initStatics, which is called
// at the end of this file
/*
Sm.log.util.Assert.assert(cfg.name);
Sm.log.util.Assert.assert(cfg.level);
*/
this.initConfig(cfg);
},
/**
* Compares two levels, return true if this ones is lesser or equal
* than the one received by the function.
*
* @param {Sm.log.Level} level The level to compare with this level.
* @returns {Boolean}
*/
le : function( level ) {
return this.getLevel() <= level.getLevel();
}
},
// Initialize statics: this function receives the class as 'this'
function () { this.initStatics(); } );
}());