@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.
Files changed (55) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +9 -0
  3. package/package.json +29 -0
  4. package/src/__tests__/logger-console.service.spec.ts +136 -0
  5. package/src/__tests__/logger-nest.service.spec.ts +39 -0
  6. package/src/__tests__/logger-pino.service.spec.ts +149 -0
  7. package/src/__tests__/logger.factory.spec.ts +69 -0
  8. package/src/__tests__/logger.helper.spec.ts +54 -0
  9. package/src/__tests__/logger.service.spec.ts +78 -0
  10. package/src/__tests__/tsconfig.json +3 -0
  11. package/src/__tests__/typeorm-logger.spec.ts +111 -0
  12. package/src/index.d.ts +10 -0
  13. package/src/index.js +27 -0
  14. package/src/index.js.map +1 -0
  15. package/src/index.ts +10 -0
  16. package/src/logger-abstract.service.d.ts +65 -0
  17. package/src/logger-abstract.service.js +91 -0
  18. package/src/logger-abstract.service.js.map +1 -0
  19. package/src/logger-abstract.service.ts +210 -0
  20. package/src/logger-console.service.d.ts +5 -0
  21. package/src/logger-console.service.js +23 -0
  22. package/src/logger-console.service.js.map +1 -0
  23. package/src/logger-console.service.ts +80 -0
  24. package/src/logger-nest.service.d.ts +35 -0
  25. package/src/logger-nest.service.js +59 -0
  26. package/src/logger-nest.service.js.map +1 -0
  27. package/src/logger-nest.service.ts +151 -0
  28. package/src/logger-pino.service.d.ts +10 -0
  29. package/src/logger-pino.service.js +89 -0
  30. package/src/logger-pino.service.js.map +1 -0
  31. package/src/logger-pino.service.ts +161 -0
  32. package/src/logger.enum.d.ts +17 -0
  33. package/src/logger.enum.js +35 -0
  34. package/src/logger.enum.js.map +1 -0
  35. package/src/logger.enum.ts +32 -0
  36. package/src/logger.event.d.ts +11 -0
  37. package/src/logger.event.js +16 -0
  38. package/src/logger.event.js.map +1 -0
  39. package/src/logger.event.ts +11 -0
  40. package/src/logger.factory.d.ts +3 -0
  41. package/src/logger.factory.js +66 -0
  42. package/src/logger.factory.js.map +1 -0
  43. package/src/logger.factory.ts +70 -0
  44. package/src/logger.helper.d.ts +4 -0
  45. package/src/logger.helper.js +36 -0
  46. package/src/logger.helper.js.map +1 -0
  47. package/src/logger.helper.ts +40 -0
  48. package/src/logger.service.d.ts +3 -0
  49. package/src/logger.service.js +25 -0
  50. package/src/logger.service.js.map +1 -0
  51. package/src/logger.service.ts +41 -0
  52. package/src/typeorm-logger.d.ts +13 -0
  53. package/src/typeorm-logger.js +82 -0
  54. package/src/typeorm-logger.js.map +1 -0
  55. 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
+ }