mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 04:23:57 +00:00
logger refactor
This commit is contained in:
@@ -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',
|
||||||
|
|||||||
@@ -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' }],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
debug(data: {} | Error, msg: string);
|
||||||
|
debug(data, msg?) {
|
||||||
|
this.log(this.packRecord(logLevelNumbers.debug, data, msg));
|
||||||
|
}
|
||||||
|
info(msg: string);
|
||||||
|
info(data: {} | Error, msg: string);
|
||||||
|
info(data, msg?) {
|
||||||
|
this.log(this.packRecord(logLevelNumbers.info, data, msg));
|
||||||
|
}
|
||||||
|
warn(msg: string);
|
||||||
|
warn(data: {} | Error, msg: string);
|
||||||
|
warn(data, msg?) {
|
||||||
|
this.log(this.packRecord(logLevelNumbers.warn, data, 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ILogRecord {
|
packRecord(level: number, data, msg?): ILogRecord {
|
||||||
level: number;
|
if (msg) {
|
||||||
msg: string;
|
|
||||||
pid: number;
|
|
||||||
time: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
class PinoLikeLogger implements ILogger {
|
|
||||||
constructor(public config: ILogConfig, public baseProps: {} = {}) {}
|
|
||||||
|
|
||||||
trace(msg: string);
|
|
||||||
trace(data: {} | Error, msg: string);
|
|
||||||
trace(data, msg?) {
|
|
||||||
this.log(this.packRecord(logLevelNumbers.trace, data, msg));
|
|
||||||
}
|
|
||||||
debug(msg: string);
|
|
||||||
debug(data: {} | Error, msg: string);
|
|
||||||
debug(data, msg?) {
|
|
||||||
this.log(this.packRecord(logLevelNumbers.debug, data, msg));
|
|
||||||
}
|
|
||||||
info(msg: string);
|
|
||||||
info(data: {} | Error, msg: string);
|
|
||||||
info(data, msg?) {
|
|
||||||
this.log(this.packRecord(logLevelNumbers.info, data, msg));
|
|
||||||
}
|
|
||||||
warn(msg: string);
|
|
||||||
warn(data: {} | Error, msg: string);
|
|
||||||
warn(data, msg?) {
|
|
||||||
this.log(this.packRecord(logLevelNumbers.warn, data, 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 {
|
||||||
|
...this.config.base,
|
||||||
|
level,
|
||||||
|
msg: data,
|
||||||
|
time: new Date().getTime(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
log(record: ILogRecord) {
|
log(record: ILogRecord) {
|
||||||
for (const target of this.config.targets) {
|
for (const target of this.config.targets) {
|
||||||
if (record.level < logLevelNames[target.level]) {
|
if (record.level < logLevelNames[target.level]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (target.type) {
|
switch (target.type) {
|
||||||
case 'console':
|
case 'console':
|
||||||
console.log(JSON.stringify(record));
|
console.log(JSON.stringify(record));
|
||||||
break;
|
break;
|
||||||
case 'stream':
|
case 'stream':
|
||||||
target.stream.write(JSON.stringify(record) + '\n');
|
target.stream.write(JSON.stringify(record) + '\n');
|
||||||
break;
|
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 {
|
export const logLevelNames = {
|
||||||
pid?: number;
|
10: 'trace',
|
||||||
targets: ILogTargetConfig[];
|
20: 'debug',
|
||||||
}
|
30: 'info',
|
||||||
|
40: 'warn',
|
||||||
|
50: 'error',
|
||||||
|
60: 'fatal',
|
||||||
|
};
|
||||||
|
|
||||||
export function createPinoLikeLogger(config: ILogConfig): ILogger {
|
export const logLevelNumbers = {
|
||||||
return new PinoLikeLogger(config);
|
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);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user