logger refactor

This commit is contained in:
Jan Prochazka
2023-01-28 09:17:57 +01:00
parent dbcc732688
commit a43522752c
3 changed files with 129 additions and 132 deletions

View File

@@ -31,7 +31,7 @@ function configureLogger() {
setLoggerName('main'); setLoggerName('main');
const logger = createPinoLikeLogger({ const logger = createPinoLikeLogger({
pid: process.pid, base: { pid: process.pid },
targets: [ targets: [
{ {
type: 'console', type: 'console',

View File

@@ -3,7 +3,7 @@ import { createPinoLikeLogger, ILogger } from './pinomin';
let _logger: ILogger; let _logger: ILogger;
let _name: string = null; let _name: string = null;
const defaultLogger: ILogger = createPinoLikeLogger({ const defaultLogger: ILogger = createPinoLikeLogger({
pid: global?.process?.pid, base: { pid: global?.process?.pid },
targets: [{ type: 'console', level: 'info' }], targets: [{ type: 'console', level: 'info' }],
}); });

View File

@@ -1,141 +1,138 @@
export interface ILogger { export interface ILogger {
trace(msg: string); trace(msg: string);
trace(data: {} | Error, msg: string); trace(data: {} | Error, msg: string);
debug(msg: string); debug(msg: string);
debug(data: {} | Error, msg: string); debug(data: {} | Error, msg: string);
info(msg: string); info(msg: string);
info(data: {} | Error, msg: string); info(data: {} | Error, msg: string);
warn(msg: string); warn(msg: string);
warn(data: {} | Error, msg: string); warn(data: {} | Error, msg: string);
error(msg: string); error(msg: string);
error(data: {} | Error, msg: string); error(data: {} | Error, msg: string);
fatal(msg: string); fatal(msg: string);
fatal(data: {} | Error, msg: string); fatal(data: {} | Error, msg: string);
child(childProps: {}): ILogger; child(childProps: {}): ILogger;
log(record: ILogRecord); log(record: ILogRecord);
}
export interface ILogRecord {
time: number;
level: number;
msg: string;
pid?: number;
}
class PinoLikeLogger implements ILogger {
constructor(public config: ILogConfig) {}
trace(msg: string);
trace(data: {} | Error, msg: string);
trace(data, msg?) {
this.log(this.packRecord(logLevelNumbers.trace, data, msg));
} }
debug(msg: string);
export interface ILogRecord { debug(data: {} | Error, msg: string);
level: number; debug(data, msg?) {
msg: string; this.log(this.packRecord(logLevelNumbers.debug, data, msg));
pid: number;
time: number;
} }
info(msg: string);
class PinoLikeLogger implements ILogger { info(data: {} | Error, msg: string);
constructor(public config: ILogConfig, public baseProps: {} = {}) {} info(data, msg?) {
this.log(this.packRecord(logLevelNumbers.info, data, msg));
trace(msg: string); }
trace(data: {} | Error, msg: string); warn(msg: string);
trace(data, msg?) { warn(data: {} | Error, msg: string);
this.log(this.packRecord(logLevelNumbers.trace, data, msg)); warn(data, msg?) {
} this.log(this.packRecord(logLevelNumbers.warn, data, msg));
debug(msg: string); }
debug(data: {} | Error, msg: string); error(msg: string);
debug(data, msg?) { error(data: {} | Error, msg: string);
this.log(this.packRecord(logLevelNumbers.debug, data, msg)); error(data, msg?) {
} this.log(this.packRecord(logLevelNumbers.error, data, msg));
info(msg: string); }
info(data: {} | Error, msg: string); fatal(msg: string);
info(data, msg?) { fatal(data: {} | Error, msg: string);
this.log(this.packRecord(logLevelNumbers.info, data, msg)); fatal(data, msg?) {
} this.log(this.packRecord(logLevelNumbers.fatal, data, msg));
warn(msg: string); }
warn(data: {} | Error, msg: string);
warn(data, msg?) { packRecord(level: number, data, msg?): ILogRecord {
this.log(this.packRecord(logLevelNumbers.warn, data, msg)); if (msg) {
}
error(msg: string);
error(data: {} | Error, msg: string);
error(data, msg?) {
this.log(this.packRecord(logLevelNumbers.error, data, msg));
}
fatal(msg: string);
fatal(data: {} | Error, msg: string);
fatal(data, msg?) {
this.log(this.packRecord(logLevelNumbers.fatal, data, msg));
}
packRecord(level: number, data, msg?): ILogRecord {
if (msg) {
return {
...this.baseProps,
...data,
level,
msg,
pid: this.config.pid,
time: new Date().getTime(),
};
}
return { return {
...this.baseProps, ...this.config.base,
...data,
level, level,
msg: data, msg,
pid: this.config.pid,
time: new Date().getTime(), time: new Date().getTime(),
}; };
} }
return {
log(record: ILogRecord) { ...this.config.base,
for (const target of this.config.targets) { level,
if (record.level < logLevelNames[target.level]) { msg: data,
continue; time: new Date().getTime(),
} };
switch (target.type) { }
case 'console':
console.log(JSON.stringify(record)); log(record: ILogRecord) {
break; for (const target of this.config.targets) {
case 'stream': if (record.level < logLevelNames[target.level]) {
target.stream.write(JSON.stringify(record) + '\n'); continue;
break; }
} switch (target.type) {
case 'console':
console.log(JSON.stringify(record));
break;
case 'stream':
target.stream.write(JSON.stringify(record) + '\n');
break;
} }
} }
child(childProps: {}): ILogger {
return new PinoLikeLogger(this.config, {
...this.baseProps,
...childProps,
});
}
} }
export const logLevelNames = { child(childProps: {}): ILogger {
10: 'trace', return new PinoLikeLogger({
20: 'debug', ...this.config,
30: 'info', base: { ...this.config.base, ...childProps },
40: 'warn', });
50: 'error',
60: 'fatal',
};
export const logLevelNumbers = {
trace: 10,
debug: 20,
info: 30,
warn: 40,
error: 50,
fatal: 60,
};
interface ILogTargetConfig {
level: keyof typeof logLevelNumbers;
type: 'console' | 'stream';
stream?: any;
} }
}
interface ILogConfig {
pid?: number; export const logLevelNames = {
targets: ILogTargetConfig[]; 10: 'trace',
} 20: 'debug',
30: 'info',
export function createPinoLikeLogger(config: ILogConfig): ILogger { 40: 'warn',
return new PinoLikeLogger(config); 50: 'error',
} 60: 'fatal',
};
export const logLevelNumbers = {
trace: 10,
debug: 20,
info: 30,
warn: 40,
error: 50,
fatal: 60,
};
interface ILogTargetConfig {
level: keyof typeof logLevelNumbers;
type: 'console' | 'stream';
stream?: any;
}
interface ILogConfig {
base: {};
targets: ILogTargetConfig[];
}
export function createPinoLikeLogger(config: ILogConfig): ILogger {
return new PinoLikeLogger(config);
}