@minimaltech/node-infra 0.3.9 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/helpers/logger/application-logger.d.ts +10 -4
- package/dist/helpers/logger/application-logger.js +34 -18
- package/dist/helpers/logger/application-logger.js.map +1 -1
- package/dist/helpers/logger/default-logger.d.ts +12 -0
- package/dist/helpers/logger/default-logger.js +32 -22
- package/dist/helpers/logger/default-logger.js.map +1 -1
- package/dist/helpers/logger/factory.d.ts +2 -2
- package/dist/helpers/logger/factory.js +2 -2
- package/dist/helpers/logger/factory.js.map +1 -1
- package/package.json +1 -1
@@ -1,13 +1,19 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import winston from 'winston';
|
2
|
+
export declare class Logger {
|
3
3
|
readonly _environment: string | undefined;
|
4
|
-
|
4
|
+
private scopes;
|
5
|
+
private customLogger?;
|
6
|
+
constructor(opts?: {
|
7
|
+
customLogger?: winston.Logger;
|
8
|
+
});
|
9
|
+
private _getLogger;
|
5
10
|
withScope(scope: string): this;
|
6
11
|
private _enhanceMessage;
|
12
|
+
private _doLog;
|
7
13
|
debug(message: string, ...args: any[]): void;
|
8
14
|
info(message: string, ...args: any[]): void;
|
15
|
+
warn(message: string, ...args: any[]): void;
|
9
16
|
error(message: string, ...args: any[]): void;
|
10
17
|
}
|
11
18
|
export declare class ApplicationLogger extends Logger {
|
12
19
|
}
|
13
|
-
export {};
|
@@ -2,16 +2,26 @@
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
|
+
var _a, _b;
|
5
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.ApplicationLogger = void 0;
|
7
|
+
exports.ApplicationLogger = exports.Logger = void 0;
|
7
8
|
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
|
8
9
|
const default_logger_1 = require("./default-logger");
|
9
|
-
const
|
10
|
+
const utilities_1 = require("../../utilities");
|
11
|
+
const extraLogEnvs = (_b = ((_a = process.env.APP_ENV_EXTRA_LOG_ENVS) !== null && _a !== void 0 ? _a : '').split(',').map(el => el.trim())) !== null && _b !== void 0 ? _b : [];
|
12
|
+
const LOG_ENVIRONMENTS = new Set(['local', 'development', 'alpha', 'beta', 'staging', ...extraLogEnvs]);
|
10
13
|
class Logger {
|
11
|
-
constructor() {
|
14
|
+
constructor(opts) {
|
12
15
|
this.scopes = [];
|
13
16
|
this._environment = process.env.NODE_ENV;
|
17
|
+
this.customLogger = opts === null || opts === void 0 ? void 0 : opts.customLogger;
|
14
18
|
}
|
19
|
+
// ---------------------------------------------------------------------
|
20
|
+
_getLogger() {
|
21
|
+
var _a;
|
22
|
+
return (_a = this.customLogger) !== null && _a !== void 0 ? _a : default_logger_1.applicationLogger;
|
23
|
+
}
|
24
|
+
// ---------------------------------------------------------------------
|
15
25
|
withScope(scope) {
|
16
26
|
if (this.scopes.length < 2) {
|
17
27
|
this.scopes.push(scope);
|
@@ -23,6 +33,7 @@ class Logger {
|
|
23
33
|
this.scopes[1] = scope;
|
24
34
|
return this;
|
25
35
|
}
|
36
|
+
// ---------------------------------------------------------------------
|
26
37
|
_enhanceMessage(parts, message) {
|
27
38
|
const enhanced = parts === null || parts === void 0 ? void 0 : parts.reduce((prevState = '', current) => {
|
28
39
|
if ((0, isEmpty_1.default)(prevState)) {
|
@@ -32,34 +43,39 @@ class Logger {
|
|
32
43
|
}, '');
|
33
44
|
return `[${enhanced}]${message}`;
|
34
45
|
}
|
46
|
+
// ---------------------------------------------------------------------
|
47
|
+
_doLog(level, message, ...args) {
|
48
|
+
const logger = this._getLogger();
|
49
|
+
if (!logger) {
|
50
|
+
throw (0, utilities_1.getError)({ message: `[doLog] Level: ${level} | Invalid logger instance!` });
|
51
|
+
}
|
52
|
+
const enhanced = this._enhanceMessage(this.scopes, message);
|
53
|
+
logger.log(level, enhanced, ...args);
|
54
|
+
}
|
55
|
+
// ---------------------------------------------------------------------
|
35
56
|
debug(message, ...args) {
|
36
57
|
if (this._environment && !LOG_ENVIRONMENTS.has(this._environment)) {
|
37
58
|
return;
|
38
59
|
}
|
39
|
-
if (!default_logger_1.applicationLogger) {
|
40
|
-
throw new Error('Invalid logger instance!');
|
41
|
-
}
|
42
60
|
if (!process.env.DEBUG) {
|
43
61
|
return;
|
44
62
|
}
|
45
|
-
|
46
|
-
default_logger_1.applicationLogger.log('debug', enhanced, ...args);
|
63
|
+
this._doLog('debug', message, ...args);
|
47
64
|
}
|
65
|
+
// ---------------------------------------------------------------------
|
48
66
|
info(message, ...args) {
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
67
|
+
this._doLog('info', message, ...args);
|
68
|
+
}
|
69
|
+
// ---------------------------------------------------------------------
|
70
|
+
warn(message, ...args) {
|
71
|
+
this._doLog('warn', message, ...args);
|
54
72
|
}
|
73
|
+
// ---------------------------------------------------------------------
|
55
74
|
error(message, ...args) {
|
56
|
-
|
57
|
-
throw new Error('Invalid logger instance!');
|
58
|
-
}
|
59
|
-
const enhanced = this._enhanceMessage(this.scopes, message);
|
60
|
-
default_logger_1.applicationLogger.log('error', enhanced, ...args);
|
75
|
+
this._doLog('error', message, ...args);
|
61
76
|
}
|
62
77
|
}
|
78
|
+
exports.Logger = Logger;
|
63
79
|
class ApplicationLogger extends Logger {
|
64
80
|
}
|
65
81
|
exports.ApplicationLogger = ApplicationLogger;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"application-logger.js","sourceRoot":"","sources":["../../../src/helpers/logger/application-logger.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"application-logger.js","sourceRoot":"","sources":["../../../src/helpers/logger/application-logger.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,16 @@
|
|
1
1
|
import { format } from 'winston';
|
2
2
|
import 'winston-daily-rotate-file';
|
3
3
|
export declare const applicationLogFormatter: ReturnType<typeof format.combine>;
|
4
|
+
export declare const defineCustomLogger: (opts: {
|
5
|
+
transports: {
|
6
|
+
info: {
|
7
|
+
folder: string;
|
8
|
+
prefix: string;
|
9
|
+
};
|
10
|
+
error: {
|
11
|
+
folder: string;
|
12
|
+
prefix: string;
|
13
|
+
};
|
14
|
+
};
|
15
|
+
}) => import("winston").Logger;
|
4
16
|
export declare const applicationLogger: import("winston").Logger;
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
var _a;
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
7
|
-
exports.applicationLogger = exports.applicationLogFormatter = void 0;
|
7
|
+
exports.applicationLogger = exports.defineCustomLogger = exports.applicationLogFormatter = void 0;
|
8
8
|
const path_1 = __importDefault(require("path"));
|
9
9
|
const winston_1 = require("winston");
|
10
10
|
require("winston-daily-rotate-file");
|
@@ -14,27 +14,37 @@ const LOGGER_PREFIX = common_1.App.APPLICATION_NAME;
|
|
14
14
|
const consoleLogTransport = new winston_1.transports.Console({
|
15
15
|
level: 'debug',
|
16
16
|
});
|
17
|
-
const infoLogTransport = new winston_1.transports.DailyRotateFile({
|
18
|
-
frequency: '1h',
|
19
|
-
maxSize: '100m',
|
20
|
-
maxFiles: '5d',
|
21
|
-
datePattern: 'YYYYMMDD_HH',
|
22
|
-
filename: path_1.default.join(LOGGER_FOLDER_PATH, `/${LOGGER_PREFIX}-info-%DATE%.log`),
|
23
|
-
level: 'info',
|
24
|
-
});
|
25
|
-
const errorLogTransport = new winston_1.transports.DailyRotateFile({
|
26
|
-
frequency: '1h',
|
27
|
-
maxSize: '100m',
|
28
|
-
maxFiles: '5d',
|
29
|
-
datePattern: 'YYYYMMDD_HH',
|
30
|
-
filename: path_1.default.join(LOGGER_FOLDER_PATH, `/${LOGGER_PREFIX}-error-%DATE%.log`),
|
31
|
-
level: 'error',
|
32
|
-
});
|
33
17
|
exports.applicationLogFormatter = winston_1.format.combine(winston_1.format.label({ label: LOGGER_PREFIX }), winston_1.format.splat(), winston_1.format.align(), winston_1.format.timestamp(), winston_1.format.simple(), winston_1.format.colorize(), winston_1.format.printf(({ level, message, label, timestamp }) => `${timestamp} [${label}] ${level}: ${message}`), winston_1.format.errors({ stack: true }));
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
18
|
+
const defineCustomLogger = (opts) => {
|
19
|
+
const { transports: { info, error }, } = opts;
|
20
|
+
const infoTransport = new winston_1.transports.DailyRotateFile({
|
21
|
+
frequency: '1h',
|
22
|
+
maxSize: '100m',
|
23
|
+
maxFiles: '5d',
|
24
|
+
datePattern: 'YYYYMMDD_HH',
|
25
|
+
filename: path_1.default.join(info.folder, `/${info.prefix}-info-%DATE%.log`),
|
26
|
+
level: 'info',
|
27
|
+
});
|
28
|
+
const errorTransport = new winston_1.transports.DailyRotateFile({
|
29
|
+
frequency: '1h',
|
30
|
+
maxSize: '100m',
|
31
|
+
maxFiles: '5d',
|
32
|
+
datePattern: 'YYYYMMDD_HH',
|
33
|
+
filename: path_1.default.join(error.folder, `/${error.prefix}-error-%DATE%.log`),
|
34
|
+
level: 'error',
|
35
|
+
});
|
36
|
+
return (0, winston_1.createLogger)({
|
37
|
+
format: exports.applicationLogFormatter,
|
38
|
+
exitOnError: false,
|
39
|
+
transports: [consoleLogTransport, infoTransport, errorTransport],
|
40
|
+
exceptionHandlers: [consoleLogTransport, errorTransport],
|
41
|
+
});
|
42
|
+
};
|
43
|
+
exports.defineCustomLogger = defineCustomLogger;
|
44
|
+
exports.applicationLogger = (0, exports.defineCustomLogger)({
|
45
|
+
transports: {
|
46
|
+
info: { folder: LOGGER_FOLDER_PATH, prefix: LOGGER_PREFIX },
|
47
|
+
error: { folder: LOGGER_FOLDER_PATH, prefix: LOGGER_PREFIX },
|
48
|
+
},
|
39
49
|
});
|
40
50
|
//# sourceMappingURL=default-logger.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"default-logger.js","sourceRoot":"","sources":["../../../src/helpers/logger/default-logger.ts"],"names":[],"mappings":";;;;;;;AAAA,gDAAwB;AACxB,qCAA2D;AAC3D,qCAAmC;AACnC,qCAA+B;AAE/B,MAAM,kBAAkB,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,mCAAI,IAAI,CAAC;AAC1E,MAAM,aAAa,GAAG,YAAG,CAAC,gBAAgB,CAAC;AAE3C,MAAM,mBAAmB,GAAG,IAAI,oBAAU,CAAC,OAAO,CAAC;IACjD,KAAK,EAAE,OAAO;CACf,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"default-logger.js","sourceRoot":"","sources":["../../../src/helpers/logger/default-logger.ts"],"names":[],"mappings":";;;;;;;AAAA,gDAAwB;AACxB,qCAA2D;AAC3D,qCAAmC;AACnC,qCAA+B;AAE/B,MAAM,kBAAkB,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,mCAAI,IAAI,CAAC;AAC1E,MAAM,aAAa,GAAG,YAAG,CAAC,gBAAgB,CAAC;AAE3C,MAAM,mBAAmB,GAAG,IAAI,oBAAU,CAAC,OAAO,CAAC;IACjD,KAAK,EAAE,OAAO;CACf,CAAC,CAAC;AAEU,QAAA,uBAAuB,GAAsC,gBAAM,CAAC,OAAO,CACtF,gBAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EACtC,gBAAM,CAAC,KAAK,EAAE,EACd,gBAAM,CAAC,KAAK,EAAE,EACd,gBAAM,CAAC,SAAS,EAAE,EAClB,gBAAM,CAAC,MAAM,EAAE,EACf,gBAAM,CAAC,QAAQ,EAAE,EACjB,gBAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,EAAE,CAAC,EACvG,gBAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAC/B,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,IAKlC,EAAE,EAAE;IACH,MAAM,EACJ,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAC5B,GAAG,IAAI,CAAC;IAET,MAAM,aAAa,GAAG,IAAI,oBAAU,CAAC,eAAe,CAAC;QACnD,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,kBAAkB,CAAC;QACnE,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,oBAAU,CAAC,eAAe,CAAC;QACpD,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,cAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,MAAM,mBAAmB,CAAC;QACtE,KAAK,EAAE,OAAO;KACf,CAAC,CAAC;IAEH,OAAO,IAAA,sBAAY,EAAC;QAClB,MAAM,EAAE,+BAAuB;QAC/B,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,CAAC,mBAAmB,EAAE,aAAa,EAAE,cAAc,CAAC;QAChE,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,cAAc,CAAC;KACzD,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,kBAAkB,sBAkC7B;AAEW,QAAA,iBAAiB,GAAG,IAAA,0BAAkB,EAAC;IAClD,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE;QAC3D,KAAK,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE;KAC7D;CACF,CAAC,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { Logger } from './application-logger';
|
2
2
|
export declare class LoggerFactory {
|
3
|
-
static getLogger(scopes: string[]):
|
3
|
+
static getLogger(scopes: string[], customLogger?: Logger): Logger;
|
4
4
|
}
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LoggerFactory = void 0;
|
4
4
|
const application_logger_1 = require("./application-logger");
|
5
5
|
class LoggerFactory {
|
6
|
-
static getLogger(scopes) {
|
7
|
-
const logger = new application_logger_1.ApplicationLogger();
|
6
|
+
static getLogger(scopes, customLogger) {
|
7
|
+
const logger = customLogger !== null && customLogger !== void 0 ? customLogger : new application_logger_1.ApplicationLogger();
|
8
8
|
logger.withScope(scopes.join('-'));
|
9
9
|
return logger;
|
10
10
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/helpers/logger/factory.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/helpers/logger/factory.ts"],"names":[],"mappings":";;;AAAA,6DAAiE;AAEjE,MAAa,aAAa;IACxB,MAAM,CAAC,SAAS,CAAC,MAAgB,EAAE,YAAqB;QACtD,MAAM,MAAM,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,sCAAiB,EAAE,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAND,sCAMC"}
|