Skip to content
Snippets Groups Projects

[ref] oxyde logger

Merged Éloïs requested to merge oxyde-logger into dev
15 files
+ 250
162
Compare changes
  • Side-by-side
  • Inline

Files

+ 38
137
@@ -11,157 +11,58 @@
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
import * as moment from "moment";
import { Directory } from "./system/directory";
import { format } from "util";
import { RustLogger } from "../../neon/native";
const path = require("path");
const winston = require("winston");
export class Logger {
logger: RustLogger | null = null;
/***************
* CALLBACK LOGGER
***************/
constructor() {}
const util = require("util");
const CallbackLogger: any = (winston.transports.CallbackLogger = function (
options: any
) {
this.name = "customLogger";
this.level = options.level || "info";
this.callback = options.callback;
this.timestamp = options.timestamp;
});
util.inherits(CallbackLogger, winston.Transport);
CallbackLogger.prototype.log = function (
level: string,
msg: string,
meta: any,
callback: any
) {
this.callback(level, msg, this.timestamp());
callback(null, true);
};
/***************
* NORMAL LOGGER
***************/
const customLevels = {
levels: {
error: 0,
warn: 1,
info: 2,
debug: 3,
trace: 4,
query: 5,
},
colors: {
error: "red",
warn: "yellow",
info: "green",
debug: "cyan",
trace: "cyan",
query: "grey",
},
};
// create the logger
const logger = new winston.Logger({
level: "trace",
levels: customLevels.levels,
handleExceptions: false,
colors: customLevels.colors,
transports: [
// setup console logging
new winston.transports.Console({
level: "trace",
levels: customLevels.levels,
handleExceptions: false,
colorize: true,
timestamp: function () {
return moment().format();
},
}),
],
});
// Singletons
let loggerAttached = false;
logger.addCallbackLogs = (callbackForLog: any) => {
if (!loggerAttached) {
loggerAttached = true;
logger.add(CallbackLogger, {
callback: callbackForLog,
level: "trace",
levels: customLevels.levels,
handleExceptions: false,
colorize: true,
timestamp: function () {
return moment().format();
},
});
initLogger(home: string, level: string | undefined) {
if (this.logger == null) {
this.logger = new RustLogger(home, level || "info");
}
}
};
// Singletons
let loggerHomeAttached = false;
logger.addHomeLogs = (home: string, level: string) => {
if (!muted) {
if (loggerHomeAttached) {
logger.remove(winston.transports.File);
changeLevel(level: string) {
if (this.logger != null) {
this.logger.changeLevel(level || "info");
}
loggerHomeAttached = true;
logger.add(winston.transports.File, {
level: level || "info",
levels: customLevels.levels,
handleExceptions: false,
colorize: true,
tailable: true,
maxsize: 50 * 1024 * 1024, // 50 MB
maxFiles: 3,
//zippedArchive: true,
json: false,
filename: path.join(home, "duniter.log"),
timestamp: function () {
return moment().format();
},
});
}
};
let muted = false;
logger.mute = () => {
if (!muted) {
logger.remove(winston.transports.Console);
muted = true;
error(format_: any, ...param: any[]) {
if (this.logger != null) {
this.logger.error(format(format_, ...param));
}
}
};
logger.unmute = () => {
if (muted) {
muted = false;
logger.add(winston.transports.Console, {
level: "trace",
levels: customLevels.levels,
handleExceptions: false,
colorize: true,
timestamp: function () {
return moment().format();
},
});
warn(format_: any, ...param: any[]) {
if (this.logger != null) {
this.logger.warn(format(format_, ...param));
}
}
info(format_: any, ...param: any[]) {
if (this.logger != null) {
this.logger.info(format(format_, ...param));
}
}
debug(format_: any, ...param: any[]) {
if (this.logger != null) {
this.logger.debug(format(format_, ...param));
}
}
};
trace(format_: any, ...param: any[]) {
if (this.logger != null) {
this.logger.trace(format(format_, ...param));
}
}
}
/**
* Default logging path
*/
logger.addHomeLogs(Directory.INSTANCE_HOME);
const logger = new Logger();
/**
* Convenience function to get logger directly
*/
export function NewLogger(name?: string) {
export function NewLogger(name?: string): Logger {
return logger;
}
Loading