fore.st/src/logger.js
2017-04-27 21:06:16 -07:00

90 lines
2.3 KiB
JavaScript

// @flow
var fs = require("graceful-fs");
var path = require("path");
import { LoggerFactory, Logger as JsliLogger, LogLevel } from '@calzoneman/jsli';
import { sprintf } from 'sprintf-js';
function getTimeString() {
var d = new Date();
return d.toDateString() + " " + d.toTimeString().split(" ")[0];
}
var Logger = function(filename) {
this.filename = filename;
this.writer = fs.createWriteStream(filename, {
flags: "a",
encoding: "utf-8"
});
}
Logger.prototype.log = function () {
var msg = "";
for(var i in arguments)
msg += arguments[i];
if(this.dead) {
return;
}
var str = "[" + getTimeString() + "] " + msg + "\n";
try {
this.writer.write(str);
} catch(e) {
errlog.log("WARNING: Attempted logwrite failed: " + this.filename);
errlog.log("Message was: " + msg);
errlog.log(e);
}
}
Logger.prototype.close = function () {
try {
this.writer.end();
} catch(e) {
errlog.log("Log close failed: " + this.filename);
}
}
function makeConsoleLogger(filename) {
var log = new Logger(filename);
log._log = log.log;
log.log = function () {
console.log.apply(console, arguments);
this._log.apply(this, arguments);
}
return log;
}
var errlog = makeConsoleLogger(path.join(__dirname, "..", "error.log"));
var syslog = makeConsoleLogger(path.join(__dirname, "..", "sys.log"));
var eventlog = makeConsoleLogger(path.join(__dirname, "..", "events.log"));
exports.Logger = Logger;
exports.errlog = errlog;
exports.syslog = syslog;
exports.eventlog = eventlog;
class LegacyLogger extends JsliLogger {
constructor(level: LogLevel, loggerName: string) {
super(level, loggerName);
}
log(level: LogLevel, ...args: any[]) {
var message: string = "[" + level.name + "] " + this.loggerName + ": ";
message += sprintf(String(args[0]), ...args.slice(1));
if (level.shouldLogAtLevel(LogLevel.ERROR)) {
errlog.log(message);
} else {
syslog.log(message);
}
}
}
const level: LogLevel = !!process.env.DEBUG ? LogLevel.DEBUG : LogLevel.INFO;
LoggerFactory.setLoggerImplFactory({
getLogger(loggerName: string): LegacyLogger {
return new LegacyLogger(level, loggerName);
}
});