@tramvai/module-log 2.160.19 → 2.160.25

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/lib/browser.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { __decorate } from 'tslib';
2
2
  import { createLoggerFactory, BrowserReporter } from '@tinkoff/logger';
3
- import { Module } from '@tramvai/core';
4
- import { LOGGER_TOKEN, LOGGER_INIT_HOOK } from '@tramvai/tokens-common';
3
+ import { Module, provide, Scope, optional } from '@tramvai/core';
4
+ import { LOGGER_TOKEN, LOGGER_INIT_HOOK, LOGGER_SHARED_CONTEXT, LOGGER_REMOTE_REPORTER } from '@tramvai/tokens-common';
5
5
  export { LOGGER_TOKEN } from '@tramvai/tokens-common';
6
6
  import { LOGGER_NAME, LOGGER_KEY } from './constants.browser.js';
7
7
  import { clientProviders } from './devLogs.browser.js';
@@ -18,7 +18,7 @@ LogModule = __decorate([
18
18
  Module({
19
19
  providers: [
20
20
  ...(process.env.NODE_ENV === 'development' ? clientProviders : []),
21
- {
21
+ provide({
22
22
  provide: LOGGER_TOKEN,
23
23
  useFactory({ loggerInitHooks }) {
24
24
  if (loggerInitHooks) {
@@ -31,7 +31,26 @@ LogModule = __decorate([
31
31
  deps: {
32
32
  loggerInitHooks: { token: LOGGER_INIT_HOOK, multi: true, optional: true },
33
33
  },
34
- },
34
+ }),
35
+ provide({
36
+ provide: LOGGER_SHARED_CONTEXT,
37
+ scope: Scope.SINGLETON,
38
+ useValue: new Map(),
39
+ }),
40
+ provide({
41
+ provide: LOGGER_INIT_HOOK,
42
+ multi: true,
43
+ useFactory({ remoteReporter }) {
44
+ return (loggerInstance) => {
45
+ if (remoteReporter) {
46
+ loggerInstance.addReporter(remoteReporter);
47
+ }
48
+ };
49
+ },
50
+ deps: {
51
+ remoteReporter: optional(LOGGER_REMOTE_REPORTER),
52
+ },
53
+ }),
35
54
  ],
36
55
  })
37
56
  ], LogModule);
@@ -153,8 +153,6 @@ const clientProviders = [
153
153
  const logs = store.getState(LogStore);
154
154
  const ssrLogger = logger({
155
155
  name: 'ssr-logger',
156
- // сетим пустой массив в beforeReporters, чтобы не подтягивать настройки рутового логгера с RemoteReporter
157
- beforeReporters: [],
158
156
  reporters: [new BrowserReporter()],
159
157
  extensions: [new DevLogsExtension(logs)],
160
158
  });
package/lib/devLogs.es.js CHANGED
@@ -153,8 +153,6 @@ const flushLogs = (ssrLogger, logs) => {
153
153
  const logs = store.getState(LogStore);
154
154
  const ssrLogger = logger({
155
155
  name: 'ssr-logger',
156
- // сетим пустой массив в beforeReporters, чтобы не подтягивать настройки рутового логгера с RemoteReporter
157
- beforeReporters: [],
158
156
  reporters: [new BrowserReporter()],
159
157
  extensions: [new DevLogsExtension(logs)],
160
158
  });
package/lib/devLogs.js CHANGED
@@ -162,8 +162,6 @@ const flushLogs = (ssrLogger, logs) => {
162
162
  const logs = store.getState(LogStore.LogStore);
163
163
  const ssrLogger = logger$1({
164
164
  name: 'ssr-logger',
165
- // сетим пустой массив в beforeReporters, чтобы не подтягивать настройки рутового логгера с RemoteReporter
166
- beforeReporters: [],
167
165
  reporters: [new logger.BrowserReporter()],
168
166
  extensions: [new DevLogsExtension(logs)],
169
167
  });
package/lib/server.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { LOGGER_TOKEN } from '@tramvai/tokens-common';
2
+ import './types';
2
3
  export * from './LogStore';
3
4
  export { LOGGER_TOKEN };
4
5
  declare const logger: import("@tinkoff/logger").Factory;
package/lib/server.es.js CHANGED
@@ -3,8 +3,8 @@ import each from '@tinkoff/utils/array/each';
3
3
  import split from '@tinkoff/utils/string/split';
4
4
  import { hostname } from 'os';
5
5
  import env from 'std-env';
6
- import { Module, Scope } from '@tramvai/core';
7
- import { LOGGER_TOKEN, LOGGER_INIT_HOOK } from '@tramvai/tokens-common';
6
+ import { Module, Scope, provide } from '@tramvai/core';
7
+ import { LOGGER_TOKEN, LOGGER_INIT_HOOK, ASYNC_LOCAL_STORAGE_TOKEN, LOGGER_SHARED_CONTEXT } from '@tramvai/tokens-common';
8
8
  export { LOGGER_TOKEN } from '@tramvai/tokens-common';
9
9
  import { ENV_USED_TOKEN } from '@tramvai/module-environment';
10
10
  import { NodeBasicReporter, NodeDevReporter, JSONReporter, createLoggerFactory, LEVELS } from '@tinkoff/logger';
@@ -49,6 +49,32 @@ function factory({ environmentManager, loggerInitHooks }) {
49
49
  }
50
50
  return logger;
51
51
  }
52
+ /**
53
+ * At server-side, when using LOGGER_SHARED_CONTEXT, new properties will be stored in current
54
+ * AsyncLocalStorage context (which is unique for each user request).
55
+ * This extension will read current properties from context, it allows us to automatically bind
56
+ * user-specific properties (user-agent, ip, etc.) to all logs, called in complete different places in application code.
57
+ */
58
+ class LoggerSharedContextExtension {
59
+ constructor({ storage }) {
60
+ this.storage = storage;
61
+ }
62
+ extend(logObj) {
63
+ var _a;
64
+ const state = (_a = this.storage.getStore()) === null || _a === void 0 ? void 0 : _a.logger;
65
+ if (state) {
66
+ state.forEach((value, key) => {
67
+ const keyExist = key in logObj;
68
+ const valueIsNotEmpty = typeof value !== 'undefined';
69
+ if (!keyExist && valueIsNotEmpty) {
70
+ // eslint-disable-next-line no-param-reassign
71
+ logObj[key] = value;
72
+ }
73
+ });
74
+ }
75
+ return logObj;
76
+ }
77
+ }
52
78
  let LogModule = class LogModule {
53
79
  };
54
80
  LogModule = __decorate([
@@ -82,6 +108,45 @@ LogModule = __decorate([
82
108
  ],
83
109
  multi: true,
84
110
  },
111
+ provide({
112
+ provide: LOGGER_INIT_HOOK,
113
+ multi: true,
114
+ scope: Scope.SINGLETON,
115
+ useFactory: ({ storage }) => {
116
+ const loggerSharedContextExtension = new LoggerSharedContextExtension({ storage });
117
+ return (loggerInstance) => {
118
+ return loggerInstance.addExtension(loggerSharedContextExtension);
119
+ };
120
+ },
121
+ deps: {
122
+ storage: ASYNC_LOCAL_STORAGE_TOKEN,
123
+ },
124
+ }),
125
+ provide({
126
+ provide: LOGGER_SHARED_CONTEXT,
127
+ scope: Scope.SINGLETON,
128
+ useFactory: ({ storage }) => {
129
+ return {
130
+ get(key) {
131
+ var _a, _b;
132
+ return (_b = (_a = storage.getStore()) === null || _a === void 0 ? void 0 : _a.logger) === null || _b === void 0 ? void 0 : _b.get(key);
133
+ },
134
+ set(key, value) {
135
+ const store = storage.getStore();
136
+ if (!store) {
137
+ return;
138
+ }
139
+ if (!(store === null || store === void 0 ? void 0 : store.logger)) {
140
+ store.logger = new Map();
141
+ }
142
+ store.logger.set(key, value);
143
+ },
144
+ };
145
+ },
146
+ deps: {
147
+ storage: ASYNC_LOCAL_STORAGE_TOKEN,
148
+ },
149
+ }),
85
150
  ],
86
151
  })
87
152
  ], LogModule);
package/lib/server.js CHANGED
@@ -58,6 +58,32 @@ function factory({ environmentManager, loggerInitHooks }) {
58
58
  }
59
59
  return logger;
60
60
  }
61
+ /**
62
+ * At server-side, when using LOGGER_SHARED_CONTEXT, new properties will be stored in current
63
+ * AsyncLocalStorage context (which is unique for each user request).
64
+ * This extension will read current properties from context, it allows us to automatically bind
65
+ * user-specific properties (user-agent, ip, etc.) to all logs, called in complete different places in application code.
66
+ */
67
+ class LoggerSharedContextExtension {
68
+ constructor({ storage }) {
69
+ this.storage = storage;
70
+ }
71
+ extend(logObj) {
72
+ var _a;
73
+ const state = (_a = this.storage.getStore()) === null || _a === void 0 ? void 0 : _a.logger;
74
+ if (state) {
75
+ state.forEach((value, key) => {
76
+ const keyExist = key in logObj;
77
+ const valueIsNotEmpty = typeof value !== 'undefined';
78
+ if (!keyExist && valueIsNotEmpty) {
79
+ // eslint-disable-next-line no-param-reassign
80
+ logObj[key] = value;
81
+ }
82
+ });
83
+ }
84
+ return logObj;
85
+ }
86
+ }
61
87
  exports.LogModule = class LogModule {
62
88
  };
63
89
  exports.LogModule = tslib.__decorate([
@@ -91,6 +117,45 @@ exports.LogModule = tslib.__decorate([
91
117
  ],
92
118
  multi: true,
93
119
  },
120
+ core.provide({
121
+ provide: tokensCommon.LOGGER_INIT_HOOK,
122
+ multi: true,
123
+ scope: core.Scope.SINGLETON,
124
+ useFactory: ({ storage }) => {
125
+ const loggerSharedContextExtension = new LoggerSharedContextExtension({ storage });
126
+ return (loggerInstance) => {
127
+ return loggerInstance.addExtension(loggerSharedContextExtension);
128
+ };
129
+ },
130
+ deps: {
131
+ storage: tokensCommon.ASYNC_LOCAL_STORAGE_TOKEN,
132
+ },
133
+ }),
134
+ core.provide({
135
+ provide: tokensCommon.LOGGER_SHARED_CONTEXT,
136
+ scope: core.Scope.SINGLETON,
137
+ useFactory: ({ storage }) => {
138
+ return {
139
+ get(key) {
140
+ var _a, _b;
141
+ return (_b = (_a = storage.getStore()) === null || _a === void 0 ? void 0 : _a.logger) === null || _b === void 0 ? void 0 : _b.get(key);
142
+ },
143
+ set(key, value) {
144
+ const store = storage.getStore();
145
+ if (!store) {
146
+ return;
147
+ }
148
+ if (!(store === null || store === void 0 ? void 0 : store.logger)) {
149
+ store.logger = new Map();
150
+ }
151
+ store.logger.set(key, value);
152
+ },
153
+ };
154
+ },
155
+ deps: {
156
+ storage: tokensCommon.ASYNC_LOCAL_STORAGE_TOKEN,
157
+ },
158
+ }),
94
159
  ],
95
160
  })
96
161
  ], exports.LogModule);
