@tramvai/module-log 3.5.0 → 3.9.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/lib/browser.js +23 -4
- package/lib/devLogs.browser.js +0 -2
- package/lib/devLogs.es.js +0 -2
- package/lib/devLogs.js +0 -2
- package/lib/server.d.ts +1 -0
- package/lib/server.es.js +67 -2
- package/lib/server.js +65 -0
- package/lib/types.d.ts +7 -0
- package/package.json +8 -8
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);
|
package/lib/devLogs.browser.js
CHANGED
|
@@ -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
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-log",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -18,16 +18,16 @@
|
|
|
18
18
|
"watch": "tsc -w"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@tinkoff/logger": "0.10.
|
|
21
|
+
"@tinkoff/logger": "0.10.169"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"@tinkoff/utils": "^2.1.2",
|
|
25
|
-
"@tramvai/core": "3.
|
|
26
|
-
"@tramvai/module-environment": "3.
|
|
27
|
-
"@tramvai/papi": "3.
|
|
28
|
-
"@tramvai/state": "3.
|
|
29
|
-
"@tramvai/tokens-common": "3.
|
|
30
|
-
"@tramvai/tokens-server": "3.
|
|
25
|
+
"@tramvai/core": "3.9.0",
|
|
26
|
+
"@tramvai/module-environment": "3.9.0",
|
|
27
|
+
"@tramvai/papi": "3.9.0",
|
|
28
|
+
"@tramvai/state": "3.9.0",
|
|
29
|
+
"@tramvai/tokens-common": "3.9.0",
|
|
30
|
+
"@tramvai/tokens-server": "3.9.0",
|
|
31
31
|
"std-env": "^2.2.1",
|
|
32
32
|
"tslib": "^2.4.0"
|
|
33
33
|
},
|