@gyramais/log-transport 0.2.0 → 0.3.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 CHANGED
@@ -18,8 +18,8 @@ const { logger } = buildNestLogger({
18
18
  ```
19
19
 
20
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.
21
+ não herda nada por importar o pacote — mas não exigem mais uma chamada separada cada,
22
+ com o `logger` costurado na mão.
23
23
 
24
24
  Sem essas duas opções, **nada no processo é tocado**: `console` intacto, nenhum
25
25
  handler instalado.
@@ -28,49 +28,40 @@ handler instalado.
28
28
  quem precisar de controle fino (ordem, opções, ou instalar sobre um logger que veio
29
29
  de outro lugar).
30
30
 
31
- ## Serviço com mais de um logger
31
+ ## Um logger por processo
32
32
 
33
- Se o serviço monta **vários loggers no mesmo processo**, crie o transport uma vez e
34
- compartilhe. O worker do gyra-core monta quatro — um para a app e três para
35
- conexões RMQ (`src/main.worker.ts`):
33
+ Construa **um** logger e passe a referência adiante para a app e para cada conexão
34
+ de mensageria:
36
35
 
37
36
  ```ts
38
- import { createLokiTransport, buildNestLogger } from '@gyramais/log-transport';
39
-
40
- // UM transport para o processo inteiro
41
- const lokiTransport = createLokiTransport({
42
- service: 'gyra-core',
43
- host: process.env.LOKI_URL,
44
- basicAuth: process.env.LOKI_BASIC_AUTH,
45
- });
46
-
47
- // peça os efeitos de processo em UM dos loggers
48
37
  const { logger } = buildNestLogger({
49
38
  service: 'gyra-core',
50
- lokiTransport,
39
+ loki: { host: process.env.LOKI_URL, basicAuth: process.env.LOKI_BASIC_AUTH },
51
40
  redirectConsole: true,
52
41
  fatalHandlers: true,
53
42
  });
54
43
 
55
- // e o mesmo transport nos outros, sem repetir os efeitos
56
- const rmqLogger = buildNestLogger({ service: 'gyra-core', lokiTransport }).logger;
44
+ const app = await NestFactory.create(AppModule, { logger });
45
+
46
+ app.connectMicroservice({ transport: Transport.RMQ, logger, options: { ... } });
47
+ app.connectMicroservice({ transport: Transport.RMQ, logger, options: { ... } });
57
48
  ```
58
49
 
59
- Não é conveniência, é correção: com um transport por logger **um batcher por
60
- logger**, e o `registerFatalHandlers` drena apenas o que recebeu — as linhas
61
- bufferizadas nos outros morrem com o processo, que é o sintoma que a entrega
62
- confiável existe para impedir.
63
-
64
- Passar `loki` e `lokiTransport` juntos lança erro: um pede transport novo, o outro
65
- pede reuso, e escolher em silêncio deixaria o consumidor com dois batchers sem
66
- saber.
67
-
68
- **`registerFatalHandlers` é chamado UMA vez por processo**, com o transport
69
- compartilhado não um por logger. Handler de `uncaughtException` é recurso único
70
- do processo: registros duplicados produziriam linhas `[FATAL]` repetidas e flushes
71
- concorrentes no mesmo transport. O pacote ignora a chamada extra e emite
72
- `[FATAL-HANDLERS-DUP]` no stdout, mas o certo é chamar uma vez. Ele devolve uma
73
- função de `unregister`, útil em teste.
50
+ Não é estilo, é correção: **cada construção cria seu próprio lote pendente**. N
51
+ loggers são N lotes, e a descarga de exceção fatal alcança um deles — as linhas
52
+ acumuladas nos outros morrem com o processo, que é o sintoma que a entrega confiável
53
+ existe para impedir.
54
+
55
+ Vale dizer de onde isso vem: os 15 serviços chamavam o `LoggerFactory()` mais de uma
56
+ vez (13 dos 15; o gyra-integration, seis vezes). Como a fábrica não recebia
57
+ argumento, todas as chamadas produziam loggers idênticos — era cópia de código, não
58
+ necessidade. Se você está construindo o segundo logger, pergunte primeiro por quê.
59
+
60
+ **`registerFatalHandlers` é chamado uma vez por processo.** Handler de
61
+ `uncaughtException` é recurso único do processo: registros duplicados produziriam
62
+ linhas `[FATAL]` repetidas e descargas concorrentes. O pacote ignora a chamada extra
63
+ e emite `[FATAL-HANDLERS-DUP]`, mas o certo é chamar uma vez ou usar
64
+ `fatalHandlers: true`, que faz isso.
74
65
 
75
66
  ## O pacote não lê `process.env`
76
67
 
@@ -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;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
+ {"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;AAoDF,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"}
@@ -89,9 +89,10 @@ const describeReason = (reason) => {
89
89
  linhas `[FATAL]`, quatro flushes concorrentes no mesmo transport e quatro
90
90
  chamadas de exit.
91
91
 
92
- O risco cresceu quando o pacote passou a suportar vários loggers com um
93
- transport compartilhado (ver `createLokiTransport`): fica natural registrar um
94
- handler por logger.
92
+ O risco aparece em serviço que constrói mais de um logger o que, na frota, era
93
+ o padrão: 13 dos 15 repos chamavam a fábrica mais de uma vez. Nesses, registrar um
94
+ handler por logger é o erro natural. A orientação é construir UM logger por
95
+ processo, mas o guard existe para o caso de alguém não seguir.
95
96
 
96
97
  Este é o único estado global do pacote, e a distinção importa: ele descreve o
97
98
  PROCESSO — se os handlers já estão instalados nele —, não configuração. Config
@@ -113,8 +114,8 @@ const registerFatalHandlers = (logger, transport, options = {}) => {
113
114
  process.stdout.write(`${JSON.stringify({
114
115
  level: 'warn',
115
116
  message: '[FATAL-HANDLERS-DUP] registerFatalHandlers chamado mais de uma vez ' +
116
- 'neste processo; a chamada extra foi ignorada. Chame uma vez, com o ' +
117
- 'transport compartilhado.',
117
+ 'neste processo; a chamada extra foi ignorada. Construa UM logger por ' +
118
+ 'processo e registre uma vez.',
118
119
  timestamp: new Date().toISOString(),
119
120
  })}\n`);
120
121
  return () => undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fatal-handlers.js","sourceRoot":"","sources":["../src/fatal-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fatal-handlers.js","sourceRoot":"","sources":["../src/fatal-handlers.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- export { buildNestLogger, createLokiTransport } from './logger';
2
- export type { BuiltLogger, CreateLokiTransportOptions } from './logger';
1
+ export { buildNestLogger } from './logger';
2
+ export type { BuiltLogger } from './logger';
3
3
  export { redirectConsoleToNestLogger } from './console-redirect';
4
4
  export type { ConsoleRedirectOptions } from './console-redirect';
5
5
  export { registerFatalHandlers, flushLokiTransport } from './fatal-handlers';
6
6
  export { DEFAULT_APP_LABEL, DEFAULT_LEVEL, DEFAULT_LOKI_INTERVAL_SECONDS, DEFAULT_LOKI_TIMEOUT_MS, } from './options';
7
- export type { LoggerOptions, LokiOptions, FileOptions, LokiTransportLike, } from './options';
7
+ export type { LoggerOptions, LokiOptions, FileOptions, FatalHandlersOptions, } from './options';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -13,10 +13,9 @@
13
13
  `dist/` e fariam um grep de auditoria acusar o pacote de ler ambiente.
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.DEFAULT_LOKI_TIMEOUT_MS = exports.DEFAULT_LOKI_INTERVAL_SECONDS = exports.DEFAULT_LEVEL = exports.DEFAULT_APP_LABEL = exports.flushLokiTransport = exports.registerFatalHandlers = exports.redirectConsoleToNestLogger = exports.createLokiTransport = exports.buildNestLogger = void 0;
16
+ exports.DEFAULT_LOKI_TIMEOUT_MS = exports.DEFAULT_LOKI_INTERVAL_SECONDS = exports.DEFAULT_LEVEL = exports.DEFAULT_APP_LABEL = exports.flushLokiTransport = exports.registerFatalHandlers = exports.redirectConsoleToNestLogger = exports.buildNestLogger = void 0;
17
17
  var logger_1 = require("./logger");
18
18
  Object.defineProperty(exports, "buildNestLogger", { enumerable: true, get: function () { return logger_1.buildNestLogger; } });
19
- Object.defineProperty(exports, "createLokiTransport", { enumerable: true, get: function () { return logger_1.createLokiTransport; } });
20
19
  var console_redirect_1 = require("./console-redirect");
21
20
  Object.defineProperty(exports, "redirectConsoleToNestLogger", { enumerable: true, get: function () { return console_redirect_1.redirectConsoleToNestLogger; } });
22
21
  var fatal_handlers_1 = require("./fatal-handlers");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;EAYE;;;AAEF,mCAAgE;AAAvD,yGAAA,eAAe,OAAA;AAAE,6GAAA,mBAAmB,OAAA;AAG7C,uDAAiE;AAAxD,+HAAA,2BAA2B,OAAA;AAGpC,mDAA6E;AAApE,uHAAA,qBAAqB,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAElD,qCAKmB;AAJjB,4GAAA,iBAAiB,OAAA;AACjB,wGAAA,aAAa,OAAA;AACb,wHAAA,6BAA6B,OAAA;AAC7B,kHAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;EAYE;;;AAEF,mCAA2C;AAAlC,yGAAA,eAAe,OAAA;AAGxB,uDAAiE;AAAxD,+HAAA,2BAA2B,OAAA;AAGpC,mDAA6E;AAApE,uHAAA,qBAAqB,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAElD,qCAKmB;AAJjB,4GAAA,iBAAiB,OAAA;AACjB,wGAAA,aAAa,OAAA;AACb,wHAAA,6BAA6B,OAAA;AAC7B,kHAAA,uBAAuB,OAAA"}
package/dist/logger.d.ts CHANGED
@@ -1,30 +1,11 @@
1
1
  import LokiTransport = require('winston-loki');
2
2
  import type { LoggerService } from '@nestjs/common';
3
- import { LoggerOptions, LokiOptions } from './options';
3
+ import { LoggerOptions } from './options';
4
4
  export interface BuiltLogger {
5
5
  logger: LoggerService;
6
6
  unregisterFatalHandlers?: () => void;
7
7
  lokiTransport?: LokiTransport;
8
8
  }
9
- export interface CreateLokiTransportOptions extends LokiOptions {
10
- service: string;
11
- app?: string;
12
- instance?: string;
13
- pretty?: boolean;
14
- }
15
- /**
16
- * Constrói o transport do Loki isoladamente, para o consumidor COMPARTILHAR um
17
- * único batcher entre vários loggers do mesmo processo.
18
- *
19
- * Use isto quando o serviço monta mais de um logger — o worker do gyra-core monta
20
- * quatro. Com um transport por logger, cada um tem seu batcher, e o flush de
21
- * exceção fatal cobre só um deles.
22
- *
23
- * const lokiTransport = createLokiTransport({ service: 'gyra-core', host });
24
- * const { logger } = buildNestLogger({ service: 'gyra-core', lokiTransport });
25
- * // ...e o mesmo `lokiTransport` nos outros loggers do processo
26
- */
27
- export declare const createLokiTransport: (options: CreateLokiTransportOptions) => LokiTransport;
28
9
  /**
29
10
  * Monta o logger do Nest com os transports pedidos e, se pedido, instala os
30
11
  * efeitos de processo.
@@ -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;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"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAmCA,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,OAAO,EAKL,aAAa,EAEd,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;AAoGD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,KAAG,WAwDxD,CAAC"}
package/dist/logger.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.buildNestLogger = exports.createLokiTransport = void 0;
4
+ exports.buildNestLogger = void 0;
5
5
  /*
6
6
  PROVENIÊNCIA: derivado de gyra-core/src/common/logger/LoggerFactory.ts na branch
7
7
  GYR-1555 (tag `backup/GYR-1555-pre-close`), onde o defeito de entrega ao Loki foi
@@ -15,12 +15,19 @@ exports.buildNestLogger = exports.createLokiTransport = void 0;
15
15
  para o handler de exceção fatal alcançá-lo; aqui ele volta no retorno, porque
16
16
  estado global no pacote é o mesmo problema de ler env com outra roupa.
17
17
 
18
- O singleton da fonte, porém, resolvia um problema real que o retorno sozinho
19
- não resolve: serviço que monta VÁRIOS loggers no mesmo processo o worker do
20
- gyra-core monta quatro teria um batcher por logger, e o flush de exceção
21
- fatal drenaria um deles. Para isso existe `createLokiTransport`: o
22
- consumidor cria o transport uma vez e passa o mesmo em `lokiTransport`. O
23
- compartilhamento fica explícito no call site, em vez de escondido no módulo.
18
+ Houve uma tentativa intermediária, e ela está registrada aqui porque o erro é
19
+ fácil de repetir: ao ver o worker do gyra-core construir QUATRO loggers, a
20
+ conclusão foi "eles precisam compartilhar um transport", e o pacote ganhou um
21
+ `createLokiTransport` para isso. Estava errado a pergunta certa era por que
22
+ havia quatro loggers.
23
+
24
+ Não havia motivo: o `LoggerFactory` original não recebia argumento, então as
25
+ quatro chamadas sempre produziram loggers idênticos. Era cópia de código. O
26
+ conserto é UM logger por processo, com o handle passado adiante — e aí não
27
+ existe transport para compartilhar. A opção foi removida na 0.3.0.
28
+
29
+ Se algum dia um serviço precisar de dois loggers com LABELS diferentes e um só
30
+ batcher, aí sim a opção volta a fazer sentido. Nenhum dos 15 tem esse caso.
24
31
  - O redirecionamento de `console.*` saiu para `console-redirect.ts`, como opt-in
25
32
  explícito: é efeito colateral de processo, e importar um pacote não deve mudar
26
33
  o que `console.log` faz.
@@ -82,30 +89,6 @@ const buildPrettyFormat = () => {
82
89
  });
83
90
  return winston_1.format.combine(winston_1.format.splat(), localFormat);
84
91
  };
85
- /**
86
- * Constrói o transport do Loki isoladamente, para o consumidor COMPARTILHAR um
87
- * único batcher entre vários loggers do mesmo processo.
88
- *
89
- * Use isto quando o serviço monta mais de um logger — o worker do gyra-core monta
90
- * quatro. Com um transport por logger, cada um tem seu batcher, e o flush de
91
- * exceção fatal cobre só um deles.
92
- *
93
- * const lokiTransport = createLokiTransport({ service: 'gyra-core', host });
94
- * const { logger } = buildNestLogger({ service: 'gyra-core', lokiTransport });
95
- * // ...e o mesmo `lokiTransport` nos outros loggers do processo
96
- */
97
- const createLokiTransport = (options) => {
98
- const { service, app, instance, pretty, ...loki } = options;
99
- return buildLokiTransport(loki, {
100
- service,
101
- app: app ?? options_1.DEFAULT_APP_LABEL,
102
- instance: instance ?? (0, os_1.hostname)(),
103
- ...loki.labels,
104
- }, pretty
105
- ? buildPrettyFormat()
106
- : winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json()));
107
- };
108
- exports.createLokiTransport = createLokiTransport;
109
92
  const buildLokiTransport = (loki, labels, lineFormat) => new LokiTransport({
110
93
  host: loki.host,
111
94
  basicAuth: loki.basicAuth,
@@ -149,25 +132,11 @@ const buildNestLogger = (options) => {
149
132
  const lineFormat = options.pretty
150
133
  ? buildPrettyFormat()
151
134
  : winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json());
152
- /*
153
- Passar os dois é ambíguo: um pede para construir um transport novo, o outro
154
- para reusar um existente. Falhar alto é melhor que escolher em silêncio e
155
- deixar o consumidor com dois batchers sem saber.
156
- */
157
- if (options.loki && options.lokiTransport) {
158
- throw new Error('[log-transport] `loki` e `lokiTransport` sao mutuamente exclusivos: ' +
159
- 'use `loki` para construir um transport novo, ou `lokiTransport` para ' +
160
- 'reusar um ja construido por createLokiTransport().');
161
- }
162
135
  const transportsList = [
163
136
  new winston_1.transports.Console({ format: lineFormat }),
164
137
  ];
165
138
  let lokiTransport;
166
- if (options.lokiTransport) {
167
- lokiTransport = options.lokiTransport;
168
- transportsList.push(lokiTransport);
169
- }
170
- else if (options.loki) {
139
+ if (options.loki) {
171
140
  lokiTransport = buildLokiTransport(options.loki, {
172
141
  service: options.service,
173
142
  app: options.app ?? options_1.DEFAULT_APP_LABEL,
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -1,10 +1,3 @@
1
- export interface LokiTransportLike {
2
- log?: unknown;
3
- flush?: () => Promise<void>;
4
- close?: () => void;
5
- once?: (event: string, listener: (...args: unknown[]) => void) => unknown;
6
- off?: (event: string, listener: (...args: unknown[]) => void) => unknown;
7
- }
8
1
  export interface LokiOptions {
9
2
  host: string;
10
3
  basicAuth?: string;
@@ -26,7 +19,6 @@ export interface LoggerOptions {
26
19
  instance?: string;
27
20
  pretty?: boolean;
28
21
  loki?: LokiOptions;
29
- lokiTransport?: LokiTransportLike;
30
22
  file?: FileOptions;
31
23
  redirectConsole?: boolean;
32
24
  fatalHandlers?: boolean | FatalHandlersOptions;
@@ -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,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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAiBA,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;IAYjB,IAAI,CAAC,EAAE,WAAW,CAAC;IAMnB,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"}
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;AAiHW,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gyramais/log-transport",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Entrega de log ao Loki e registro de excecao fatal para os servicos gyra-*",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -109,9 +109,10 @@ const describeReason = (
109
109
  linhas `[FATAL]`, quatro flushes concorrentes no mesmo transport e quatro
110
110
  chamadas de exit.
111
111
 
112
- O risco cresceu quando o pacote passou a suportar vários loggers com um
113
- transport compartilhado (ver `createLokiTransport`): fica natural registrar um
114
- handler por logger.
112
+ O risco aparece em serviço que constrói mais de um logger o que, na frota, era
113
+ o padrão: 13 dos 15 repos chamavam a fábrica mais de uma vez. Nesses, registrar um
114
+ handler por logger é o erro natural. A orientação é construir UM logger por
115
+ processo, mas o guard existe para o caso de alguém não seguir.
115
116
 
116
117
  Este é o único estado global do pacote, e a distinção importa: ele descreve o
117
118
  PROCESSO — se os handlers já estão instalados nele —, não configuração. Config
@@ -145,8 +146,8 @@ const registerFatalHandlers = (
145
146
  level: 'warn',
146
147
  message:
147
148
  '[FATAL-HANDLERS-DUP] registerFatalHandlers chamado mais de uma vez ' +
148
- 'neste processo; a chamada extra foi ignorada. Chame uma vez, com o ' +
149
- 'transport compartilhado.',
149
+ 'neste processo; a chamada extra foi ignorada. Construa UM logger por ' +
150
+ 'processo e registre uma vez.',
150
151
  timestamp: new Date().toISOString(),
151
152
  })}\n`,
152
153
  );
package/src/index.ts CHANGED
@@ -12,8 +12,8 @@
12
12
  `dist/` e fariam um grep de auditoria acusar o pacote de ler ambiente.
13
13
  */
14
14
 
15
- export { buildNestLogger, createLokiTransport } from './logger';
16
- export type { BuiltLogger, CreateLokiTransportOptions } from './logger';
15
+ export { buildNestLogger } from './logger';
16
+ export type { BuiltLogger } from './logger';
17
17
 
18
18
  export { redirectConsoleToNestLogger } from './console-redirect';
19
19
  export type { ConsoleRedirectOptions } from './console-redirect';
@@ -30,5 +30,5 @@ export type {
30
30
  LoggerOptions,
31
31
  LokiOptions,
32
32
  FileOptions,
33
- LokiTransportLike,
33
+ FatalHandlersOptions,
34
34
  } from './options';
package/src/logger.ts CHANGED
@@ -13,12 +13,19 @@
13
13
  para o handler de exceção fatal alcançá-lo; aqui ele volta no retorno, porque
14
14
  estado global no pacote é o mesmo problema de ler env com outra roupa.
15
15
 
16
- O singleton da fonte, porém, resolvia um problema real que o retorno sozinho
17
- não resolve: serviço que monta VÁRIOS loggers no mesmo processo o worker do
18
- gyra-core monta quatro teria um batcher por logger, e o flush de exceção
19
- fatal drenaria um deles. Para isso existe `createLokiTransport`: o
20
- consumidor cria o transport uma vez e passa o mesmo em `lokiTransport`. O
21
- compartilhamento fica explícito no call site, em vez de escondido no módulo.
16
+ Houve uma tentativa intermediária, e ela está registrada aqui porque o erro é
17
+ fácil de repetir: ao ver o worker do gyra-core construir QUATRO loggers, a
18
+ conclusão foi "eles precisam compartilhar um transport", e o pacote ganhou um
19
+ `createLokiTransport` para isso. Estava errado a pergunta certa era por que
20
+ havia quatro loggers.
21
+
22
+ Não havia motivo: o `LoggerFactory` original não recebia argumento, então as
23
+ quatro chamadas sempre produziram loggers idênticos. Era cópia de código. O
24
+ conserto é UM logger por processo, com o handle passado adiante — e aí não
25
+ existe transport para compartilhar. A opção foi removida na 0.3.0.
26
+
27
+ Se algum dia um serviço precisar de dois loggers com LABELS diferentes e um só
28
+ batcher, aí sim a opção volta a fazer sentido. Nenhum dos 15 tem esse caso.
22
29
  - O redirecionamento de `console.*` saiu para `console-redirect.ts`, como opt-in
23
30
  explícito: é efeito colateral de processo, e importar um pacote não deve mudar
24
31
  o que `console.log` faz.
@@ -131,44 +138,6 @@ const buildPrettyFormat = (): Logform.Format => {
131
138
  return format.combine(format.splat(), localFormat);
132
139
  };
133
140
 
134
- export interface CreateLokiTransportOptions extends LokiOptions {
135
- service: string;
136
- app?: string;
137
- instance?: string;
138
- pretty?: boolean;
139
- }
140
-
141
- /**
142
- * Constrói o transport do Loki isoladamente, para o consumidor COMPARTILHAR um
143
- * único batcher entre vários loggers do mesmo processo.
144
- *
145
- * Use isto quando o serviço monta mais de um logger — o worker do gyra-core monta
146
- * quatro. Com um transport por logger, cada um tem seu batcher, e o flush de
147
- * exceção fatal cobre só um deles.
148
- *
149
- * const lokiTransport = createLokiTransport({ service: 'gyra-core', host });
150
- * const { logger } = buildNestLogger({ service: 'gyra-core', lokiTransport });
151
- * // ...e o mesmo `lokiTransport` nos outros loggers do processo
152
- */
153
- export const createLokiTransport = (
154
- options: CreateLokiTransportOptions,
155
- ): LokiTransport => {
156
- const { service, app, instance, pretty, ...loki } = options;
157
-
158
- return buildLokiTransport(
159
- loki,
160
- {
161
- service,
162
- app: app ?? DEFAULT_APP_LABEL,
163
- instance: instance ?? hostname(),
164
- ...loki.labels,
165
- },
166
- pretty
167
- ? buildPrettyFormat()
168
- : format.combine(format.timestamp(), format.json()),
169
- );
170
- };
171
-
172
141
  const buildLokiTransport = (
173
142
  loki: LokiOptions,
174
143
  labels: Record<string, string>,
@@ -225,29 +194,13 @@ export const buildNestLogger = (options: LoggerOptions): BuiltLogger => {
225
194
  ? buildPrettyFormat()
226
195
  : format.combine(format.timestamp(), format.json());
227
196
 
228
- /*
229
- Passar os dois é ambíguo: um pede para construir um transport novo, o outro
230
- para reusar um existente. Falhar alto é melhor que escolher em silêncio e
231
- deixar o consumidor com dois batchers sem saber.
232
- */
233
- if (options.loki && options.lokiTransport) {
234
- throw new Error(
235
- '[log-transport] `loki` e `lokiTransport` sao mutuamente exclusivos: ' +
236
- 'use `loki` para construir um transport novo, ou `lokiTransport` para ' +
237
- 'reusar um ja construido por createLokiTransport().',
238
- );
239
- }
240
-
241
197
  const transportsList: any[] = [
242
198
  new transports.Console({ format: lineFormat }),
243
199
  ];
244
200
 
245
201
  let lokiTransport: LokiTransport | undefined;
246
202
 
247
- if (options.lokiTransport) {
248
- lokiTransport = options.lokiTransport as LokiTransport;
249
- transportsList.push(lokiTransport);
250
- } else if (options.loki) {
203
+ if (options.loki) {
251
204
  lokiTransport = buildLokiTransport(
252
205
  options.loki,
253
206
  {
package/src/options.ts CHANGED
@@ -15,37 +15,6 @@
15
15
  Quem lê env é o serviço, no entrypoint, onde o env já mora hoje.
16
16
  */
17
17
 
18
- /*
19
- Estrutura mínima do transport que o pacote manipula, declarada aqui para o
20
- `options.ts` não precisar importar o winston-loki.
21
-
22
- Lista os membros que são de fato tocados — `log` pelo winston ao montar o
23
- logger, e `flush`/`close`/`once`/`off` pelo caminho de exceção fatal.
24
-
25
- Era `object`, que aceitava `{ qualquer: 'coisa' }` e até um `Date` em tempo de
26
- compilação; o erro só aparecia no boot, quando o winston recusava o transport
27
- com "Invalid transport, must be an object with a log method".
28
- */
29
- export interface LokiTransportLike {
30
- /*
31
- Todos os membros são opcionais, e isso é deliberado — não desleixo.
32
-
33
- Não existe membro que dê para exigir: o tipo real do `LokiTransport` declara
34
- `log` e `flush` como opcionais, então exigir qualquer um deles rejeitaria o
35
- transport de verdade. Tentei, e o `tsc` recusou o caso legítimo.
36
-
37
- Com todos opcionais, a detecção de "weak type" do TypeScript faz o trabalho:
38
- um objeto sem NENHUMA propriedade em comum com esta interface é rejeitado. É o
39
- suficiente para pegar `{ qualquer: 'coisa' }` e `Date`, que passavam quando o
40
- tipo era `object`.
41
- */
42
- log?: unknown;
43
- flush?: () => Promise<void>;
44
- close?: () => void;
45
- once?: (event: string, listener: (...args: unknown[]) => void) => unknown;
46
- off?: (event: string, listener: (...args: unknown[]) => void) => unknown;
47
- }
48
-
49
18
  export interface LokiOptions {
50
19
  /* Endereço do Loki. Sem ele não há para onde enviar, então é obrigatório. */
51
20
  host: string;
@@ -119,29 +88,13 @@ export interface LoggerOptions {
119
88
  `LOG_GRAFANA_LOKI === 'true'`. Ausente significa não enviar, e o pacote não
120
89
  precisa parsear string booleana.
121
90
 
122
- Cada chamada com `loki` constrói um transport NOVO. Serviço que monta mais de
123
- um logger no mesmo processo deve usar `lokiTransport` ver abaixo.
91
+ Cada chamada constrói um transport novo e é por isso que o serviço deve
92
+ construir UM logger por processo e passar o handle adiante, em vez de chamar
93
+ isto várias vezes. N loggers seriam N batchers, e a descarga de exceção fatal
94
+ alcançaria apenas um deles.
124
95
  */
125
96
  loki?: LokiOptions;
126
97
 
127
- /*
128
- Transport já construído, para COMPARTILHAR um único batcher entre vários
129
- loggers do mesmo processo.
130
-
131
- Isto não é conveniência, é correção. O worker do gyra-core monta quatro
132
- loggers — um para a app e três para conexões RMQ. Com quatro transports
133
- independentes há quatro batchers, e o `registerFatalHandlers` drena apenas o
134
- que recebeu: as linhas bufferizadas nos outros três morrem com o processo, que
135
- é exatamente o sintoma que a entrega confiável existe para impedir.
136
-
137
- A fonte original resolvia isso com um singleton de módulo. Aqui a decisão fica
138
- com o consumidor — ele chama `createLokiTransport` uma vez e passa o mesmo
139
- transport para cada logger — sem estado global escondido no pacote.
140
-
141
- Mutuamente exclusivo com `loki`.
142
- */
143
- lokiTransport?: LokiTransportLike;
144
-
145
98
  /*
146
99
  Transport de arquivo, usado quando não há Loki. Mantém a precedência do código
147
100
  original: havendo `loki`, o arquivo é ignorado.