package/lib/types.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import '@tramvai/tokens-common';
2
+ declare module '@tramvai/tokens-common' {
3
+ interface AsyncLocalStorageState {
4
+ logger?: Map<string, any>;
5
+ }
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-log",
3
- "version": "2.160.19",
3
+ "version": "2.160.25",
4
4
  "description": "",
5
5
  "browser": "lib/browser.js",
6
6
  "main": "lib/server.js",
@@ -22,12 +22,12 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@tinkoff/utils": "^2.1.2",
25
- "@tramvai/core": "2.160.19",
26
- "@tramvai/module-environment": "2.160.19",
27
- "@tramvai/papi": "2.160.19",
28
- "@tramvai/state": "2.160.19",
29
- "@tramvai/tokens-common": "2.160.19",
30
- "@tramvai/tokens-server": "2.160.19",
25
+ "@tramvai/core": "2.160.25",
26
+ "@tramvai/module-environment": "2.160.25",
27
+ "@tramvai/papi": "2.160.25",
28
+ "@tramvai/state": "2.160.25",
29
+ "@tramvai/tokens-common": "2.160.25",
30
+ "@tramvai/tokens-server": "2.160.25",
31
31
  "std-env": "^2.2.1",
32
32
  "tslib": "^2.4.0"
33
33
  },