@nest-yalc-2/logger 1.0.0
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/LICENSE +661 -0
- package/README.md +9 -0
- package/package.json +29 -0
- package/src/__tests__/logger-console.service.spec.ts +136 -0
- package/src/__tests__/logger-nest.service.spec.ts +39 -0
- package/src/__tests__/logger-pino.service.spec.ts +149 -0
- package/src/__tests__/logger.factory.spec.ts +69 -0
- package/src/__tests__/logger.helper.spec.ts +54 -0
- package/src/__tests__/logger.service.spec.ts +78 -0
- package/src/__tests__/tsconfig.json +3 -0
- package/src/__tests__/typeorm-logger.spec.ts +111 -0
- package/src/index.d.ts +10 -0
- package/src/index.js +27 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +10 -0
- package/src/logger-abstract.service.d.ts +65 -0
- package/src/logger-abstract.service.js +91 -0
- package/src/logger-abstract.service.js.map +1 -0
- package/src/logger-abstract.service.ts +210 -0
- package/src/logger-console.service.d.ts +5 -0
- package/src/logger-console.service.js +23 -0
- package/src/logger-console.service.js.map +1 -0
- package/src/logger-console.service.ts +80 -0
- package/src/logger-nest.service.d.ts +35 -0
- package/src/logger-nest.service.js +59 -0
- package/src/logger-nest.service.js.map +1 -0
- package/src/logger-nest.service.ts +151 -0
- package/src/logger-pino.service.d.ts +10 -0
- package/src/logger-pino.service.js +89 -0
- package/src/logger-pino.service.js.map +1 -0
- package/src/logger-pino.service.ts +161 -0
- package/src/logger.enum.d.ts +17 -0
- package/src/logger.enum.js +35 -0
- package/src/logger.enum.js.map +1 -0
- package/src/logger.enum.ts +32 -0
- package/src/logger.event.d.ts +11 -0
- package/src/logger.event.js +16 -0
- package/src/logger.event.js.map +1 -0
- package/src/logger.event.ts +11 -0
- package/src/logger.factory.d.ts +3 -0
- package/src/logger.factory.js +66 -0
- package/src/logger.factory.js.map +1 -0
- package/src/logger.factory.ts +70 -0
- package/src/logger.helper.d.ts +4 -0
- package/src/logger.helper.js +36 -0
- package/src/logger.helper.js.map +1 -0
- package/src/logger.helper.ts +40 -0
- package/src/logger.service.d.ts +3 -0
- package/src/logger.service.js +25 -0
- package/src/logger.service.js.map +1 -0
- package/src/logger.service.ts +41 -0
- package/src/typeorm-logger.d.ts +13 -0
- package/src/typeorm-logger.js +82 -0
- package/src/typeorm-logger.js.map +1 -0
- package/src/typeorm-logger.ts +125 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ConsoleLogger } from './logger-console.service.js';
|
|
2
|
+
import { PinoLogger } from './logger-pino.service.js';
|
|
3
|
+
import { LogLevel, Logger } from '@nestjs/common';
|
|
4
|
+
import { LoggerTypeEnum, LOG_LEVEL_DEFAULT } from './logger.enum.js';
|
|
5
|
+
import { ImprovedNestLogger } from './logger-nest.service.js';
|
|
6
|
+
import type {
|
|
7
|
+
IImprovedLoggerOptions,
|
|
8
|
+
ImprovedLoggerService,
|
|
9
|
+
} from './logger-abstract.service.js';
|
|
10
|
+
import * as _ from 'lodash-es';
|
|
11
|
+
import { getEnvLoggerLevels } from './logger.helper.js';
|
|
12
|
+
|
|
13
|
+
export const AppLoggerFactory: (
|
|
14
|
+
context: string,
|
|
15
|
+
loggerLevels?: LogLevel[],
|
|
16
|
+
loggerType?: string,
|
|
17
|
+
options?: IImprovedLoggerOptions,
|
|
18
|
+
) => ImprovedLoggerService = _.memoize(
|
|
19
|
+
(
|
|
20
|
+
context: string,
|
|
21
|
+
loggerLevels: LogLevel[] = LOG_LEVEL_DEFAULT,
|
|
22
|
+
loggerType?: string,
|
|
23
|
+
options?: IImprovedLoggerOptions,
|
|
24
|
+
): ImprovedLoggerService => {
|
|
25
|
+
let logger: ImprovedLoggerService;
|
|
26
|
+
switch (loggerType) {
|
|
27
|
+
case LoggerTypeEnum.CONSOLE:
|
|
28
|
+
logger = new ConsoleLogger(context, loggerLevels, options);
|
|
29
|
+
break;
|
|
30
|
+
case LoggerTypeEnum.PINO:
|
|
31
|
+
logger = new PinoLogger(context, loggerLevels, options);
|
|
32
|
+
break;
|
|
33
|
+
case LoggerTypeEnum.NEST:
|
|
34
|
+
default:
|
|
35
|
+
logger = new ImprovedNestLogger(
|
|
36
|
+
context,
|
|
37
|
+
{
|
|
38
|
+
timestamp: true,
|
|
39
|
+
},
|
|
40
|
+
options,
|
|
41
|
+
);
|
|
42
|
+
// not available on default NEST logger
|
|
43
|
+
// ImprovedNestLogger.overrideLogger(loggerLevels);
|
|
44
|
+
logger.setLogLevels?.(loggerLevels);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Side effect to be executed as soon as the module is imported
|
|
50
|
+
*/
|
|
51
|
+
Logger.overrideLogger(getEnvLoggerLevels());
|
|
52
|
+
/**
|
|
53
|
+
* We use the system logger here
|
|
54
|
+
*/
|
|
55
|
+
Logger.debug?.(
|
|
56
|
+
`Use Logger: ${
|
|
57
|
+
loggerType ??
|
|
58
|
+
`not specified, fallback to default (${LoggerTypeEnum.NEST})`
|
|
59
|
+
}`,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
return logger;
|
|
63
|
+
},
|
|
64
|
+
(
|
|
65
|
+
context: string,
|
|
66
|
+
loggerLevels: LogLevel[] | undefined,
|
|
67
|
+
loggerType: string | undefined,
|
|
68
|
+
options: IImprovedLoggerOptions | undefined,
|
|
69
|
+
): string => `${context}-${loggerLevels?.join('-')}-${loggerType}-${options}`,
|
|
70
|
+
);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LogLevel } from '@nestjs/common';
|
|
2
|
+
export declare function maskDataInObject(data?: any, paths?: string[], trace?: any): any;
|
|
3
|
+
export declare const getEnvLoggerLevelsByContext: (context: string) => LogLevel[];
|
|
4
|
+
export declare const getEnvLoggerLevels: (context?: string, def?: LogLevel[]) => LogLevel[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getEnvLoggerLevels = exports.getEnvLoggerLevelsByContext = void 0;
|
|
7
|
+
exports.maskDataInObject = maskDataInObject;
|
|
8
|
+
const env_helper_js_1 = require("@nest-yalc-2/utils/env.helper.js");
|
|
9
|
+
const fast_redact_1 = __importDefault(require("fast-redact"));
|
|
10
|
+
const lodash_es_1 = require("lodash-es");
|
|
11
|
+
const logger_enum_js_1 = require("./logger.enum.js");
|
|
12
|
+
function maskDataInObject(data, paths, trace) {
|
|
13
|
+
if (typeof data === 'string')
|
|
14
|
+
data = { message: data };
|
|
15
|
+
if (!paths || !data || (0, lodash_es_1.isEmpty)(paths) || (0, lodash_es_1.isEmpty)(data)) {
|
|
16
|
+
if (trace)
|
|
17
|
+
data ? (data.trace = trace) : (data = { trace });
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
const redact = (0, fast_redact_1.default)({
|
|
21
|
+
paths,
|
|
22
|
+
});
|
|
23
|
+
return { ...JSON.parse(redact(data)), trace };
|
|
24
|
+
}
|
|
25
|
+
const getEnvLoggerLevelsByContext = (context) => {
|
|
26
|
+
return (0, env_helper_js_1.envToArray)(`NEST_LOGGER_LEVELS_${context.toUpperCase()}`);
|
|
27
|
+
};
|
|
28
|
+
exports.getEnvLoggerLevelsByContext = getEnvLoggerLevelsByContext;
|
|
29
|
+
const getEnvLoggerLevels = (context, def = logger_enum_js_1.LOG_LEVEL_ALL) => {
|
|
30
|
+
let levels = (0, exports.getEnvLoggerLevelsByContext)(context ?? logger_enum_js_1.LoggerDefContext.NEST_SYSTEM);
|
|
31
|
+
if (!levels.length)
|
|
32
|
+
levels = (0, env_helper_js_1.envToArray)('NEST_LOGGER_LEVELS');
|
|
33
|
+
return levels.length ? levels : def;
|
|
34
|
+
};
|
|
35
|
+
exports.getEnvLoggerLevels = getEnvLoggerLevels;
|
|
36
|
+
//# sourceMappingURL=logger.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.helper.js","sourceRoot":"","sources":["logger.helper.ts"],"names":[],"mappings":";;;;;;AAQA,4CAcC;AAtBD,oEAA8D;AAI9D,8DAAqC;AACrC,yCAAoC;AACpC,qDAAmE;AAEnE,SAAgB,gBAAgB,CAAC,IAAU,EAAE,KAAgB,EAAE,KAAW;IACxE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEvD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAA,mBAAO,EAAC,KAAK,CAAC,IAAI,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qBAAU,EAAC;QACxB,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC;AAEM,MAAM,2BAA2B,GAAG,CAAC,OAAe,EAAc,EAAE;IACzE,OAAO,IAAA,0BAAU,EAAW,sBAAsB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC,CAAC;AAFW,QAAA,2BAA2B,+BAEtC;AAEK,MAAM,kBAAkB,GAAG,CAChC,OAAgB,EAChB,MAAkB,8BAAa,EACnB,EAAE;IACd,IAAI,MAAM,GAAG,IAAA,mCAA2B,EACtC,OAAO,IAAI,iCAAgB,CAAC,WAAW,CACxC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,GAAG,IAAA,0BAAU,EAAW,oBAAoB,CAAC,CAAC;IAExE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC,CAAC;AAXW,QAAA,kBAAkB,sBAW7B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { envToArray } from '@nest-yalc-2/utils/env.helper.js';
|
|
2
|
+
import { LogLevel } from '@nestjs/common';
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
import fastRedact from 'fast-redact';
|
|
6
|
+
import { isEmpty } from 'lodash-es';
|
|
7
|
+
import { LOG_LEVEL_ALL, LoggerDefContext } from './logger.enum.js';
|
|
8
|
+
|
|
9
|
+
export function maskDataInObject(data?: any, paths?: string[], trace?: any) {
|
|
10
|
+
if (typeof data === 'string') data = { message: data };
|
|
11
|
+
|
|
12
|
+
if (!paths || !data || isEmpty(paths) || isEmpty(data)) {
|
|
13
|
+
if (trace) data ? (data.trace = trace) : (data = { trace });
|
|
14
|
+
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const redact = fastRedact({
|
|
19
|
+
paths,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
return { ...JSON.parse(redact(data)), trace };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const getEnvLoggerLevelsByContext = (context: string): LogLevel[] => {
|
|
26
|
+
return envToArray<LogLevel>(`NEST_LOGGER_LEVELS_${context.toUpperCase()}`);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const getEnvLoggerLevels = (
|
|
30
|
+
context?: string,
|
|
31
|
+
def: LogLevel[] = LOG_LEVEL_ALL,
|
|
32
|
+
): LogLevel[] => {
|
|
33
|
+
let levels = getEnvLoggerLevelsByContext(
|
|
34
|
+
context ?? LoggerDefContext.NEST_SYSTEM,
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
if (!levels.length) levels = envToArray<LogLevel>('NEST_LOGGER_LEVELS');
|
|
38
|
+
|
|
39
|
+
return levels.length ? levels : def;
|
|
40
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { FactoryProvider } from '@nestjs/common';
|
|
2
|
+
import type { IImprovedLoggerOptions, ImprovedLoggerService } from '@nest-yalc-2/logger/logger-abstract.service.js';
|
|
3
|
+
export declare const LoggerServiceFactory: (appAlias: string, provide: string, context: string, options?: IImprovedLoggerOptions) => FactoryProvider<ImprovedLoggerService>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoggerServiceFactory = void 0;
|
|
4
|
+
const logger_factory_js_1 = require("@nest-yalc-2/logger/logger.factory.js");
|
|
5
|
+
const app_config_service_js_1 = require("@nest-yalc-2/app/app-config.service.js");
|
|
6
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
7
|
+
const LoggerServiceFactory = (appAlias, provide, context, options = {}) => ({
|
|
8
|
+
provide: provide,
|
|
9
|
+
useFactory: (config, eventEmitter) => {
|
|
10
|
+
const conf = config.values;
|
|
11
|
+
const loggerType = conf.loggerType;
|
|
12
|
+
const loggerLevels = options.overrideLoggerLevels ??
|
|
13
|
+
(conf.logContextLevels?.[context] || conf.logLevels || []);
|
|
14
|
+
return (0, logger_factory_js_1.AppLoggerFactory)(context, loggerLevels, loggerType, {
|
|
15
|
+
event: options.event !== false
|
|
16
|
+
? {
|
|
17
|
+
eventEmitter: options.event?.eventEmitter ?? eventEmitter,
|
|
18
|
+
}
|
|
19
|
+
: false,
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
inject: [(0, app_config_service_js_1.getAppConfigToken)(appAlias), event_emitter_1.EventEmitter2],
|
|
23
|
+
});
|
|
24
|
+
exports.LoggerServiceFactory = LoggerServiceFactory;
|
|
25
|
+
//# sourceMappingURL=logger.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["logger.service.ts"],"names":[],"mappings":";;;AAAA,6EAAyE;AAOzE,kFAGgD;AAChD,yDAAsD;AAE/C,MAAM,oBAAoB,GAAG,CAClC,QAAgB,EAChB,OAAe,EACf,OAAe,EACf,UAAkC,EAAE,EACI,EAAE,CAAC,CAAC;IAC5C,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CACV,MAAsC,EACtC,YAA2B,EACJ,EAAE;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,YAAY,GAChB,OAAO,CAAC,oBAAoB;YAC5B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAE7D,OAAO,IAAA,oCAAgB,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE;YACzD,KAAK,EACH,OAAO,CAAC,KAAK,KAAK,KAAK;gBACrB,CAAC,CAAC;oBACE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,IAAI,YAAY;iBAC1D;gBACH,CAAC,CAAC,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,CAAC,IAAA,yCAAiB,EAAC,QAAQ,CAAC,EAAE,6BAAa,CAAC;CACrD,CAAC,CAAC;AA3BU,QAAA,oBAAoB,wBA2B9B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AppLoggerFactory } from '@nest-yalc-2/logger/logger.factory.js';
|
|
2
|
+
import { FactoryProvider, LogLevel } from '@nestjs/common';
|
|
3
|
+
import type {
|
|
4
|
+
IImprovedLoggerOptions,
|
|
5
|
+
ImprovedLoggerService,
|
|
6
|
+
} from '@nest-yalc-2/logger/logger-abstract.service.js';
|
|
7
|
+
import { IServiceConf } from '@nest-yalc-2/app/conf.type.js';
|
|
8
|
+
import {
|
|
9
|
+
AppConfigService,
|
|
10
|
+
getAppConfigToken,
|
|
11
|
+
} from '@nest-yalc-2/app/app-config.service.js';
|
|
12
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
13
|
+
|
|
14
|
+
export const LoggerServiceFactory = (
|
|
15
|
+
appAlias: string,
|
|
16
|
+
provide: string,
|
|
17
|
+
context: string,
|
|
18
|
+
options: IImprovedLoggerOptions = {},
|
|
19
|
+
): FactoryProvider<ImprovedLoggerService> => ({
|
|
20
|
+
provide: provide,
|
|
21
|
+
useFactory: (
|
|
22
|
+
config: AppConfigService<IServiceConf>,
|
|
23
|
+
eventEmitter: EventEmitter2,
|
|
24
|
+
): ImprovedLoggerService => {
|
|
25
|
+
const conf = config.values;
|
|
26
|
+
const loggerType = conf.loggerType;
|
|
27
|
+
const loggerLevels: LogLevel[] =
|
|
28
|
+
options.overrideLoggerLevels ??
|
|
29
|
+
(conf.logContextLevels?.[context] || conf.logLevels || []);
|
|
30
|
+
|
|
31
|
+
return AppLoggerFactory(context, loggerLevels, loggerType, {
|
|
32
|
+
event:
|
|
33
|
+
options.event !== false
|
|
34
|
+
? {
|
|
35
|
+
eventEmitter: options.event?.eventEmitter ?? eventEmitter,
|
|
36
|
+
}
|
|
37
|
+
: false,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
inject: [getAppConfigToken(appAlias), EventEmitter2],
|
|
41
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { YalcEventService } from '@nest-yalc-2/event-manager/event.service.js';
|
|
2
|
+
import { Logger } from 'typeorm';
|
|
3
|
+
export declare class TypeORMLogger implements Logger {
|
|
4
|
+
private event;
|
|
5
|
+
private isLoggerEnabled;
|
|
6
|
+
constructor(event: YalcEventService);
|
|
7
|
+
logQuery(query: string, parameters?: any[]): any;
|
|
8
|
+
logQueryError(error: string | Error, query: string, parameters?: any[]): any;
|
|
9
|
+
logQuerySlow(time: number, query: string, parameters?: any[]): any;
|
|
10
|
+
logSchemaBuild(message: string): any;
|
|
11
|
+
logMigration(message: string): any;
|
|
12
|
+
log(level: 'log' | 'info' | 'warn', message: any): any;
|
|
13
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TypeORMLogger = void 0;
|
|
4
|
+
const utils_1 = require("@nest-yalc-2/utils");
|
|
5
|
+
const logger_event_js_1 = require("./logger.event.js");
|
|
6
|
+
class TypeORMLogger {
|
|
7
|
+
constructor(event) {
|
|
8
|
+
this.event = event;
|
|
9
|
+
this.isLoggerEnabled = false;
|
|
10
|
+
this.isLoggerEnabled = (0, utils_1.envIsTrue)(process.env.TYPEORM_LOGGING || 'false');
|
|
11
|
+
}
|
|
12
|
+
logQuery(query, parameters) {
|
|
13
|
+
if (!this.isLoggerEnabled)
|
|
14
|
+
return;
|
|
15
|
+
this.event.debug?.(logger_event_js_1.LoggerEvent.QUERY_LOG, {
|
|
16
|
+
data: {
|
|
17
|
+
query,
|
|
18
|
+
parameters,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
logQueryError(error, query, parameters) {
|
|
23
|
+
if (!this.isLoggerEnabled)
|
|
24
|
+
return;
|
|
25
|
+
this.event.error?.(logger_event_js_1.LoggerEvent.QUERY_ERROR, {
|
|
26
|
+
data: {
|
|
27
|
+
error,
|
|
28
|
+
query,
|
|
29
|
+
parameters,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
logQuerySlow(time, query, parameters) {
|
|
34
|
+
if (!this.isLoggerEnabled)
|
|
35
|
+
return;
|
|
36
|
+
this.event.warn?.(logger_event_js_1.LoggerEvent.QUERY_SLOW, {
|
|
37
|
+
message: `SLOW QUERY!!!!`,
|
|
38
|
+
data: {
|
|
39
|
+
time,
|
|
40
|
+
query,
|
|
41
|
+
parameters,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
logSchemaBuild(message) {
|
|
46
|
+
if (!this.isLoggerEnabled)
|
|
47
|
+
return;
|
|
48
|
+
this.event.debug?.(logger_event_js_1.LoggerEvent.SCHEMA_BUILD, {
|
|
49
|
+
message,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
logMigration(message) {
|
|
53
|
+
if (!this.isLoggerEnabled)
|
|
54
|
+
return;
|
|
55
|
+
this.event.debug?.(logger_event_js_1.LoggerEvent.DEBUG, {
|
|
56
|
+
message,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
log(level, message) {
|
|
60
|
+
if (!this.isLoggerEnabled)
|
|
61
|
+
return;
|
|
62
|
+
switch (level) {
|
|
63
|
+
case 'log':
|
|
64
|
+
this.event.log?.(logger_event_js_1.LoggerEvent.LOG, {
|
|
65
|
+
message,
|
|
66
|
+
});
|
|
67
|
+
break;
|
|
68
|
+
case 'info':
|
|
69
|
+
this.event.verbose?.(logger_event_js_1.LoggerEvent.INFO, {
|
|
70
|
+
message,
|
|
71
|
+
});
|
|
72
|
+
break;
|
|
73
|
+
case 'warn':
|
|
74
|
+
this.event.warn?.(logger_event_js_1.LoggerEvent.WARN, {
|
|
75
|
+
message,
|
|
76
|
+
});
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.TypeORMLogger = TypeORMLogger;
|
|
82
|
+
//# sourceMappingURL=typeorm-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeorm-logger.js","sourceRoot":"","sources":["typeorm-logger.ts"],"names":[],"mappings":";;;AACA,8CAA+C;AAE/C,uDAAgD;AAEhD,MAAa,aAAa;IAGxB,YAAoB,KAAuB;QAAvB,UAAK,GAAL,KAAK,CAAkB;QAFnC,oBAAe,GAAG,KAAK,CAAC;QAG9B,IAAI,CAAC,eAAe,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,CAAC;IAC3E,CAAC;IAKD,QAAQ,CACN,KAAa,EACb,UAAkB;QAElB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAGlC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,6BAAW,CAAC,SAAS,EAAE;YACxC,IAAI,EAAE;gBACJ,KAAK;gBACL,UAAU;aACX;SACF,CAAC,CAAC;IACL,CAAC;IAID,aAAa,CACX,KAAqB,EACrB,KAAa,EACb,UAAkB;QAGlB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAGlC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,6BAAW,CAAC,WAAW,EAAE;YAC1C,IAAI,EAAE;gBACJ,KAAK;gBACL,KAAK;gBACL,UAAU;aACX;SACF,CAAC,CAAC;IACL,CAAC;IAID,YAAY,CACV,IAAY,EACZ,KAAa,EACb,UAAkB;QAGlB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAGlC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,6BAAW,CAAC,UAAU,EAAE;YACxC,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE;gBACJ,IAAI;gBACJ,KAAK;gBACL,UAAU;aACX;SACF,CAAC,CAAC;IACL,CAAC;IAID,cAAc,CAAC,OAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAGlC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,6BAAW,CAAC,YAAY,EAAE;YAC3C,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAID,YAAY,CAAC,OAAe;QAC1B,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAGlC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,6BAAW,CAAC,KAAK,EAAE;YACpC,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAKD,GAAG,CACD,KAA8B,EAC9B,OAAY;QAGZ,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAElC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,KAAK;gBAER,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,6BAAW,CAAC,GAAG,EAAE;oBAChC,OAAO;iBACR,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,MAAM;gBAET,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,6BAAW,CAAC,IAAI,EAAE;oBACrC,OAAO;iBACR,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,MAAM;gBAET,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,6BAAW,CAAC,IAAI,EAAE;oBAClC,OAAO;iBACR,CAAC,CAAC;gBACH,MAAM;QACV,CAAC;IACH,CAAC;CACF;AAvHD,sCAuHC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { YalcEventService } from '@nest-yalc-2/event-manager/event.service.js';
|
|
2
|
+
import { envIsTrue } from '@nest-yalc-2/utils';
|
|
3
|
+
import { Logger } from 'typeorm';
|
|
4
|
+
import { LoggerEvent } from './logger.event.js';
|
|
5
|
+
|
|
6
|
+
export class TypeORMLogger implements Logger {
|
|
7
|
+
private isLoggerEnabled = false;
|
|
8
|
+
|
|
9
|
+
constructor(private event: YalcEventService) {
|
|
10
|
+
this.isLoggerEnabled = envIsTrue(process.env.TYPEORM_LOGGING || 'false');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Logs query and parameters used in it.
|
|
15
|
+
*/
|
|
16
|
+
logQuery(
|
|
17
|
+
query: string,
|
|
18
|
+
parameters?: any[] /*, queryRunner?: QueryRunner*/,
|
|
19
|
+
): any {
|
|
20
|
+
if (!this.isLoggerEnabled) return;
|
|
21
|
+
|
|
22
|
+
/* istanbul ignore next */
|
|
23
|
+
this.event.debug?.(LoggerEvent.QUERY_LOG, {
|
|
24
|
+
data: {
|
|
25
|
+
query,
|
|
26
|
+
parameters,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Logs query that is failed.
|
|
32
|
+
*/
|
|
33
|
+
logQueryError(
|
|
34
|
+
error: string | Error,
|
|
35
|
+
query: string,
|
|
36
|
+
parameters?: any[],
|
|
37
|
+
// queryRunner?: QueryRunner,
|
|
38
|
+
): any {
|
|
39
|
+
if (!this.isLoggerEnabled) return;
|
|
40
|
+
|
|
41
|
+
/* istanbul ignore next */
|
|
42
|
+
this.event.error?.(LoggerEvent.QUERY_ERROR, {
|
|
43
|
+
data: {
|
|
44
|
+
error,
|
|
45
|
+
query,
|
|
46
|
+
parameters,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Logs query that is slow.
|
|
52
|
+
*/
|
|
53
|
+
logQuerySlow(
|
|
54
|
+
time: number,
|
|
55
|
+
query: string,
|
|
56
|
+
parameters?: any[],
|
|
57
|
+
// queryRunner?: QueryRunner,
|
|
58
|
+
): any {
|
|
59
|
+
if (!this.isLoggerEnabled) return;
|
|
60
|
+
|
|
61
|
+
/* istanbul ignore next */
|
|
62
|
+
this.event.warn?.(LoggerEvent.QUERY_SLOW, {
|
|
63
|
+
message: `SLOW QUERY!!!!`,
|
|
64
|
+
data: {
|
|
65
|
+
time,
|
|
66
|
+
query,
|
|
67
|
+
parameters,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Logs events from the schema build process.
|
|
73
|
+
*/
|
|
74
|
+
logSchemaBuild(message: string /* , queryRunner?: QueryRunner */): any {
|
|
75
|
+
if (!this.isLoggerEnabled) return;
|
|
76
|
+
|
|
77
|
+
/* istanbul ignore next */
|
|
78
|
+
this.event.debug?.(LoggerEvent.SCHEMA_BUILD, {
|
|
79
|
+
message,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Logs events from the migrations run process.
|
|
84
|
+
*/
|
|
85
|
+
logMigration(message: string /* , queryRunner?: QueryRunner */): any {
|
|
86
|
+
if (!this.isLoggerEnabled) return;
|
|
87
|
+
|
|
88
|
+
/* istanbul ignore next */
|
|
89
|
+
this.event.debug?.(LoggerEvent.DEBUG, {
|
|
90
|
+
message,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Perform logging using given logger, or by default to the console.
|
|
95
|
+
* Log has its own level and message.
|
|
96
|
+
*/
|
|
97
|
+
log(
|
|
98
|
+
level: 'log' | 'info' | 'warn',
|
|
99
|
+
message: any,
|
|
100
|
+
// queryRunner?: QueryRunner,
|
|
101
|
+
): any {
|
|
102
|
+
if (!this.isLoggerEnabled) return;
|
|
103
|
+
|
|
104
|
+
switch (level) {
|
|
105
|
+
case 'log':
|
|
106
|
+
/* istanbul ignore next */
|
|
107
|
+
this.event.log?.(LoggerEvent.LOG, {
|
|
108
|
+
message,
|
|
109
|
+
});
|
|
110
|
+
break;
|
|
111
|
+
case 'info':
|
|
112
|
+
/* istanbul ignore next */
|
|
113
|
+
this.event.verbose?.(LoggerEvent.INFO, {
|
|
114
|
+
message,
|
|
115
|
+
});
|
|
116
|
+
break;
|
|
117
|
+
case 'warn':
|
|
118
|
+
/* istanbul ignore next */
|
|
119
|
+
this.event.warn?.(LoggerEvent.WARN, {
|
|
120
|
+
message,
|
|
121
|
+
});
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|