miter
Version:
A typescript web framework based on ExpressJs based loosely on SailsJs
111 lines • 4.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const clc_1 = require("../util/clc");
const direct_logger_1 = require("../util/direct-logger");
const logger_1 = require("./logger");
const fs = require("fs");
const path = require("path");
class LoggerCore {
constructor(serverName, logLevel, createFile = true) {
this.createFile = createFile;
this.subsystems = new Map();
this._serverName = serverName;
if (typeof logLevel === 'undefined')
logLevel = { default: 'info' };
if (typeof logLevel === 'string')
logLevel = { default: logLevel };
this.logLevel = logLevel;
if (!createFile)
return;
let logPath = !!serverName ? `log/${serverName}` : `log`;
try {
logPath.split('/').forEach((dir, index, splits) => {
let partialPath = path.resolve(splits.splice(0, index).join('/'), dir);
if (!fs.existsSync(partialPath))
fs.mkdirSync(partialPath);
});
this.fd = fs.openSync(`${logPath}/${serverName}.${new Date().getTime()}.log`, 'w');
}
catch (e) {
this.createFile = false;
this.error(e);
}
}
getSubsystem(name) {
if (!this.subsystems.has(name))
this.subsystems.set(name, new logger_1.Logger(this, name));
return this.subsystems.get(name);
}
shutdown() {
if (this.createFile)
fs.close(this.fd);
}
get serverName() {
return this._serverName;
}
logLabelMessage(subsystem) {
if (!this.serverName && !subsystem)
return '';
else if (!this.serverName)
return clc_1.clc.white(`[${subsystem}]`);
else if (!subsystem)
return clc_1.clc.white(`[${clc_1.clc.bold(clc_1.clc.yellow(this.serverName))}]`);
else
return clc_1.clc.white(`[${clc_1.clc.bold(clc_1.clc.yellow(this.serverName))}:${subsystem}]`);
}
logLevelCheck(subsystem, logLevel) {
let allowedLevel = (subsystem && this.logLevel[subsystem]) || this.logLevel['default'];
switch (allowedLevel) {
case 'verbose':
return true;
case 'info':
return logLevel !== 'verbose';
case 'warn':
return logLevel === 'warn' || logLevel === 'error';
case 'error':
return logLevel === 'error';
}
}
writeToFile(message) {
if (this.createFile)
fs.write(this.fd, message + "\n", () => { });
}
log(subsystem, message, ...optionalParams) {
this.writeToFile(`[${new Date().toISOString()}:${subsystem}]: ${message}`);
direct_logger_1.directLogger.clearLine();
direct_logger_1.directLogger.log(this.logLabelMessage(subsystem), message, ...optionalParams);
}
trace(subsystem, message, ...optionalParams) {
this.writeToFile(`[${new Date().toISOString()}:${subsystem}]: ${message}`);
direct_logger_1.directLogger.clearLine();
direct_logger_1.directLogger.trace(this.logLabelMessage(subsystem), message, ...optionalParams);
}
error(subsystem, message, ...optionalParams) {
this.writeToFile(`[${new Date().toISOString()}:${subsystem}] error: ${message}`);
direct_logger_1.directLogger.clearLine();
direct_logger_1.directLogger.error(this.logLabelMessage(subsystem), clc_1.clc.error(`error:`), message, ...optionalParams);
}
info(subsystem, message, ...optionalParams) {
this.writeToFile(`[${new Date().toISOString()}:${subsystem}] info: ${message}`);
if (!this.logLevelCheck(subsystem, 'info'))
return;
direct_logger_1.directLogger.clearLine();
direct_logger_1.directLogger.info(this.logLabelMessage(subsystem), clc_1.clc.info(`info:`), message, ...optionalParams);
}
warn(subsystem, message, ...optionalParams) {
this.writeToFile(`[${new Date().toISOString()}:${subsystem}] warn: ${message}`);
if (!this.logLevelCheck(subsystem, 'warn'))
return;
direct_logger_1.directLogger.clearLine();
direct_logger_1.directLogger.warn(this.logLabelMessage(subsystem), clc_1.clc.warn(`warn:`), message, ...optionalParams);
}
verbose(subsystem, message, ...optionalParams) {
this.writeToFile(`[${new Date().toISOString()}:${subsystem}] verbose: ${message}`);
if (!this.logLevelCheck(subsystem, 'verbose'))
return;
direct_logger_1.directLogger.clearLine();
direct_logger_1.directLogger.log(this.logLabelMessage(subsystem), 'verbose:', message, ...optionalParams);
}
}
exports.LoggerCore = LoggerCore;
//# sourceMappingURL=logger-core.js.map