mirror of
https://github.com/log4js-node/log4js-node.git
synced 2025-12-08 19:26:01 +00:00
1. reintroduce `semver` to support code >=4 && <6 2. fallback syntax like rest parameter and default parameter 3. update `sandboxed-module` to fix "strict mode error"
133 lines
3.2 KiB
JavaScript
133 lines
3.2 KiB
JavaScript
/* eslint no-underscore-dangle:0 */
|
|
'use strict';
|
|
|
|
const levels = require('./levels');
|
|
const EventEmitter = require('events');
|
|
const DEFAULT_CATEGORY = '[default]';
|
|
|
|
let logWritesEnabled = true;
|
|
|
|
/**
|
|
* @name LoggingEvent
|
|
* @namespace Log4js
|
|
*/
|
|
class LoggingEvent {
|
|
/**
|
|
* Models a logging event.
|
|
* @constructor
|
|
* @param {String} categoryName name of category
|
|
* @param {Log4js.Level} level level of message
|
|
* @param {Array} data objects to log
|
|
* @param {Logger} logger the associated logger
|
|
* @author Seth Chisamore
|
|
*/
|
|
constructor(categoryName, level, data, logger) {
|
|
this.startTime = new Date();
|
|
this.categoryName = categoryName;
|
|
this.data = data;
|
|
this.level = level;
|
|
this.logger = logger;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Logger to log messages.
|
|
* use {@see log4js#getLogger(String)} to get an instance.
|
|
*
|
|
* @name Logger
|
|
* @namespace Log4js
|
|
* @param name name of category to log to
|
|
* @param level
|
|
*
|
|
* @author Stephan Strittmatter
|
|
*/
|
|
class Logger extends EventEmitter {
|
|
constructor(name, level) {
|
|
super();
|
|
|
|
this.category = name || DEFAULT_CATEGORY;
|
|
|
|
if (level) {
|
|
this.setLevel(level);
|
|
}
|
|
}
|
|
|
|
setLevel(level) {
|
|
this.level = levels.toLevel(level, this.level || levels.TRACE);
|
|
}
|
|
|
|
removeLevel() {
|
|
delete this.level;
|
|
}
|
|
|
|
log() {
|
|
/* eslint prefer-rest-params:0 */
|
|
// todo: once node v4 support dropped, use rest parameter instead
|
|
const args = Array.from(arguments);
|
|
const logLevel = levels.toLevel(args[0], levels.INFO);
|
|
if (!this.isLevelEnabled(logLevel)) {
|
|
return;
|
|
}
|
|
this._log(logLevel, args.slice(1));
|
|
}
|
|
|
|
isLevelEnabled(otherLevel) {
|
|
return this.level.isLessThanOrEqualTo(otherLevel);
|
|
}
|
|
|
|
_log(level, data) {
|
|
const loggingEvent = new LoggingEvent(this.category, level, data, this);
|
|
this.emit('log', loggingEvent);
|
|
}
|
|
}
|
|
|
|
Logger.DEFAULT_CATEGORY = DEFAULT_CATEGORY;
|
|
Logger.prototype.level = levels.TRACE;
|
|
|
|
['Trace', 'Debug', 'Info', 'Warn', 'Error', 'Fatal', 'Mark'].forEach(
|
|
levelString => { addLevelMethods(levelString); }
|
|
);
|
|
|
|
function addLevelMethods(target) {
|
|
const level = levels.toLevel(target);
|
|
|
|
const levelStrLower = level.toString().toLowerCase();
|
|
const levelMethod = levelStrLower.replace(/_([a-z])/g, g => g[1].toUpperCase());
|
|
const isLevelMethod = levelMethod[0].toUpperCase() + levelMethod.slice(1);
|
|
|
|
Logger.prototype[`is${isLevelMethod}Enabled`] = function () {
|
|
return this.isLevelEnabled(level.toString());
|
|
};
|
|
|
|
Logger.prototype[levelMethod] = function () {
|
|
/* eslint prefer-rest-params:0 */
|
|
// todo: once node v4 support dropped, use rest parameter instead
|
|
const args = Array.from(arguments);
|
|
if (logWritesEnabled && this.isLevelEnabled(level)) {
|
|
this._log(level, args);
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Disable all log writes.
|
|
* @returns {void}
|
|
*/
|
|
function disableAllLogWrites() {
|
|
logWritesEnabled = false;
|
|
}
|
|
|
|
/**
|
|
* Enable log writes.
|
|
* @returns {void}
|
|
*/
|
|
function enableAllLogWrites() {
|
|
logWritesEnabled = true;
|
|
}
|
|
|
|
module.exports.LoggingEvent = LoggingEvent;
|
|
module.exports.Logger = Logger;
|
|
module.exports.disableAllLogWrites = disableAllLogWrites;
|
|
module.exports.enableAllLogWrites = enableAllLogWrites;
|
|
module.exports.addLevelMethods = addLevelMethods;
|