@serene-dev/la-nest-library 11.0.81 → 11.0.82
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/libs/la-library/src/services/logger.di.service.d.ts +5 -0
- package/dist/libs/la-library/src/services/logger.di.service.js +33 -13
- package/dist/libs/la-library/src/services/logger.di.service.js.map +1 -1
- package/dist/libs/la-library/src/services/logger.service.d.ts +6 -0
- package/dist/libs/la-library/src/services/logger.service.js +24 -10
- package/dist/libs/la-library/src/services/logger.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,8 +2,13 @@ import * as winston from 'winston';
|
|
|
2
2
|
export declare class LoggerService {
|
|
3
3
|
constructor();
|
|
4
4
|
_logger: winston.Logger;
|
|
5
|
+
private readonly logLevels;
|
|
6
|
+
private exactLevelFormat;
|
|
5
7
|
initLogger: (logDir?: string) => void;
|
|
6
8
|
write(message: string): void;
|
|
7
9
|
info(val: object, ...meta: object[]): void;
|
|
10
|
+
warn(val: object, ...meta: object[]): void;
|
|
11
|
+
debug(val: object, ...meta: object[]): void;
|
|
12
|
+
verbose(val: object, ...meta: object[]): void;
|
|
8
13
|
error(val: object, ...meta: object[]): void;
|
|
9
14
|
}
|
|
@@ -17,39 +17,50 @@ const winston = require("winston");
|
|
|
17
17
|
const winstonDaily = require("winston-daily-rotate-file");
|
|
18
18
|
let LoggerService = class LoggerService {
|
|
19
19
|
constructor() {
|
|
20
|
+
this.logLevels = [
|
|
21
|
+
'error',
|
|
22
|
+
'warn',
|
|
23
|
+
'info',
|
|
24
|
+
'debug',
|
|
25
|
+
'verbose',
|
|
26
|
+
];
|
|
27
|
+
this.exactLevelFormat = (targetLevel) => winston.format((info) => (info.level === targetLevel ? info : false))();
|
|
20
28
|
this.initLogger = (logDir = path.join(__dirname, '../logs')) => {
|
|
21
29
|
if (!fs.existsSync(logDir)) {
|
|
22
|
-
fs.mkdirSync(logDir);
|
|
30
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
23
31
|
}
|
|
32
|
+
[...this.logLevels, 'combined'].forEach((level) => {
|
|
33
|
+
fs.mkdirSync(path.join(logDir, level), { recursive: true });
|
|
34
|
+
});
|
|
24
35
|
// Define log format
|
|
25
36
|
const logFormat = winston.format.printf(({ timestamp, level, message }) => `${timestamp} ${level}: ${message}`);
|
|
37
|
+
const fileFormat = winston.format.combine(winston.format.timestamp({
|
|
38
|
+
format: 'YYYY-MM-DD HH:mm:ss',
|
|
39
|
+
}), logFormat);
|
|
26
40
|
/*
|
|
27
41
|
* Log Level
|
|
28
42
|
* error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6
|
|
29
43
|
*/
|
|
30
44
|
this._logger = winston.createLogger({
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}), logFormat),
|
|
45
|
+
level: 'debug',
|
|
46
|
+
format: fileFormat,
|
|
34
47
|
transports: [
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
level: 'debug',
|
|
48
|
+
...this.logLevels.map((level) => new winstonDaily({
|
|
49
|
+
level,
|
|
38
50
|
datePattern: 'YYYY-MM-DD',
|
|
39
|
-
dirname: logDir
|
|
51
|
+
dirname: path.join(logDir, level),
|
|
40
52
|
filename: `%DATE%.log`,
|
|
41
53
|
maxFiles: 30, // 30 Days saved
|
|
54
|
+
handleExceptions: level === 'error',
|
|
42
55
|
json: true,
|
|
43
56
|
zippedArchive: true,
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
format: winston.format.combine(this.exactLevelFormat(level), fileFormat),
|
|
58
|
+
})),
|
|
46
59
|
new winstonDaily({
|
|
47
|
-
level: 'error',
|
|
48
60
|
datePattern: 'YYYY-MM-DD',
|
|
49
|
-
dirname: logDir
|
|
61
|
+
dirname: path.join(logDir, 'combined'),
|
|
50
62
|
filename: `%DATE%.log`,
|
|
51
63
|
maxFiles: 30, // 30 Days saved
|
|
52
|
-
handleExceptions: true,
|
|
53
64
|
json: true,
|
|
54
65
|
zippedArchive: true,
|
|
55
66
|
}),
|
|
@@ -66,6 +77,15 @@ let LoggerService = class LoggerService {
|
|
|
66
77
|
info(val, ...meta) {
|
|
67
78
|
this._logger.info(JSON.stringify({ val, meta }));
|
|
68
79
|
}
|
|
80
|
+
warn(val, ...meta) {
|
|
81
|
+
this._logger.warn(JSON.stringify({ val, meta }));
|
|
82
|
+
}
|
|
83
|
+
debug(val, ...meta) {
|
|
84
|
+
this._logger.debug(JSON.stringify({ val, meta }));
|
|
85
|
+
}
|
|
86
|
+
verbose(val, ...meta) {
|
|
87
|
+
this._logger.verbose(JSON.stringify({ val, meta }));
|
|
88
|
+
}
|
|
69
89
|
error(val, ...meta) {
|
|
70
90
|
this._logger.error(JSON.stringify({ val, meta }));
|
|
71
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.di.service.js","sourceRoot":"","sources":["../../../../../libs/la-library/src/services/logger.di.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,yBAAyB;AACzB,6BAA6B;AAC7B,mCAAmC;AACnC,0DAA0D;AAGnD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB;
|
|
1
|
+
{"version":3,"file":"logger.di.service.js","sourceRoot":"","sources":["../../../../../libs/la-library/src/services/logger.di.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ declare const stream: {
|
|
|
6
6
|
declare const logger: {
|
|
7
7
|
info: (val: unknown, title?: string, ...meta: any[]) => any;
|
|
8
8
|
log: (val: unknown, title?: string, ...meta: any[]) => any;
|
|
9
|
+
warn: (val: unknown, title?: string, ...meta: any[]) => any;
|
|
10
|
+
debug: (val: unknown, title?: string, ...meta: any[]) => any;
|
|
11
|
+
verbose: (val: unknown, title?: string, ...meta: any[]) => any;
|
|
9
12
|
error: (val: unknown, title?: string, ...meta: any[]) => any;
|
|
10
13
|
};
|
|
11
14
|
declare const logger$: Subject<{
|
|
@@ -17,6 +20,9 @@ declare const logger$: Subject<{
|
|
|
17
20
|
declare const loggerFactory: (subject: string) => {
|
|
18
21
|
info: (val: unknown, ...meta: any[]) => any;
|
|
19
22
|
log: (val: unknown, ...meta: any[]) => any;
|
|
23
|
+
warn: (val: unknown, ...meta: any[]) => any;
|
|
24
|
+
debug: (val: unknown, ...meta: any[]) => any;
|
|
25
|
+
verbose: (val: unknown, ...meta: any[]) => any;
|
|
20
26
|
error: (val: unknown, ...meta: any[]) => any;
|
|
21
27
|
};
|
|
22
28
|
export { stream, logger, initLogger, logger$, loggerFactory };
|
|
@@ -9,10 +9,12 @@ const winstonDaily = require("winston-daily-rotate-file");
|
|
|
9
9
|
let _logger;
|
|
10
10
|
// debugger;
|
|
11
11
|
// logs dir
|
|
12
|
+
const logLevels = ['error', 'warn', 'info', 'debug', 'verbose'];
|
|
13
|
+
const exactLevelFormat = (targetLevel) => winston.format((info) => (info.level === targetLevel ? info : false))();
|
|
12
14
|
const sharedTransConfig = (logDir, level) => ({
|
|
13
|
-
level,
|
|
15
|
+
...(level !== 'combined' ? { level } : {}),
|
|
14
16
|
datePattern: 'YYYY-MM-DD',
|
|
15
|
-
dirname:
|
|
17
|
+
dirname: path.join(logDir, level),
|
|
16
18
|
filename: `%DATE%.log`,
|
|
17
19
|
maxFiles: 30, // 30 Days saved
|
|
18
20
|
json: false,
|
|
@@ -20,25 +22,31 @@ const sharedTransConfig = (logDir, level) => ({
|
|
|
20
22
|
});
|
|
21
23
|
const initLogger = (logDir = path.join(__dirname, '../logs')) => {
|
|
22
24
|
if (!fs.existsSync(logDir)) {
|
|
23
|
-
fs.mkdirSync(logDir);
|
|
25
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
24
26
|
}
|
|
27
|
+
[...logLevels, 'combined'].forEach((level) => {
|
|
28
|
+
fs.mkdirSync(path.join(logDir, level), { recursive: true });
|
|
29
|
+
});
|
|
25
30
|
// Define log format
|
|
26
31
|
const logFormat = winston.format.printf(({ timestamp, level, message }) => {
|
|
27
32
|
return `${timestamp} ${level}: ${message}`;
|
|
28
33
|
});
|
|
34
|
+
const fileFormat = winston.format.combine(winston.format.timestamp({
|
|
35
|
+
format: 'YYYY-MM-DD HH:mm:ss',
|
|
36
|
+
}), logFormat);
|
|
29
37
|
/*
|
|
30
38
|
* Log Level
|
|
31
39
|
* error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6
|
|
32
40
|
*/
|
|
33
41
|
_logger = winston.createLogger({
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}), logFormat),
|
|
42
|
+
level: 'debug',
|
|
43
|
+
format: fileFormat,
|
|
37
44
|
transports: [
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
...logLevels.map((level) => new winstonDaily({
|
|
46
|
+
...sharedTransConfig(logDir, level),
|
|
47
|
+
format: winston.format.combine(exactLevelFormat(level), fileFormat),
|
|
48
|
+
})),
|
|
49
|
+
new winstonDaily(sharedTransConfig(logDir, 'combined')),
|
|
42
50
|
],
|
|
43
51
|
});
|
|
44
52
|
_logger.add(new winston.transports.Console({
|
|
@@ -66,6 +74,9 @@ const _logFuncNoTitle = (level, title) => (val, ...meta) => _logFunc(level)(val,
|
|
|
66
74
|
const logger = {
|
|
67
75
|
info: _logFunc('info'),
|
|
68
76
|
log: _logFunc('info'),
|
|
77
|
+
warn: _logFunc('warn'),
|
|
78
|
+
debug: _logFunc('debug'),
|
|
79
|
+
verbose: _logFunc('verbose'),
|
|
69
80
|
error: _logFunc('error'),
|
|
70
81
|
};
|
|
71
82
|
exports.logger = logger;
|
|
@@ -74,6 +85,9 @@ exports.logger$ = logger$;
|
|
|
74
85
|
const loggerFactory = (subject) => ({
|
|
75
86
|
info: _logFuncNoTitle('info', subject),
|
|
76
87
|
log: _logFuncNoTitle('info', subject),
|
|
88
|
+
warn: _logFuncNoTitle('warn', subject),
|
|
89
|
+
debug: _logFuncNoTitle('debug', subject),
|
|
90
|
+
verbose: _logFuncNoTitle('verbose', subject),
|
|
77
91
|
error: _logFuncNoTitle('error', subject),
|
|
78
92
|
});
|
|
79
93
|
exports.loggerFactory = loggerFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../libs/la-library/src/services/logger.service.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,6BAA6B;AAC7B,+BAA+B;AAC/B,mCAAmC;AACnC,0DAA0D;AAE1D,IAAI,OAAuB,CAAC;AAC5B,YAAY;AACZ,WAAW;AACX,MAAM,iBAAiB,GAAG,CACxB,MAAc,EACd,
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../libs/la-library/src/services/logger.service.ts"],"names":[],"mappings":"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"}
|