@tc-libs/logger 3.12.0 → 3.14.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/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@tc-libs/logger",
3
- "version": "3.12.0",
3
+ "version": "3.14.0",
4
4
  "dependencies": {
5
5
  "@nestjs/common": "^11.0.12",
6
+ "@aws-sdk/client-cloudwatch-logs": "^3.779.0",
6
7
  "winston": "^3.17.0",
7
8
  "winston-transport": "^4.9.0",
8
9
  "telegraf": "^4.16.3",
@@ -14,6 +14,8 @@ let LogFactory = class LogFactory {
14
14
  telegramEnabled: this._options.telegram.enabled,
15
15
  telegramChatId: this._options.telegram.chatId,
16
16
  telegramApiToken: this._options.telegram.apiToken,
17
+ cloudwatchEnabled: !!this._options.cloudwatch?.enabled,
18
+ cloudwatchConfig: this._options.cloudwatch,
17
19
  };
18
20
  return new logger_service_1.TcLogService(context, logConf);
19
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.factory.js","sourceRoot":"","sources":["../../../../packages/logger/src/logger.factory.ts"],"names":[],"mappings":";;;;AAAA,2CAAoD;AACpD,8DAAyD;AAEzD,mEAGiC;AAG1B,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAEmB,QAA6B;QAA7B,aAAQ,GAAR,QAAQ,CAAqB;IAC7C,CAAC;IACJ,YAAY,CAAC,OAAe;QAC1B,MAAM,OAAO,GAAG;YACd,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;YAC/C,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAC7C,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;SAClD,CAAC;QACF,OAAO,IAAI,6BAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AAbY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;IAGR,mBAAA,IAAA,eAAM,EAAC,6CAAqB,CAAC,CAAA;;GAFrB,UAAU,CAatB"}
1
+ {"version":3,"file":"logger.factory.js","sourceRoot":"","sources":["../../../../packages/logger/src/logger.factory.ts"],"names":[],"mappings":";;;;AAAA,2CAAoD;AACpD,8DAAyD;AAEzD,mEAGiC;AAG1B,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAEmB,QAA6B;QAA7B,aAAQ,GAAR,QAAQ,CAAqB;IAC7C,CAAC;IACJ,YAAY,CAAC,OAAe;QAC1B,MAAM,OAAO,GAAG;YACd,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO;YAC/C,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAC7C,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YACjD,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO;YACtD,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;SAC3C,CAAC;QACF,OAAO,IAAI,6BAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AAfY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;IAGR,mBAAA,IAAA,eAAM,EAAC,6CAAqB,CAAC,CAAA;;GAFrB,UAAU,CAetB"}
@@ -7,6 +7,17 @@ export interface LoggerModuleOptions {
7
7
  chatId: string;
8
8
  apiToken: string;
9
9
  };
10
+ cloudwatch?: {
11
+ enabled: boolean;
12
+ credential: {
13
+ key: string;
14
+ secret: string;
15
+ };
16
+ region: string;
17
+ logGroup: string;
18
+ logStream: string;
19
+ minLevel?: 'error' | 'warn' | 'info' | 'debug';
20
+ };
10
21
  }
11
22
  type LoggerModuleAsyncOptions = Pick<ModuleMetadata, 'imports'> & Pick<FactoryProvider<LoggerModuleOptions>, 'useFactory' | 'inject'>;
12
23
  export default LoggerModuleAsyncOptions;
@@ -3,12 +3,25 @@ export type TcLogServiceConfig = {
3
3
  telegramEnabled: boolean;
4
4
  telegramChatId?: string;
5
5
  telegramApiToken?: string;
6
+ cloudwatchEnabled: boolean;
7
+ cloudwatchConfig?: {
8
+ credential: {
9
+ key: string;
10
+ secret: string;
11
+ };
12
+ region: string;
13
+ logGroup: string;
14
+ logStream: string;
15
+ minLevel?: 'error' | 'warn' | 'info' | 'debug';
16
+ };
6
17
  };
