use pinomin package

This commit is contained in:
Jan Prochazka
2023-01-28 10:22:12 +01:00
parent a43522752c
commit 079cac6eda
8 changed files with 16 additions and 148 deletions

View File

@@ -178,5 +178,5 @@ yarn plugin # this compiles plugin and copies it into existing DbGate installati
After restarting DbGate, you could use your new plugin from DbGate. After restarting DbGate, you could use your new plugin from DbGate.
## Logging ## Logging
DbGate uses [pino logger](https://github.com/pinojs/pino). So by default, it produces JSON log messages into console and log files. If you want to see formatted logs, please use [pino-pretty](https://github.com/pinojs/pino-pretty) log formatter. DbGate uses [pinomin logger](https://github.com/dbgate/pinomin). So by default, it produces JSON log messages into console and log files. If you want to see formatted logs, please use [pino-pretty](https://github.com/pinojs/pino-pretty) log formatter.

View File

@@ -49,6 +49,7 @@
"ncp": "^2.0.0", "ncp": "^2.0.0",
"node-cron": "^2.0.3", "node-cron": "^2.0.3",
"on-finished": "^2.4.1", "on-finished": "^2.4.1",
"pinomin": "^1.0.1",
"portfinder": "^1.0.28", "portfinder": "^1.0.28",
"simple-encryptor": "^4.0.0", "simple-encryptor": "^4.0.0",
"ssh2": "^1.11.0", "ssh2": "^1.11.0",

View File

@@ -1,10 +1,10 @@
const { setLogger, getLogger, setLoggerName, createPinoLikeLogger } = require('dbgate-tools'); const { setLogger, getLogger, setLoggerName } = require('dbgate-tools');
const processArgs = require('./utility/processArgs'); const processArgs = require('./utility/processArgs');
const fs = require('fs'); const fs = require('fs');
const moment = require('moment'); const moment = require('moment');
const path = require('path'); const path = require('path');
const { logsdir, setLogsFilePath, getLogsFilePath } = require('./utility/directories'); const { logsdir, setLogsFilePath, getLogsFilePath } = require('./utility/directories');
const platformInfo = require('./utility/platformInfo'); const { createLogger } = require('pinomin');
if (processArgs.startProcess) { if (processArgs.startProcess) {
setLoggerName(processArgs.startProcess.replace(/Process$/, '')); setLoggerName(processArgs.startProcess.replace(/Process$/, ''));
@@ -30,7 +30,7 @@ function configureLogger() {
setLogsFilePath(logsFilePath); setLogsFilePath(logsFilePath);
setLoggerName('main'); setLoggerName('main');
const logger = createPinoLikeLogger({ const logger = createLogger({
base: { pid: process.pid }, base: { pid: process.pid },
targets: [ targets: [
{ {

View File

@@ -36,6 +36,7 @@
"debug": "^4.3.4", "debug": "^4.3.4",
"json-stable-stringify": "^1.0.1", "json-stable-stringify": "^1.0.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pinomin": "^1.0.1",
"uuid": "^3.4.0" "uuid": "^3.4.0"
} }
} }

View File

@@ -1,20 +1,20 @@
import { createPinoLikeLogger, ILogger } from './pinomin'; import pinomin, { Logger } from 'pinomin';
let _logger: ILogger; let _logger: Logger;
let _name: string = null; let _name: string = null;
const defaultLogger: ILogger = createPinoLikeLogger({ const defaultLogger: Logger = pinomin({
base: { pid: global?.process?.pid }, base: { pid: global?.process?.pid },
targets: [{ type: 'console', level: 'info' }], targets: [{ type: 'console', level: 'info' }],
}); });
export function setLogger(value: ILogger) { export function setLogger(value: Logger) {
_logger = value; _logger = value;
} }
export function setLoggerName(value) { export function setLoggerName(value) {
_name = value; _name = value;
} }
export function getLogger(caller?: string): ILogger { export function getLogger(caller?: string): Logger {
let res = _logger || defaultLogger; let res = _logger || defaultLogger;
if (caller) { if (caller) {
const props = { caller }; const props = { caller };

View File

@@ -19,4 +19,3 @@ export * from './computeDiffRows';
export * from './preloadedRowsTools'; export * from './preloadedRowsTools';
export * from './ScriptWriter'; export * from './ScriptWriter';
export * from './getLogger'; export * from './getLogger';
export * from './pinomin';

View File

@@ -1,138 +0,0 @@
export interface ILogger {
trace(msg: string);
trace(data: {} | Error, msg: string);
debug(msg: string);
debug(data: {} | Error, msg: string);
info(msg: string);
info(data: {} | Error, msg: string);
warn(msg: string);
warn(data: {} | Error, msg: string);
error(msg: string);
error(data: {} | Error, msg: string);
fatal(msg: string);
fatal(data: {} | Error, msg: string);
child(childProps: {}): ILogger;
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));
}
packRecord(level: number, data, msg?): ILogRecord {
if (msg) {
return {
...this.config.base,
...data,
level,
msg,
time: new Date().getTime(),
};
}
return {
...this.config.base,
level,
msg: data,
time: new Date().getTime(),
};
}
log(record: ILogRecord) {
for (const target of this.config.targets) {
if (record.level < logLevelNames[target.level]) {
continue;
}
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,
base: { ...this.config.base, ...childProps },
});
}
}
export const logLevelNames = {
10: 'trace',
20: 'debug',
30: 'info',
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 {
base: {};
targets: ILogTargetConfig[];
}
export function createPinoLikeLogger(config: ILogConfig): ILogger {
return new PinoLikeLogger(config);
}

View File

@@ -8737,6 +8737,11 @@ pino-pretty@^9.1.1:
sonic-boom "^3.0.0" sonic-boom "^3.0.0"
strip-json-comments "^3.1.1" strip-json-comments "^3.1.1"
pinomin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/pinomin/-/pinomin-1.0.1.tgz#a4149f137c1fe122f660f9e17e9ff799a6222802"
integrity sha512-LzeMsq1LeLXNEwQNTKVPyGjjwmAvlgr6cR30fhk3rXeoUFy79eYhNRMp34FEia18KRRAV3wuZpLyukVFBpshJg==
pirates@^4.0.1, pirates@^4.0.4: pirates@^4.0.1, pirates@^4.0.4:
version "4.0.5" version "4.0.5"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"