@gyramais/log-transport 0.1.0 → 0.2.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/README.md +25 -12
- package/dist/fatal-handlers.d.ts +1 -4
- package/dist/fatal-handlers.d.ts.map +1 -1
- package/dist/fatal-handlers.js.map +1 -1
- package/dist/logger.d.ts +17 -5
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +32 -6
- package/dist/logger.js.map +1 -1
- package/dist/options.d.ts +6 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js.map +1 -1
- package/package.json +1 -1
- package/src/fatal-handlers.ts +2 -5
- package/src/logger.ts +46 -6
- package/src/options.ts +29 -0
package/README.md
CHANGED
|
@@ -5,22 +5,29 @@ partir de configuração explícita, e registra exceção fatal com flush antes
|
|
|
5
5
|
exit.
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from '@gyramais/log-transport';
|
|
13
|
-
|
|
14
|
-
const { logger, lokiTransport } = buildNestLogger({
|
|
15
|
-
service: 'gyra-core', // obrigatório
|
|
8
|
+
import { buildNestLogger } from '@gyramais/log-transport';
|
|
9
|
+
|
|
10
|
+
const { logger } = buildNestLogger({
|
|
11
|
+
service: 'gyra-core', // obrigatório
|
|
16
12
|
level: 'debug',
|
|
17
13
|
pretty: false,
|
|
18
14
|
loki: { host: 'http://loki:3100', basicAuth: '...' },
|
|
15
|
+
redirectConsole: true, // opt-in: troca os métodos de `console`
|
|
16
|
+
fatalHandlers: true, // opt-in: instala uncaughtException/unhandledRejection
|
|
19
17
|
});
|
|
20
|
-
|
|
21
|
-
registerFatalHandlers(logger, lokiTransport);
|
|
22
18
|
```
|
|
23
19
|
|
|
20
|
+
Uma chamada. Os dois efeitos de processo continuam **opt-in** — você escreve `true`,
|
|
21
|
+
não herda nada por importar o pacote — mas não exigem mais uma chamada separada com
|
|
22
|
+
`logger` e `lokiTransport` costurados na mão.
|
|
23
|
+
|
|
24
|
+
Sem essas duas opções, **nada no processo é tocado**: `console` intacto, nenhum
|
|
25
|
+
handler instalado.
|
|
26
|
+
|
|
27
|
+
`registerFatalHandlers` e `redirectConsoleToNestLogger` continuam exportados, para
|
|
28
|
+
quem precisar de controle fino (ordem, opções, ou instalar sobre um logger que veio
|
|
29
|
+
de outro lugar).
|
|
30
|
+
|
|
24
31
|
## Serviço com mais de um logger
|
|
25
32
|
|
|
26
33
|
Se o serviço monta **vários loggers no mesmo processo**, crie o transport uma vez e
|
|
@@ -37,9 +44,15 @@ const lokiTransport = createLokiTransport({
|
|
|
37
44
|
basicAuth: process.env.LOKI_BASIC_AUTH,
|
|
38
45
|
});
|
|
39
46
|
|
|
40
|
-
|
|
47
|
+
// peça os efeitos de processo em UM dos loggers
|
|
48
|
+
const { logger } = buildNestLogger({
|
|
49
|
+
service: 'gyra-core',
|
|
50
|
+
lokiTransport,
|
|
51
|
+
redirectConsole: true,
|
|
52
|
+
fatalHandlers: true,
|
|
53
|
+
});
|
|
41
54
|
|
|
42
|
-
// e o mesmo transport nos outros
|
|
55
|
+
// e o mesmo transport nos outros, sem repetir os efeitos
|
|
43
56
|
const rmqLogger = buildNestLogger({ service: 'gyra-core', lokiTransport }).logger;
|
|
44
57
|
```
|
|
45
58
|
|
package/dist/fatal-handlers.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { LoggerService } from '@nestjs/common';
|
|
2
2
|
import LokiTransport = require('winston-loki');
|
|
3
|
-
|
|
4
|
-
flushTimeoutMs?: number;
|
|
5
|
-
exit?: (code: number) => void;
|
|
6
|
-
}
|
|
3
|
+
import type { FatalHandlersOptions } from './options';
|
|
7
4
|
/**
|
|
8
5
|
* Entrega ao Loki o que está bufferizado e só então devolve o controle,
|
|
9
6
|
* desistindo depois de `timeoutMs`. Nunca lança: no caminho de saída do
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fatal-handlers.d.ts","sourceRoot":"","sources":["../src/fatal-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fatal-handlers.d.ts","sourceRoot":"","sources":["../src/fatal-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAgCtD;;;;;;;;;;GAUG;AACH,QAAA,MAAM,kBAAkB,GACtB,WAAW,aAAa,GAAG,SAAS,EACpC,kBAA4B,KAC3B,OAAO,CAAC,IAAI,CA6Bd,CAAC;AAmDF,QAAA,MAAM,qBAAqB,GACzB,QAAQ,aAAa,EACrB,WAAW,aAAa,GAAG,SAAS,EACpC,UAAS,oBAAyB,KACjC,CAAC,MAAM,IAAI,CA6Fb,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fatal-handlers.js","sourceRoot":"","sources":["../src/fatal-handlers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fatal-handlers.js","sourceRoot":"","sources":["../src/fatal-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { LoggerService } from '@nestjs/common';
|
|
|
3
3
|
import { LoggerOptions, LokiOptions } from './options';
|
|
4
4
|
export interface BuiltLogger {
|
|
5
5
|
logger: LoggerService;
|
|
6
|
+
unregisterFatalHandlers?: () => void;
|
|
6
7
|
lokiTransport?: LokiTransport;
|
|
7
8
|
}
|
|
8
9
|
export interface CreateLokiTransportOptions extends LokiOptions {
|
|
@@ -25,12 +26,23 @@ export interface CreateLokiTransportOptions extends LokiOptions {
|
|
|
25
26
|
*/
|
|
26
27
|
export declare const createLokiTransport: (options: CreateLokiTransportOptions) => LokiTransport;
|
|
27
28
|
/**
|
|
28
|
-
* Monta o logger do Nest com os transports pedidos e
|
|
29
|
-
*
|
|
29
|
+
* Monta o logger do Nest com os transports pedidos e, se pedido, instala os
|
|
30
|
+
* efeitos de processo.
|
|
30
31
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* processo
|
|
32
|
+
* Por default NÃO instala nada: sem `redirectConsole` e sem `fatalHandlers`, nada
|
|
33
|
+
* no processo é tocado. Esses dois mexem no ciclo de vida (o que `console.log`
|
|
34
|
+
* faz, como o processo morre), então continuam sendo escolha declarada do
|
|
35
|
+
* consumidor — só não exigem mais uma chamada separada cada.
|
|
36
|
+
*
|
|
37
|
+
* const { logger } = buildNestLogger({
|
|
38
|
+
* service: 'gyra-core',
|
|
39
|
+
* loki: { host },
|
|
40
|
+
* redirectConsole: true,
|
|
41
|
+
* fatalHandlers: true,
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* Num serviço com vários loggers, peça `fatalHandlers` em UM deles — os handlers
|
|
45
|
+
* são recurso único do processo.
|
|
34
46
|
*/
|
|
35
47
|
export declare const buildNestLogger: (options: LoggerOptions) => BuiltLogger;
|
|
36
48
|
//# sourceMappingURL=logger.d.ts.map
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AA4BA,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AA4BA,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,OAAO,EAKL,aAAa,EACb,WAAW,EACZ,MAAM,WAAW,CAAC;AAQnB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IAOtB,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IAOrC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAoED,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,0BAA0B,KAClC,aAeF,CAAC;AAkCF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,KAAG,WAwExD,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -29,6 +29,8 @@ const winston_1 = require("winston");
|
|
|
29
29
|
const nest_winston_1 = require("nest-winston");
|
|
30
30
|
const LokiTransport = require("winston-loki");
|
|
31
31
|
const os_1 = require("os");
|
|
32
|
+
const console_redirect_1 = require("./console-redirect");
|
|
33
|
+
const fatal_handlers_1 = require("./fatal-handlers");
|
|
32
34
|
const options_1 = require("./options");
|
|
33
35
|
const formatMeta = (meta) => {
|
|
34
36
|
const splat = meta[Symbol.for('splat')];
|
|
@@ -125,12 +127,23 @@ const buildLokiTransport = (loki, labels, lineFormat) => new LokiTransport({
|
|
|
125
127
|
})}\n`),
|
|
126
128
|
});
|
|
127
129
|
/**
|
|
128
|
-
* Monta o logger do Nest com os transports pedidos e
|
|
129
|
-
*
|
|
130
|
+
* Monta o logger do Nest com os transports pedidos e, se pedido, instala os
|
|
131
|
+
* efeitos de processo.
|
|
130
132
|
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* processo
|
|
133
|
+
* Por default NÃO instala nada: sem `redirectConsole` e sem `fatalHandlers`, nada
|
|
134
|
+
* no processo é tocado. Esses dois mexem no ciclo de vida (o que `console.log`
|
|
135
|
+
* faz, como o processo morre), então continuam sendo escolha declarada do
|
|
136
|
+
* consumidor — só não exigem mais uma chamada separada cada.
|
|
137
|
+
*
|
|
138
|
+
* const { logger } = buildNestLogger({
|
|
139
|
+
* service: 'gyra-core',
|
|
140
|
+
* loki: { host },
|
|
141
|
+
* redirectConsole: true,
|
|
142
|
+
* fatalHandlers: true,
|
|
143
|
+
* });
|
|
144
|
+
*
|
|
145
|
+
* Num serviço com vários loggers, peça `fatalHandlers` em UM deles — os handlers
|
|
146
|
+
* são recurso único do processo.
|
|
134
147
|
*/
|
|
135
148
|
const buildNestLogger = (options) => {
|
|
136
149
|
const lineFormat = options.pretty
|
|
@@ -170,7 +183,20 @@ const buildNestLogger = (options) => {
|
|
|
170
183
|
level: options.level ?? options_1.DEFAULT_LEVEL,
|
|
171
184
|
transports: transportsList,
|
|
172
185
|
});
|
|
173
|
-
|
|
186
|
+
/*
|
|
187
|
+
Os dois efeitos de processo continuam OPT-IN — o consumidor escreve `true`, não
|
|
188
|
+
herda nada por importar o pacote. O que mudou na 0.2.0 foi só a ergonomia: eram
|
|
189
|
+
duas chamadas extras com o `logger` e o `lokiTransport` costurados na mão, e o
|
|
190
|
+
`pretty` repetido. "Explícito" não precisava significar "separado".
|
|
191
|
+
*/
|
|
192
|
+
if (options.redirectConsole) {
|
|
193
|
+
(0, console_redirect_1.redirectConsoleToNestLogger)({ pretty: options.pretty });
|
|
194
|
+
}
|
|
195
|
+
let unregisterFatalHandlers;
|
|
196
|
+
if (options.fatalHandlers) {
|
|
197
|
+
unregisterFatalHandlers = (0, fatal_handlers_1.registerFatalHandlers)(logger, lokiTransport, options.fatalHandlers === true ? {} : options.fatalHandlers);
|
|
198
|
+
}
|
|
199
|
+
return { logger, lokiTransport, unregisterFatalHandlers };
|
|
174
200
|
};
|
|
175
201
|
exports.buildNestLogger = buildNestLogger;
|
|
176
202
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD;;;;;;;;;;;;;;;;;;;;;;EAsBE;AAEF,qCAAsD;AACtD,+CAA6C;AAC7C,8CAA+C;AAE/C,2BAA8B;AAE9B,uCAOmB;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -12,6 +12,10 @@ export interface LokiOptions {
|
|
|
12
12
|
timeout?: number;
|
|
13
13
|
labels?: Record<string, string>;
|
|
14
14
|
}
|
|
15
|
+
export interface FatalHandlersOptions {
|
|
16
|
+
flushTimeoutMs?: number;
|
|
17
|
+
exit?: (code: number) => void;
|
|
18
|
+
}
|
|
15
19
|
export interface FileOptions {
|
|
16
20
|
filename: string;
|
|
17
21
|
}
|
|
@@ -24,6 +28,8 @@ export interface LoggerOptions {
|
|
|
24
28
|
loki?: LokiOptions;
|
|
25
29
|
lokiTransport?: LokiTransportLike;
|
|
26
30
|
file?: FileOptions;
|
|
31
|
+
redirectConsole?: boolean;
|
|
32
|
+
fatalHandlers?: boolean | FatalHandlersOptions;
|
|
27
33
|
}
|
|
28
34
|
export declare const DEFAULT_APP_LABEL = "saas";
|
|
29
35
|
export declare const DEFAULT_LEVEL = "debug";
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,iBAAiB;IAahC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;IAC1E,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;CAC1E;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAS5B,OAAO,EAAE,MAAM,CAAC;IAOhB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,QAAQ,CAAC,EAAE,MAAM,CAAC;IASlB,MAAM,CAAC,EAAE,OAAO,CAAC;IAUjB,IAAI,CAAC,EAAE,WAAW,CAAC;IAkBnB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAMlC,IAAI,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,iBAAiB;IAahC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;IAC1E,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,CAAC;CAC1E;AAED,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAS5B,OAAO,EAAE,MAAM,CAAC;IAOhB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,QAAQ,CAAC,EAAE,MAAM,CAAC;IASlB,MAAM,CAAC,EAAE,OAAO,CAAC;IAUjB,IAAI,CAAC,EAAE,WAAW,CAAC;IAkBnB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAMlC,IAAI,CAAC,EAAE,WAAW,CAAC;IAWnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAa1B,aAAa,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAChD;AAED,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,aAAa,UAAU,CAAC;AAGrC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,eAAO,MAAM,uBAAuB,QAAQ,CAAC"}
|
package/dist/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;AAgKW,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,aAAa,GAAG,OAAO,CAAC;AAErC,gEAAgE;AACnD,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAElC,QAAA,uBAAuB,GAAG,KAAK,CAAC"}
|
package/package.json
CHANGED
package/src/fatal-handlers.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { LoggerService } from '@nestjs/common';
|
|
2
2
|
import LokiTransport = require('winston-loki');
|
|
3
3
|
|
|
4
|
+
import type { FatalHandlersOptions } from './options';
|
|
5
|
+
|
|
4
6
|
/*
|
|
5
7
|
O flush no caminho do crash é limitado no tempo de propósito: um Loki
|
|
6
8
|
indisponível não pode impedir o pod de morrer e reiniciar.
|
|
@@ -9,11 +11,6 @@ const FLUSH_TIMEOUT_MS = 2000;
|
|
|
9
11
|
|
|
10
12
|
type FatalOrigin = 'uncaughtException' | 'unhandledRejection';
|
|
11
13
|
|
|
12
|
-
interface FatalHandlersOptions {
|
|
13
|
-
flushTimeoutMs?: number;
|
|
14
|
-
exit?: (code: number) => void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
14
|
/*
|
|
18
15
|
Winston entrega a linha ao transport por stream, num tick posterior ao
|
|
19
16
|
`logger.error()`. Sem esperar por essa entrega, o batch ainda está vazio quando
|
package/src/logger.ts
CHANGED
|
@@ -30,6 +30,8 @@ import LokiTransport = require('winston-loki');
|
|
|
30
30
|
import type { LoggerService } from '@nestjs/common';
|
|
31
31
|
import { hostname } from 'os';
|
|
32
32
|
|
|
33
|
+
import { redirectConsoleToNestLogger } from './console-redirect';
|
|
34
|
+
import { registerFatalHandlers } from './fatal-handlers';
|
|
33
35
|
import {
|
|
34
36
|
DEFAULT_APP_LABEL,
|
|
35
37
|
DEFAULT_LEVEL,
|
|
@@ -48,6 +50,13 @@ type LokiShipError = Error & { statusCode?: number };
|
|
|
48
50
|
export interface BuiltLogger {
|
|
49
51
|
logger: LoggerService;
|
|
50
52
|
|
|
53
|
+
/*
|
|
54
|
+
Presente somente quando `options.fatalHandlers` foi pedido. Desfaz o registro
|
|
55
|
+
e libera o guard por processo — em produção o processo não desregistra, ele
|
|
56
|
+
morre; isto existe para teste.
|
|
57
|
+
*/
|
|
58
|
+
unregisterFatalHandlers?: () => void;
|
|
59
|
+
|
|
51
60
|
/*
|
|
52
61
|
Presente somente quando `options.loki` foi informado. Quem trata exceção fatal
|
|
53
62
|
precisa dele para dar flush antes do exit — sem isso a stack do crash nunca sai
|
|
@@ -193,12 +202,23 @@ const buildLokiTransport = (
|
|
|
193
202
|
});
|
|
194
203
|
|
|
195
204
|
/**
|
|
196
|
-
* Monta o logger do Nest com os transports pedidos e
|
|
197
|
-
*
|
|
205
|
+
* Monta o logger do Nest com os transports pedidos e, se pedido, instala os
|
|
206
|
+
* efeitos de processo.
|
|
207
|
+
*
|
|
208
|
+
* Por default NÃO instala nada: sem `redirectConsole` e sem `fatalHandlers`, nada
|
|
209
|
+
* no processo é tocado. Esses dois mexem no ciclo de vida (o que `console.log`
|
|
210
|
+
* faz, como o processo morre), então continuam sendo escolha declarada do
|
|
211
|
+
* consumidor — só não exigem mais uma chamada separada cada.
|
|
198
212
|
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
213
|
+
* const { logger } = buildNestLogger({
|
|
214
|
+
* service: 'gyra-core',
|
|
215
|
+
* loki: { host },
|
|
216
|
+
* redirectConsole: true,
|
|
217
|
+
* fatalHandlers: true,
|
|
218
|
+
* });
|
|
219
|
+
*
|
|
220
|
+
* Num serviço com vários loggers, peça `fatalHandlers` em UM deles — os handlers
|
|
221
|
+
* são recurso único do processo.
|
|
202
222
|
*/
|
|
203
223
|
export const buildNestLogger = (options: LoggerOptions): BuiltLogger => {
|
|
204
224
|
const lineFormat = options.pretty
|
|
@@ -251,5 +271,25 @@ export const buildNestLogger = (options: LoggerOptions): BuiltLogger => {
|
|
|
251
271
|
transports: transportsList,
|
|
252
272
|
});
|
|
253
273
|
|
|
254
|
-
|
|
274
|
+
/*
|
|
275
|
+
Os dois efeitos de processo continuam OPT-IN — o consumidor escreve `true`, não
|
|
276
|
+
herda nada por importar o pacote. O que mudou na 0.2.0 foi só a ergonomia: eram
|
|
277
|
+
duas chamadas extras com o `logger` e o `lokiTransport` costurados na mão, e o
|
|
278
|
+
`pretty` repetido. "Explícito" não precisava significar "separado".
|
|
279
|
+
*/
|
|
280
|
+
if (options.redirectConsole) {
|
|
281
|
+
redirectConsoleToNestLogger({ pretty: options.pretty });
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
let unregisterFatalHandlers: (() => void) | undefined;
|
|
285
|
+
|
|
286
|
+
if (options.fatalHandlers) {
|
|
287
|
+
unregisterFatalHandlers = registerFatalHandlers(
|
|
288
|
+
logger,
|
|
289
|
+
lokiTransport,
|
|
290
|
+
options.fatalHandlers === true ? {} : options.fatalHandlers,
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return { logger, lokiTransport, unregisterFatalHandlers };
|
|
255
295
|
};
|
package/src/options.ts
CHANGED
|
@@ -68,6 +68,11 @@ export interface LokiOptions {
|
|
|
68
68
|
labels?: Record<string, string>;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
export interface FatalHandlersOptions {
|
|
72
|
+
flushTimeoutMs?: number;
|
|
73
|
+
exit?: (code: number) => void;
|
|
74
|
+
}
|
|
75
|
+
|
|
71
76
|
export interface FileOptions {
|
|
72
77
|
filename: string;
|
|
73
78
|
}
|
|
@@ -142,6 +147,30 @@ export interface LoggerOptions {
|
|
|
142
147
|
original: havendo `loki`, o arquivo é ignorado.
|
|
143
148
|
*/
|
|
144
149
|
file?: FileOptions;
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
Redireciona `console.*` para o Logger do Nest, para que biblioteca de terceiro
|
|
153
|
+
e código legado que escrevem em `console` também cheguem aos transports.
|
|
154
|
+
|
|
155
|
+
Continua sendo OPT-IN — trocar os métodos de `console` é efeito colateral global
|
|
156
|
+
do processo, e importar o pacote não deve mudar isso sozinho. O que mudou em
|
|
157
|
+
relação à 0.1.0 é só a ergonomia: o consumidor declara aqui em vez de fazer uma
|
|
158
|
+
segunda chamada e repetir o `pretty`.
|
|
159
|
+
*/
|
|
160
|
+
redirectConsole?: boolean;
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
Instala os handlers de exceção fatal, com o transport que esta construção usa.
|
|
164
|
+
|
|
165
|
+
`true` para o comportamento padrão, ou um objeto para ajustar (`flushTimeoutMs`,
|
|
166
|
+
`exit`) — o que os testes precisam. O `unregister` volta em
|
|
167
|
+
`unregisterFatalHandlers`, no retorno.
|
|
168
|
+
|
|
169
|
+
Também segue opt-in, e pelo mesmo motivo: mexe no ciclo de vida do processo.
|
|
170
|
+
Num serviço com vários loggers, peça isto em UM deles — os handlers são recurso
|
|
171
|
+
único do processo, e a segunda chamada é ignorada com aviso.
|
|
172
|
+
*/
|
|
173
|
+
fatalHandlers?: boolean | FatalHandlersOptions;
|
|
145
174
|
}
|
|
146
175
|
|
|
147
176
|
export const DEFAULT_APP_LABEL = 'saas';
|