7
18
  export declare class TcLogService implements ITcLogService {
8
19
  private _context;
9
20
  private _consoleLog;
10
21
  private _telegramLogger;
11
22
  private _telegramEnabled;
23
+ private _cloudwatchLogger;
24
+ private _cloudwatchEnabled;
12
25
  private _badges;
13
26
  constructor(context: string, conf: TcLogServiceConfig);
14
27
  /**
@@ -4,6 +4,7 @@ exports.TcLogService = void 0;
4
4
  const winston_1 = require("winston");
5
5
  const { combine, metadata, timestamp, label, printf, errors, colorize } = winston_1.format;
6
6
  const telegram_transport_1 = require("../transports/telegram.transport");
7
+ const cloudwatch_transport_1 = require("../transports/cloudwatch.transport");
7
8
  const _sanitize = (str) => {
8
9
  return str.replace(/[\u00A0-\u9999<>&]/g, (i) => {
9
10
  return '&#' + i.charCodeAt(0) + ';';
@@ -103,6 +104,51 @@ class TcLogService {
103
104
  ],
104
105
  });
105
106
  }
107
+ this._cloudwatchEnabled = conf.cloudwatchEnabled && !!conf.cloudwatchConfig;
108
+ if (this._cloudwatchEnabled && conf.cloudwatchConfig) {
109
+ const cw = conf.cloudwatchConfig;
110
+ this._cloudwatchLogger = (0, winston_1.createLogger)({
111
+ // filtra per livello minimo: i livelli meno gravi vengono scartati
112
+ // prima di raggiungere il transport (es. 'warn' => warn + error).
113
+ level: cw.minLevel ?? 'info',
114
+ format: combine(label({ label: this._context }), errors({ stack: true }), metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }), timestamp({ format: 'DD/MM/YY HH:mm:ss Z' }), printf((info) => {
115
+ // log strutturato in JSON, interrogabile da CloudWatch Logs Insights
116
+ const entry = {
117
+ level: info.level,
118
+ context: info['label'],
119
+ message: info.message,
120
+ timestamp: info['timestamp'],
121
+ };
122
+ if (info['stack'])
123
+ entry['stack'] = info['stack'];
124
+ const meta = info['metadata'];
125
+ if (meta && Object.keys(meta).length)
126
+ entry['metadata'] = meta;
127
+ try {
128
+ return JSON.stringify(entry);
129
+ }
130
+ catch {
131
+ return JSON.stringify({
132
+ level: info.level,
133
+ message: String(info.message),
134
+ timestamp: info['timestamp'],
135
+ });
136
+ }
137
+ })),
138
+ transports: [
139
+ new cloudwatch_transport_1.CloudwatchTransport({
140
+ region: cw.region,
141
+ credentials: {
142
+ accessKeyId: cw.credential.key,
143
+ secretAccessKey: cw.credential.secret,
144
+ },
145
+ // suffisso fisso del modulo: <base>/system
146
+ logGroupName: `${cw.logGroup.replace(/\/+$/, '')}/system`,
147
+ logStreamName: cw.logStream,
148
+ }),
149
+ ],
150
+ });
151
+ }
106
152
  }
107
153
  /**
108
154
  * Write a 'log' level log.
@@ -138,21 +184,29 @@ class TcLogService {
138
184
  this._consoleLog.log('debug', message, optionalParams, null);
139
185
  if (this._telegramEnabled)
140
186
  this._telegramLogger.debug(message, optionalParams, null);
187
+ if (this._cloudwatchEnabled)
188
+ this._cloudwatchLogger.debug(message, optionalParams, null);
141
189
  }
142
190
  notifyInfo(message, ...optionalParams) {
143
191
  this._consoleLog.log('info', message, optionalParams, null);
144
192
  if (this._telegramEnabled)
145
193
  this._telegramLogger.info(message, optionalParams, null);
194
+ if (this._cloudwatchEnabled)
195
+ this._cloudwatchLogger.info(message, optionalParams, null);
146
196
  }
147
197
  notifyWarn(message, ...optionalParams) {
148
198
  this._consoleLog.log('warn', message, optionalParams, null);
149
199
  if (this._telegramEnabled)
150
200
  this._telegramLogger.warn(message, optionalParams, null);
201
+ if (this._cloudwatchEnabled)
202
+ this._cloudwatchLogger.warn(message, optionalParams, null);
151
203
  }
152
204
  notifyError(message, ...optionalParams) {
153
205
  this._consoleLog.log('error', message, optionalParams, null);
154
206
  if (this._telegramEnabled)
155
207
  this._telegramLogger.error(message, optionalParams, null);
208
+ if (this._cloudwatchEnabled)
209
+ this._cloudwatchLogger.error(message, optionalParams, null);
156
210
  }
157
211
  }
158
212
  exports.TcLogService = TcLogService;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../packages/logger/src/services/logger.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../../../packages/logger/src/services/logger.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import Transport, { TransportStreamOptions } from 'winston-transport';
2
+ interface CloudwatchTransportOpts extends TransportStreamOptions {
3
+ region: string;
4
+ credentials?: {
5
+ accessKeyId: string;
6
+ secretAccessKey: string;
7
+ };
8
+ logGroupName: string;
9
+ logStreamName: string;
10
+ flushInterval?: number;
11
+ }
12
+ export declare class CloudwatchTransport extends Transport {
13
+ private readonly _client;
14
+ private readonly _logGroupName;
15
+ private readonly _logStreamName;
16
+ private readonly _flushInterval;
17
+ private _buffer;
18
+ private _timer;
19
+ private _flushing;
20
+ private _ready;
21
+ constructor(opts: CloudwatchTransportOpts);
22
+ log(info: any, cb: () => void): void;
23
+ private _scheduleFlush;
24
+ private _ensureStream;
25
+ private _createIgnoringExisting;
26
+ private _flush;
27
+ private _chunk;
28
+ close(): void;
29
+ }
30
+ export {};
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudwatchTransport = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const winston_transport_1 = tslib_1.__importDefault(require("winston-transport"));
6
+ const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs");
7
+ // Limiti dell'API PutLogEvents: max 10.000 eventi e 1.048.576 byte per batch,
8
+ // dove ogni evento conta come byte UTF-8 del messaggio + 26 byte di overhead.
9
+ const MAX_BATCH_COUNT = 10000;
10
+ const MAX_BATCH_BYTES = 1048576;
11
+ const EVENT_OVERHEAD = 26;
12
+ const FLUSH_THRESHOLD = 1000;
13
+ class CloudwatchTransport extends winston_transport_1.default {
14
+ constructor(opts) {
15
+ super(opts);
16
+ this._buffer = [];
17
+ this._timer = null;
18
+ this._flushing = false;
19
+ this._ready = null;
20
+ this._client = new client_cloudwatch_logs_1.CloudWatchLogsClient({
21
+ region: opts.region,
22
+ ...(opts.credentials ? { credentials: opts.credentials } : {}),
23
+ });
24
+ this._logGroupName = opts.logGroupName;
25
+ this._logStreamName = opts.logStreamName;
26
+ this._flushInterval = opts.flushInterval ?? 2000;
27
+ }
28
+ log(info, cb) {
29
+ setImmediate(() => this.emit('logged', info));
30
+ const message = info[Symbol.for('message')] ?? JSON.stringify(info);
31
+ this._buffer.push({ timestamp: Date.now(), message });
32
+ if (this._buffer.length >= FLUSH_THRESHOLD) {
33
+ void this._flush();
34
+ }
35
+ else {
36
+ this._scheduleFlush();
37
+ }
38
+ cb();
39
+ }
40
+ _scheduleFlush() {
41
+ if (this._timer)
42
+ return;
43
+ this._timer = setTimeout(() => {
44
+ this._timer = null;
45
+ void this._flush();
46
+ }, this._flushInterval);
47
+ }
48
+ async _ensureStream() {
49
+ if (this._ready)
50
+ return this._ready;
51
+ this._ready = (async () => {
52
+ await this._createIgnoringExisting(new client_cloudwatch_logs_1.CreateLogGroupCommand({ logGroupName: this._logGroupName }));
53
+ await this._createIgnoringExisting(new client_cloudwatch_logs_1.CreateLogStreamCommand({
54
+ logGroupName: this._logGroupName,
55
+ logStreamName: this._logStreamName,
56
+ }));
57
+ })();
58
+ return this._ready;
59
+ }
60
+ async _createIgnoringExisting(command) {
61
+ try {
62
+ await this._client.send(command);
63
+ }
64
+ catch (err) {
65
+ // se group/stream esistono già non è un errore; altrimenti rilancio e
66
+ // azzero _ready così un log successivo riprova la creazione.
67
+ if (err?.name !== 'ResourceAlreadyExistsException') {
68
+ this._ready = null;
69
+ throw err;
70
+ }
71
+ }
72
+ }
73
+ async _flush() {
74
+ if (this._flushing || this._buffer.length === 0)
75
+ return;
76
+ this._flushing = true;
77
+ if (this._timer) {
78
+ clearTimeout(this._timer);
79
+ this._timer = null;
80
+ }
81
+ // gli eventi di un batch devono essere ordinati per timestamp crescente.
82
+ const events = this._buffer
83
+ .splice(0)
84
+ .sort((a, b) => (a.timestamp ?? 0) - (b.timestamp ?? 0));
85
+ try {
86
+ await this._ensureStream();
87
+ for (const batch of this._chunk(events)) {
88
+ await this._client.send(new client_cloudwatch_logs_1.PutLogEventsCommand({
89
+ logGroupName: this._logGroupName,
90
+ logStreamName: this._logStreamName,
91
+ logEvents: batch,
92
+ }));
93
+ }
94
+ }
95
+ catch (err) {
96
+ // non rimettiamo in coda gli eventi falliti per evitare crescita
97
+ // illimitata del buffer: il logging non deve mai far crashare l'app.
98
+ console.error('[CloudwatchTransport] flush failed:', err);
99
+ }
100
+ finally {
101
+ this._flushing = false;
102
+ if (this._buffer.length > 0)
103
+ this._scheduleFlush();
104
+ }
105
+ }
106
+ *_chunk(events) {
107
+ let batch = [];
108
+ let bytes = 0;
109
+ for (const event of events) {
110
+ const size = Buffer.byteLength(event.message ?? '', 'utf8') + EVENT_OVERHEAD;
111
+ if (batch.length >= MAX_BATCH_COUNT || bytes + size > MAX_BATCH_BYTES) {
112
+ if (batch.length)
113
+ yield batch;
114
+ batch = [];
115
+ bytes = 0;
116
+ }
117
+ batch.push(event);
118
+ bytes += size;
119
+ }
120
+ if (batch.length)
121
+ yield batch;
122
+ }
123
+ close() {
124
+ if (this._timer) {
125
+ clearTimeout(this._timer);
126
+ this._timer = null;
127
+ }
128
+ void this._flush();
129
+ }
130
+ }
131
+ exports.CloudwatchTransport = CloudwatchTransport;
132
+ //# sourceMappingURL=cloudwatch.transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudwatch.transport.js","sourceRoot":"","sources":["../../../../../packages/logger/src/transports/cloudwatch.transport.ts"],"names":[],"mappings":"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"}