@abbacchio/transport 0.1.3 → 0.1.5
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 +47 -14
- package/dist/client.d.ts +35 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +62 -3
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/transports/bunyan.d.ts +28 -0
- package/dist/transports/bunyan.d.ts.map +1 -1
- package/dist/transports/bunyan.js +42 -0
- package/dist/transports/bunyan.js.map +1 -1
- package/dist/transports/console.d.ts +1 -1
- package/dist/transports/console.d.ts.map +1 -1
- package/dist/transports/console.js +4 -2
- package/dist/transports/console.js.map +1 -1
- package/dist/transports/index.d.ts +2 -2
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +2 -2
- package/dist/transports/index.js.map +1 -1
- package/dist/transports/pino.d.ts +46 -1
- package/dist/transports/pino.d.ts.map +1 -1
- package/dist/transports/pino.js +70 -0
- package/dist/transports/pino.js.map +1 -1
- package/dist/transports/winston.d.ts +28 -0
- package/dist/transports/winston.d.ts.map +1 -1
- package/dist/transports/winston.js +42 -0
- package/dist/transports/winston.js.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +72 -3
- package/src/index.ts +2 -2
- package/src/transports/bunyan.ts +49 -0
- package/src/transports/console.ts +4 -2
- package/src/transports/index.ts +3 -3
- package/src/transports/pino.ts +99 -0
- package/src/transports/winston.ts +49 -0
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ const logger = pino({
|
|
|
26
26
|
options: {
|
|
27
27
|
url: "http://localhost:4000/api/logs",
|
|
28
28
|
channel: "my-app",
|
|
29
|
+
namespace: "auth-service",
|
|
29
30
|
},
|
|
30
31
|
},
|
|
31
32
|
],
|
|
@@ -74,32 +75,64 @@ const logger = bunyan.createLogger({
|
|
|
74
75
|
logger.info({ user: "john" }, "User logged in");
|
|
75
76
|
```
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
|
|
79
|
+
### Dynamic Control (Pino)
|
|
80
|
+
|
|
81
|
+
Use `createPinoStream` for runtime control over channel, namespace, and enabled state:
|
|
78
82
|
|
|
79
83
|
```typescript
|
|
80
|
-
import
|
|
84
|
+
import pino from "pino";
|
|
85
|
+
import { createPinoStream } from "@abbacchio/transport/transports/pino";
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
const stream = createPinoStream({
|
|
83
88
|
url: "http://localhost:4000/api/logs",
|
|
84
89
|
channel: "my-app",
|
|
85
|
-
|
|
90
|
+
namespace: "api",
|
|
91
|
+
enabled: process.env.ABBACCHIO_ENABLED === "true",
|
|
86
92
|
});
|
|
87
93
|
|
|
88
|
-
|
|
94
|
+
const logger = pino(stream);
|
|
95
|
+
|
|
96
|
+
// Toggle at runtime
|
|
97
|
+
stream.disable(); // stop sending logs
|
|
98
|
+
stream.enable(); // resume sending logs
|
|
89
99
|
|
|
90
|
-
|
|
100
|
+
// Change namespace dynamically
|
|
101
|
+
stream.setNamespace("worker");
|
|
91
102
|
```
|
|
92
103
|
|
|
93
104
|
## Options
|
|
94
105
|
|
|
95
|
-
| Option | Type
|
|
96
|
-
| ----------- |
|
|
97
|
-
| `url` | string
|
|
98
|
-
| `channel` | string
|
|
99
|
-
| `
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
106
|
+
| Option | Type | Default | Description |
|
|
107
|
+
| ----------- | ------- | -------------------------------- | ---------------------------------------------- |
|
|
108
|
+
| `url` | string | `http://localhost:4000/api/logs` | Abbacchio server URL |
|
|
109
|
+
| `channel` | string | `default` | Channel name for multi-app support |
|
|
110
|
+
| `namespace` | string | - | Default namespace (overridden by per-log values)|
|
|
111
|
+
| `enabled` | boolean | `true` | Whether to send logs to the server |
|
|
112
|
+
| `secretKey` | string | - | Encryption key (enables E2E encryption) |
|
|
113
|
+
| `batchSize` | number | `10` | Send batch when this many logs accumulate |
|
|
114
|
+
| `interval` | number | `1000` | Send batch after this many ms |
|
|
115
|
+
| `headers` | object | `{}` | Additional HTTP headers |
|
|
116
|
+
|
|
117
|
+
### Namespace
|
|
118
|
+
|
|
119
|
+
The `namespace` option sets a default namespace for all logs. Per-log `namespace` or `name` fields (e.g. from Pino child loggers) take precedence:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
const logger = pino({
|
|
123
|
+
transport: {
|
|
124
|
+
target: "@abbacchio/transport/transports/pino",
|
|
125
|
+
options: { namespace: "api" },
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
logger.info("hello"); // namespace = "api"
|
|
130
|
+
logger.child({ name: "db" }).info("query"); // namespace = "db" (overrides)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Enabled Toggle
|
|
134
|
+
|
|
135
|
+
Set `enabled: false` to prevent logs from being sent to the server. Logs are silently dropped (not buffered). All transports expose `enable()`, `disable()`, and `isEnabled()` methods for runtime control.
|
|
103
136
|
|
|
104
137
|
## End-to-End Encryption
|
|
105
138
|
|
package/dist/client.d.ts
CHANGED
|
@@ -5,12 +5,16 @@ export interface AbbacchioClientOptions {
|
|
|
5
5
|
secretKey?: string;
|
|
6
6
|
/** Channel/app name for multi-app support. Defaults to 'default' */
|
|
7
7
|
channel?: string;
|
|
8
|
+
/** Default namespace for all logs. Per-log namespace/name fields take precedence */
|
|
9
|
+
namespace?: string;
|
|
8
10
|
/** Number of logs to batch before sending. Defaults to 10 */
|
|
9
11
|
batchSize?: number;
|
|
10
12
|
/** Interval in ms between flushes. Defaults to 1000 */
|
|
11
13
|
interval?: number;
|
|
12
14
|
/** Additional headers to send with requests */
|
|
13
15
|
headers?: Record<string, string>;
|
|
16
|
+
/** Whether to send logs to the server. Defaults to true */
|
|
17
|
+
enabled?: boolean;
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* Shared HTTP client for all Abbacchio transports.
|
|
@@ -20,14 +24,44 @@ export declare class AbbacchioClient {
|
|
|
20
24
|
private url;
|
|
21
25
|
private secretKey?;
|
|
22
26
|
private channel?;
|
|
27
|
+
private namespace?;
|
|
23
28
|
private batchSize;
|
|
24
29
|
private interval;
|
|
25
30
|
private headers;
|
|
31
|
+
private enabled;
|
|
26
32
|
private buffer;
|
|
27
33
|
private timer;
|
|
28
34
|
constructor(options?: AbbacchioClientOptions);
|
|
29
35
|
/**
|
|
30
|
-
*
|
|
36
|
+
* Change the channel dynamically after initialization
|
|
37
|
+
*/
|
|
38
|
+
setChannel(channel: string | undefined): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get the current channel
|
|
41
|
+
*/
|
|
42
|
+
getChannel(): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Change the namespace dynamically after initialization
|
|
45
|
+
*/
|
|
46
|
+
setNamespace(namespace: string | undefined): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get the current namespace
|
|
49
|
+
*/
|
|
50
|
+
getNamespace(): string | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Enable sending logs to the server
|
|
53
|
+
*/
|
|
54
|
+
enable(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Disable sending logs to the server. Logs will be silently dropped.
|
|
57
|
+
*/
|
|
58
|
+
disable(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Check if the client is currently enabled
|
|
61
|
+
*/
|
|
62
|
+
isEnabled(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Process a log entry: inject default namespace, then encrypt if needed
|
|
31
65
|
*/
|
|
32
66
|
private processLog;
|
|
33
67
|
/**
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAA8C;gBAE/C,OAAO,GAAE,sBAA2B;IAWhD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIjD;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAgBlB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAWvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAa/B;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1C;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;YACW,YAAY;IAiB1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,eAAe,CAE9E"}
|
package/dist/client.js
CHANGED
|
@@ -7,32 +7,87 @@ export class AbbacchioClient {
|
|
|
7
7
|
url;
|
|
8
8
|
secretKey;
|
|
9
9
|
channel;
|
|
10
|
+
namespace;
|
|
10
11
|
batchSize;
|
|
11
12
|
interval;
|
|
12
13
|
headers;
|
|
14
|
+
enabled;
|
|
13
15
|
buffer = [];
|
|
14
16
|
timer = null;
|
|
15
17
|
constructor(options = {}) {
|
|
16
18
|
this.url = options.url || "http://localhost:4000/api/logs";
|
|
17
19
|
this.secretKey = options.secretKey;
|
|
18
20
|
this.channel = options.channel;
|
|
21
|
+
this.namespace = options.namespace;
|
|
19
22
|
this.batchSize = options.batchSize || 10;
|
|
20
23
|
this.interval = options.interval || 1000;
|
|
21
24
|
this.headers = options.headers || {};
|
|
25
|
+
this.enabled = options.enabled ?? true;
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
|
-
*
|
|
28
|
+
* Change the channel dynamically after initialization
|
|
29
|
+
*/
|
|
30
|
+
setChannel(channel) {
|
|
31
|
+
this.channel = channel;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the current channel
|
|
35
|
+
*/
|
|
36
|
+
getChannel() {
|
|
37
|
+
return this.channel;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Change the namespace dynamically after initialization
|
|
41
|
+
*/
|
|
42
|
+
setNamespace(namespace) {
|
|
43
|
+
this.namespace = namespace;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the current namespace
|
|
47
|
+
*/
|
|
48
|
+
getNamespace() {
|
|
49
|
+
return this.namespace;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Enable sending logs to the server
|
|
53
|
+
*/
|
|
54
|
+
enable() {
|
|
55
|
+
this.enabled = true;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Disable sending logs to the server. Logs will be silently dropped.
|
|
59
|
+
*/
|
|
60
|
+
disable() {
|
|
61
|
+
this.enabled = false;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if the client is currently enabled
|
|
65
|
+
*/
|
|
66
|
+
isEnabled() {
|
|
67
|
+
return this.enabled;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Process a log entry: inject default namespace, then encrypt if needed
|
|
25
71
|
*/
|
|
26
72
|
processLog(log) {
|
|
73
|
+
let processed = log;
|
|
74
|
+
if (this.namespace && typeof processed === 'object' && processed !== null) {
|
|
75
|
+
const obj = processed;
|
|
76
|
+
if (!obj.namespace && !obj.name) {
|
|
77
|
+
processed = { ...obj, namespace: this.namespace };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
27
80
|
if (this.secretKey) {
|
|
28
|
-
return { encrypted: encrypt(JSON.stringify(
|
|
81
|
+
return { encrypted: encrypt(JSON.stringify(processed), this.secretKey) };
|
|
29
82
|
}
|
|
30
|
-
return
|
|
83
|
+
return processed;
|
|
31
84
|
}
|
|
32
85
|
/**
|
|
33
86
|
* Add a log to the buffer and trigger send if needed
|
|
34
87
|
*/
|
|
35
88
|
add(log) {
|
|
89
|
+
if (!this.enabled)
|
|
90
|
+
return;
|
|
36
91
|
this.buffer.push(this.processLog(log));
|
|
37
92
|
if (this.buffer.length >= this.batchSize) {
|
|
38
93
|
this.flush();
|
|
@@ -45,6 +100,8 @@ export class AbbacchioClient {
|
|
|
45
100
|
* Add multiple logs at once
|
|
46
101
|
*/
|
|
47
102
|
addBatch(logs) {
|
|
103
|
+
if (!this.enabled)
|
|
104
|
+
return;
|
|
48
105
|
for (const log of logs) {
|
|
49
106
|
this.buffer.push(this.processLog(log));
|
|
50
107
|
}
|
|
@@ -59,6 +116,8 @@ export class AbbacchioClient {
|
|
|
59
116
|
* Send logs immediately without batching
|
|
60
117
|
*/
|
|
61
118
|
async send(logs) {
|
|
119
|
+
if (!this.enabled)
|
|
120
|
+
return;
|
|
62
121
|
const processedLogs = logs.map(log => this.processLog(log));
|
|
63
122
|
await this.sendToServer(processedLogs);
|
|
64
123
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,6 @@ export { winstonTransport, AbbacchioWinstonTransport } from "./transports/winsto
|
|
|
7
7
|
export type { WinstonTransportOptions } from "./transports/winston.js";
|
|
8
8
|
export { bunyanStream, AbbacchioBunyanStream } from "./transports/bunyan.js";
|
|
9
9
|
export type { BunyanStreamOptions } from "./transports/bunyan.js";
|
|
10
|
-
export {
|
|
11
|
-
export type {
|
|
10
|
+
export { createPinoStream } from "./transports/pino.js";
|
|
11
|
+
export type { AbbacchioPinoStream } from "./transports/pino.js";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACtF,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACtF,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,5 +6,5 @@ export { generateKey, encrypt, decrypt, encryptLog, decryptLog } from "./encrypt
|
|
|
6
6
|
export { default as pinoTransport } from "./transports/pino.js";
|
|
7
7
|
export { winstonTransport, AbbacchioWinstonTransport } from "./transports/winston.js";
|
|
8
8
|
export { bunyanStream, AbbacchioBunyanStream } from "./transports/bunyan.js";
|
|
9
|
-
export {
|
|
9
|
+
export { createPinoStream } from "./transports/pino.js";
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG5D,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAErF,uCAAuC;AACvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG5D,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAErF,uCAAuC;AACvC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -40,6 +40,34 @@ export declare class AbbacchioBunyanStream extends Writable {
|
|
|
40
40
|
* Transform Bunyan log format to a normalized format
|
|
41
41
|
*/
|
|
42
42
|
private transformLog;
|
|
43
|
+
/**
|
|
44
|
+
* Change the channel dynamically
|
|
45
|
+
*/
|
|
46
|
+
setChannel(channel: string | undefined): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get the current channel
|
|
49
|
+
*/
|
|
50
|
+
getChannel(): string | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Change the namespace dynamically
|
|
53
|
+
*/
|
|
54
|
+
setNamespace(namespace: string | undefined): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get the current namespace
|
|
57
|
+
*/
|
|
58
|
+
getNamespace(): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Enable sending logs to the server
|
|
61
|
+
*/
|
|
62
|
+
enable(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Disable sending logs to the server
|
|
65
|
+
*/
|
|
66
|
+
disable(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Check if the client is currently enabled
|
|
69
|
+
*/
|
|
70
|
+
isEnabled(): boolean;
|
|
43
71
|
/**
|
|
44
72
|
* Close the stream
|
|
45
73
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bunyan.d.ts","sourceRoot":"","sources":["../../src/transports/bunyan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IACjE,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,OAAO,CAAC,MAAM,CAAkB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEnB,IAAI,GAAE,mBAAwB;IAM1C;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACvC,IAAI;IAWP;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;CAGvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,qBAAqB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAOhI;AAED,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"bunyan.d.ts","sourceRoot":"","sources":["../../src/transports/bunyan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IACjE,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,OAAO,CAAC,MAAM,CAAkB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEnB,IAAI,GAAE,mBAAwB;IAM1C;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACvC,IAAI;IAWP;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIjD;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;CAGvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,qBAAqB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAOhI;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -61,6 +61,48 @@ export class AbbacchioBunyanStream extends Writable {
|
|
|
61
61
|
...rest,
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Change the channel dynamically
|
|
66
|
+
*/
|
|
67
|
+
setChannel(channel) {
|
|
68
|
+
this.client.setChannel(channel);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the current channel
|
|
72
|
+
*/
|
|
73
|
+
getChannel() {
|
|
74
|
+
return this.client.getChannel();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Change the namespace dynamically
|
|
78
|
+
*/
|
|
79
|
+
setNamespace(namespace) {
|
|
80
|
+
this.client.setNamespace(namespace);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the current namespace
|
|
84
|
+
*/
|
|
85
|
+
getNamespace() {
|
|
86
|
+
return this.client.getNamespace();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Enable sending logs to the server
|
|
90
|
+
*/
|
|
91
|
+
enable() {
|
|
92
|
+
this.client.enable();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Disable sending logs to the server
|
|
96
|
+
*/
|
|
97
|
+
disable() {
|
|
98
|
+
this.client.disable();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if the client is currently enabled
|
|
102
|
+
*/
|
|
103
|
+
isEnabled() {
|
|
104
|
+
return this.client.isEnabled();
|
|
105
|
+
}
|
|
64
106
|
/**
|
|
65
107
|
* Close the stream
|
|
66
108
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bunyan.js","sourceRoot":"","sources":["../../src/transports/bunyan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAO5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACzC,MAAM,CAAkB;IACzB,KAAK,CAAmB;IAE/B,YAAY,OAA4B,EAAE;QACxC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CACJ,KAA8B,EAC9B,SAAyB,EACzB,QAAwC;QAExC,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAA+B;QAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAErE,OAAO;YACL,KAAK,EAAE,KAAe;YACtB,GAAG;YACH,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5D,IAAI;YACJ,QAAQ;YACR,GAAG;YACH,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAwC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAA0B;IACrD,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,MAAM;QACN,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"bunyan.js","sourceRoot":"","sources":["../../src/transports/bunyan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAO5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACzC,MAAM,CAAkB;IACzB,KAAK,CAAmB;IAE/B,YAAY,OAA4B,EAAE;QACxC,KAAK,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,MAAM,CACJ,KAA8B,EAC9B,SAAyB,EACzB,QAAwC;QAExC,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAA+B;QAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAErE,OAAO;YACL,KAAK,EAAE,KAAe;YACtB,GAAG;YACH,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5D,IAAI;YACJ,QAAQ;YACR,GAAG;YACH,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAA2B;QACpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAA6B;QACxC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAwC;QAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAA0B;IACrD,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,MAAM;QACN,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -14,7 +14,7 @@ export declare function interceptConsole(opts?: ConsoleInterceptorOptions): void
|
|
|
14
14
|
*/
|
|
15
15
|
export declare function restoreConsole(): void;
|
|
16
16
|
/**
|
|
17
|
-
* Get the active client (for testing)
|
|
17
|
+
* Get the active client (for testing/runtime control)
|
|
18
18
|
*/
|
|
19
19
|
export declare function getActiveClient(): AbbacchioClient | null;
|
|
20
20
|
export default interceptConsole;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/transports/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;IAC1D,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/transports/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;IAC1D,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA4FD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,yBAA8B,GAAG,IAAI,CAoB3E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAYrC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,eAAe,GAAG,IAAI,CAExD;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -12,14 +12,16 @@ const methodToLevel = {
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```typescript
|
|
15
|
-
* import { interceptConsole, restoreConsole } from "@abbacchio/
|
|
15
|
+
* import { interceptConsole, restoreConsole } from "@abbacchio/transport/transports/console";
|
|
16
16
|
*
|
|
17
17
|
* // Start intercepting console calls
|
|
18
18
|
* interceptConsole({
|
|
19
19
|
* url: "http://localhost:4000/api/logs",
|
|
20
20
|
* channel: "my-app",
|
|
21
|
+
* namespace: "my-namespace",
|
|
21
22
|
* secretKey: "optional-encryption-key",
|
|
22
23
|
* passthrough: true, // Still log to console
|
|
24
|
+
* enabled: true, // Can be toggled at runtime
|
|
23
25
|
* });
|
|
24
26
|
*
|
|
25
27
|
* console.log("This will be sent to Abbacchio!");
|
|
@@ -110,7 +112,7 @@ export function restoreConsole() {
|
|
|
110
112
|
}
|
|
111
113
|
}
|
|
112
114
|
/**
|
|
113
|
-
* Get the active client (for testing)
|
|
115
|
+
* Get the active client (for testing/runtime control)
|
|
114
116
|
*/
|
|
115
117
|
export function getActiveClient() {
|
|
116
118
|
return activeClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/transports/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAW5E,MAAM,aAAa,GAAkC;IACnD,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACV,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/transports/console.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ export { winstonTransport, AbbacchioWinstonTransport } from "./winston.js";
|
|
|
4
4
|
export type { WinstonTransportOptions } from "./winston.js";
|
|
5
5
|
export { bunyanStream, AbbacchioBunyanStream } from "./bunyan.js";
|
|
6
6
|
export type { BunyanStreamOptions } from "./bunyan.js";
|
|
7
|
-
export {
|
|
8
|
-
export type {
|
|
7
|
+
export { createPinoStream } from "./pino.js";
|
|
8
|
+
export type { AbbacchioPinoStream } from "./pino.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/transports/index.js
CHANGED
|
@@ -4,6 +4,6 @@ export { default as pinoTransport } from "./pino.js";
|
|
|
4
4
|
export { winstonTransport, AbbacchioWinstonTransport } from "./winston.js";
|
|
5
5
|
// Bunyan stream
|
|
6
6
|
export { bunyanStream, AbbacchioBunyanStream } from "./bunyan.js";
|
|
7
|
-
//
|
|
8
|
-
export {
|
|
7
|
+
// Pino stream with dynamic channel support
|
|
8
|
+
export { createPinoStream } from "./pino.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrD,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAG3E,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGlE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrD,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAG3E,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGlE,2CAA2C;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
1
|
import build from "pino-abstract-transport";
|
|
2
2
|
import { type AbbacchioClientOptions } from "../client.js";
|
|
3
|
+
import { Transform } from "stream";
|
|
3
4
|
export interface PinoTransportOptions extends AbbacchioClientOptions {
|
|
4
5
|
}
|
|
6
|
+
export interface AbbacchioPinoStream extends Transform {
|
|
7
|
+
/** Change the channel dynamically */
|
|
8
|
+
setChannel(channel: string | undefined): void;
|
|
9
|
+
/** Get the current channel */
|
|
10
|
+
getChannel(): string | undefined;
|
|
11
|
+
/** Change the namespace dynamically */
|
|
12
|
+
setNamespace(namespace: string | undefined): void;
|
|
13
|
+
/** Get the current namespace */
|
|
14
|
+
getNamespace(): string | undefined;
|
|
15
|
+
/** Enable sending logs to the server */
|
|
16
|
+
enable(): void;
|
|
17
|
+
/** Disable sending logs to the server */
|
|
18
|
+
disable(): void;
|
|
19
|
+
/** Check if the client is currently enabled */
|
|
20
|
+
isEnabled(): boolean;
|
|
21
|
+
/** Flush pending logs and close the client */
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
}
|
|
5
24
|
/**
|
|
6
25
|
* Pino transport for Abbacchio.
|
|
7
26
|
*
|
|
@@ -15,6 +34,7 @@ export interface PinoTransportOptions extends AbbacchioClientOptions {
|
|
|
15
34
|
* options: {
|
|
16
35
|
* url: "http://localhost:4000/api/logs",
|
|
17
36
|
* channel: "my-app",
|
|
37
|
+
* namespace: "auth-service",
|
|
18
38
|
* secretKey: "optional-encryption-key",
|
|
19
39
|
* },
|
|
20
40
|
* },
|
|
@@ -23,9 +43,34 @@ export interface PinoTransportOptions extends AbbacchioClientOptions {
|
|
|
23
43
|
* logger.info("Hello from Pino!");
|
|
24
44
|
* ```
|
|
25
45
|
*/
|
|
26
|
-
export default function pinoTransport(opts?: PinoTransportOptions): Promise<
|
|
46
|
+
export default function pinoTransport(opts?: PinoTransportOptions): Promise<Transform & build.OnUnknown>;
|
|
27
47
|
/**
|
|
28
48
|
* Named export for programmatic usage
|
|
29
49
|
*/
|
|
30
50
|
export { pinoTransport };
|
|
51
|
+
/**
|
|
52
|
+
* Create a Pino destination stream with direct access to the client.
|
|
53
|
+
* Use this when you need to change the channel dynamically.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import pino from "pino";
|
|
58
|
+
* import { createPinoStream } from "@abbacchio/transport/transports/pino";
|
|
59
|
+
*
|
|
60
|
+
* const stream = createPinoStream({
|
|
61
|
+
* url: "http://localhost:4000/api/logs",
|
|
62
|
+
* channel: "initial-channel",
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* const logger = pino(stream);
|
|
66
|
+
*
|
|
67
|
+
* logger.info("Log to initial channel");
|
|
68
|
+
*
|
|
69
|
+
* // Change channel dynamically
|
|
70
|
+
* stream.setChannel("new-channel");
|
|
71
|
+
*
|
|
72
|
+
* logger.info("Log to new channel");
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function createPinoStream(opts?: PinoTransportOptions): AbbacchioPinoStream;
|
|
31
76
|
//# sourceMappingURL=pino.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../../src/transports/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../../src/transports/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;CAAG;AAEvE,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,qCAAqC;IACrC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9C,8BAA8B;IAC9B,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC;IACjC,uCAAuC;IACvC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAClD,gCAAgC;IAChC,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;IACnC,wCAAwC;IACxC,MAAM,IAAI,IAAI,CAAC;IACf,yCAAyC;IACzC,OAAO,IAAI,IAAI,CAAC;IAChB,+CAA+C;IAC/C,SAAS,IAAI,OAAO,CAAC;IACrB,8CAA8C;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAA8B,aAAa,CAAC,IAAI,GAAE,oBAAyB,wCAiB1E;AAED;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,oBAAyB,GAAG,mBAAmB,CAoDrF"}
|
package/dist/transports/pino.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import build from "pino-abstract-transport";
|
|
2
2
|
import { AbbacchioClient } from "../client.js";
|
|
3
|
+
import { Transform } from "stream";
|
|
3
4
|
/**
|
|
4
5
|
* Pino transport for Abbacchio.
|
|
5
6
|
*
|
|
@@ -13,6 +14,7 @@ import { AbbacchioClient } from "../client.js";
|
|
|
13
14
|
* options: {
|
|
14
15
|
* url: "http://localhost:4000/api/logs",
|
|
15
16
|
* channel: "my-app",
|
|
17
|
+
* namespace: "auth-service",
|
|
16
18
|
* secretKey: "optional-encryption-key",
|
|
17
19
|
* },
|
|
18
20
|
* },
|
|
@@ -39,4 +41,72 @@ export default async function pinoTransport(opts = {}) {
|
|
|
39
41
|
* Named export for programmatic usage
|
|
40
42
|
*/
|
|
41
43
|
export { pinoTransport };
|
|
44
|
+
/**
|
|
45
|
+
* Create a Pino destination stream with direct access to the client.
|
|
46
|
+
* Use this when you need to change the channel dynamically.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import pino from "pino";
|
|
51
|
+
* import { createPinoStream } from "@abbacchio/transport/transports/pino";
|
|
52
|
+
*
|
|
53
|
+
* const stream = createPinoStream({
|
|
54
|
+
* url: "http://localhost:4000/api/logs",
|
|
55
|
+
* channel: "initial-channel",
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* const logger = pino(stream);
|
|
59
|
+
*
|
|
60
|
+
* logger.info("Log to initial channel");
|
|
61
|
+
*
|
|
62
|
+
* // Change channel dynamically
|
|
63
|
+
* stream.setChannel("new-channel");
|
|
64
|
+
*
|
|
65
|
+
* logger.info("Log to new channel");
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function createPinoStream(opts = {}) {
|
|
69
|
+
const client = new AbbacchioClient(opts);
|
|
70
|
+
const stream = new Transform({
|
|
71
|
+
objectMode: true,
|
|
72
|
+
transform(chunk, _encoding, callback) {
|
|
73
|
+
try {
|
|
74
|
+
const log = typeof chunk === "string" ? JSON.parse(chunk) : chunk;
|
|
75
|
+
client.add(log);
|
|
76
|
+
callback();
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
callback(err);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
flush(callback) {
|
|
83
|
+
client.flush().then(() => callback()).catch(callback);
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
stream.setChannel = (channel) => {
|
|
87
|
+
client.setChannel(channel);
|
|
88
|
+
};
|
|
89
|
+
stream.getChannel = () => {
|
|
90
|
+
return client.getChannel();
|
|
91
|
+
};
|
|
92
|
+
stream.setNamespace = (namespace) => {
|
|
93
|
+
client.setNamespace(namespace);
|
|
94
|
+
};
|
|
95
|
+
stream.getNamespace = () => {
|
|
96
|
+
return client.getNamespace();
|
|
97
|
+
};
|
|
98
|
+
stream.enable = () => {
|
|
99
|
+
client.enable();
|
|
100
|
+
};
|
|
101
|
+
stream.disable = () => {
|
|
102
|
+
client.disable();
|
|
103
|
+
};
|
|
104
|
+
stream.isEnabled = () => {
|
|
105
|
+
return client.isEnabled();
|
|
106
|
+
};
|
|
107
|
+
stream.close = async () => {
|
|
108
|
+
await client.close();
|
|
109
|
+
};
|
|
110
|
+
return stream;
|
|
111
|
+
}
|
|
42
112
|
//# sourceMappingURL=pino.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/transports/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/transports/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAuBnC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B,EAAE;IACzE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAEzC,OAAO,KAAK,CACV,KAAK,WAAW,MAAM;QACpB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,2BAA2B;QAC3B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,EACD;QACE,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B,EAAE;IAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,UAAU,EAAE,IAAI;QAChB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ;YAClC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAClE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAY,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAAQ;YACZ,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;KACF,CAAwB,CAAC;IAE1B,MAAM,CAAC,UAAU,GAAG,CAAC,OAA2B,EAAE,EAAE;QAClD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE;QACvB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,CAAC,YAAY,GAAG,CAAC,SAA6B,EAAE,EAAE;QACtD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,CAAC,YAAY,GAAG,GAAG,EAAE;QACzB,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;QACnB,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE;QACtB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -42,6 +42,34 @@ export declare class AbbacchioWinstonTransport extends TransportStream {
|
|
|
42
42
|
* Convert Winston level string to Pino-style number
|
|
43
43
|
*/
|
|
44
44
|
private levelToNumber;
|
|
45
|
+
/**
|
|
46
|
+
* Change the channel dynamically
|
|
47
|
+
*/
|
|
48
|
+
setChannel(channel: string | undefined): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get the current channel
|
|
51
|
+
*/
|
|
52
|
+
getChannel(): string | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Change the namespace dynamically
|
|
55
|
+
*/
|
|
56
|
+
setNamespace(namespace: string | undefined): void;
|
|
57
|
+
/**
|
|
58
|
+
* Get the current namespace
|
|
59
|
+
*/
|
|
60
|
+
getNamespace(): string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Enable sending logs to the server
|
|
63
|
+
*/
|
|
64
|
+
enable(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Disable sending logs to the server
|
|
67
|
+
*/
|
|
68
|
+
disable(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Check if the client is currently enabled
|
|
71
|
+
*/
|
|
72
|
+
isEnabled(): boolean;
|
|
45
73
|
/**
|
|
46
74
|
* Close the transport
|
|
47
75
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston.d.ts","sourceRoot":"","sources":["../../src/transports/winston.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,GAAE,uBAA4B;IAK9C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAY9D;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,uBAAuB,GAAG,yBAAyB,CAE1F;AAED,eAAe,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"winston.d.ts","sourceRoot":"","sources":["../../src/transports/winston.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,yBAA0B,SAAQ,eAAe;IAC5D,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,GAAE,uBAA4B;IAK9C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAY9D;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIjD;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,uBAAuB,GAAG,yBAAyB,CAE1F;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -68,6 +68,48 @@ export class AbbacchioWinstonTransport extends TransportStream {
|
|
|
68
68
|
};
|
|
69
69
|
return levels[level] || 30;
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Change the channel dynamically
|
|
73
|
+
*/
|
|
74
|
+
setChannel(channel) {
|
|
75
|
+
this.client.setChannel(channel);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the current channel
|
|
79
|
+
*/
|
|
80
|
+
getChannel() {
|
|
81
|
+
return this.client.getChannel();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Change the namespace dynamically
|
|
85
|
+
*/
|
|
86
|
+
setNamespace(namespace) {
|
|
87
|
+
this.client.setNamespace(namespace);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the current namespace
|
|
91
|
+
*/
|
|
92
|
+
getNamespace() {
|
|
93
|
+
return this.client.getNamespace();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Enable sending logs to the server
|
|
97
|
+
*/
|
|
98
|
+
enable() {
|
|
99
|
+
this.client.enable();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Disable sending logs to the server
|
|
103
|
+
*/
|
|
104
|
+
disable() {
|
|
105
|
+
this.client.disable();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if the client is currently enabled
|
|
109
|
+
*/
|
|
110
|
+
isEnabled() {
|
|
111
|
+
return this.client.isEnabled();
|
|
112
|
+
}
|
|
71
113
|
/**
|
|
72
114
|
* Close the transport
|
|
73
115
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../src/transports/winston.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAO5E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IACpD,MAAM,CAAkB;IAEhC,YAAY,OAAgC,EAAE;QAC5C,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAA6B,EAAE,QAAoB;QACrD,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAA6B;QAChD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAEpD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAe,CAAC;YAC1C,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAmB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtE,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAa;QACjC,MAAM,MAAM,GAA2B;YACrC,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;SACV,CAAC;QACF,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA8B;IAC7D,OAAO,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"winston.js","sourceRoot":"","sources":["../../src/transports/winston.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAA+B,MAAM,cAAc,CAAC;AAO5E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IACpD,MAAM,CAAkB;IAEhC,YAAY,OAAgC,EAAE;QAC5C,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAA6B,EAAE,QAAoB;QACrD,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAA6B;QAChD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAEpD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAe,CAAC;YAC1C,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAmB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtE,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAa;QACjC,MAAM,MAAM,GAA2B;YACrC,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;SACV,CAAC;QACF,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAA2B;QACpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAA6B;QACxC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA8B;IAC7D,OAAO,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -7,12 +7,16 @@ export interface AbbacchioClientOptions {
|
|
|
7
7
|
secretKey?: string;
|
|
8
8
|
/** Channel/app name for multi-app support. Defaults to 'default' */
|
|
9
9
|
channel?: string;
|
|
10
|
+
/** Default namespace for all logs. Per-log namespace/name fields take precedence */
|
|
11
|
+
namespace?: string;
|
|
10
12
|
/** Number of logs to batch before sending. Defaults to 10 */
|
|
11
13
|
batchSize?: number;
|
|
12
14
|
/** Interval in ms between flushes. Defaults to 1000 */
|
|
13
15
|
interval?: number;
|
|
14
16
|
/** Additional headers to send with requests */
|
|
15
17
|
headers?: Record<string, string>;
|
|
18
|
+
/** Whether to send logs to the server. Defaults to true */
|
|
19
|
+
enabled?: boolean;
|
|
16
20
|
}
|
|
17
21
|
|
|
18
22
|
/**
|
|
@@ -23,9 +27,11 @@ export class AbbacchioClient {
|
|
|
23
27
|
private url: string;
|
|
24
28
|
private secretKey?: string;
|
|
25
29
|
private channel?: string;
|
|
30
|
+
private namespace?: string;
|
|
26
31
|
private batchSize: number;
|
|
27
32
|
private interval: number;
|
|
28
33
|
private headers: Record<string, string>;
|
|
34
|
+
private enabled: boolean;
|
|
29
35
|
|
|
30
36
|
private buffer: unknown[] = [];
|
|
31
37
|
private timer: ReturnType<typeof setTimeout> | null = null;
|
|
@@ -34,25 +40,86 @@ export class AbbacchioClient {
|
|
|
34
40
|
this.url = options.url || "http://localhost:4000/api/logs";
|
|
35
41
|
this.secretKey = options.secretKey;
|
|
36
42
|
this.channel = options.channel;
|
|
43
|
+
this.namespace = options.namespace;
|
|
37
44
|
this.batchSize = options.batchSize || 10;
|
|
38
45
|
this.interval = options.interval || 1000;
|
|
39
46
|
this.headers = options.headers || {};
|
|
47
|
+
this.enabled = options.enabled ?? true;
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
/**
|
|
43
|
-
*
|
|
51
|
+
* Change the channel dynamically after initialization
|
|
52
|
+
*/
|
|
53
|
+
setChannel(channel: string | undefined): void {
|
|
54
|
+
this.channel = channel;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get the current channel
|
|
59
|
+
*/
|
|
60
|
+
getChannel(): string | undefined {
|
|
61
|
+
return this.channel;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Change the namespace dynamically after initialization
|
|
66
|
+
*/
|
|
67
|
+
setNamespace(namespace: string | undefined): void {
|
|
68
|
+
this.namespace = namespace;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get the current namespace
|
|
73
|
+
*/
|
|
74
|
+
getNamespace(): string | undefined {
|
|
75
|
+
return this.namespace;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Enable sending logs to the server
|
|
80
|
+
*/
|
|
81
|
+
enable(): void {
|
|
82
|
+
this.enabled = true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Disable sending logs to the server. Logs will be silently dropped.
|
|
87
|
+
*/
|
|
88
|
+
disable(): void {
|
|
89
|
+
this.enabled = false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Check if the client is currently enabled
|
|
94
|
+
*/
|
|
95
|
+
isEnabled(): boolean {
|
|
96
|
+
return this.enabled;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Process a log entry: inject default namespace, then encrypt if needed
|
|
44
101
|
*/
|
|
45
102
|
private processLog(log: unknown): unknown {
|
|
103
|
+
let processed = log;
|
|
104
|
+
|
|
105
|
+
if (this.namespace && typeof processed === 'object' && processed !== null) {
|
|
106
|
+
const obj = processed as Record<string, unknown>;
|
|
107
|
+
if (!obj.namespace && !obj.name) {
|
|
108
|
+
processed = { ...obj, namespace: this.namespace };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
46
112
|
if (this.secretKey) {
|
|
47
|
-
return { encrypted: encrypt(JSON.stringify(
|
|
113
|
+
return { encrypted: encrypt(JSON.stringify(processed), this.secretKey) };
|
|
48
114
|
}
|
|
49
|
-
return
|
|
115
|
+
return processed;
|
|
50
116
|
}
|
|
51
117
|
|
|
52
118
|
/**
|
|
53
119
|
* Add a log to the buffer and trigger send if needed
|
|
54
120
|
*/
|
|
55
121
|
add(log: unknown): void {
|
|
122
|
+
if (!this.enabled) return;
|
|
56
123
|
this.buffer.push(this.processLog(log));
|
|
57
124
|
|
|
58
125
|
if (this.buffer.length >= this.batchSize) {
|
|
@@ -66,6 +133,7 @@ export class AbbacchioClient {
|
|
|
66
133
|
* Add multiple logs at once
|
|
67
134
|
*/
|
|
68
135
|
addBatch(logs: unknown[]): void {
|
|
136
|
+
if (!this.enabled) return;
|
|
69
137
|
for (const log of logs) {
|
|
70
138
|
this.buffer.push(this.processLog(log));
|
|
71
139
|
}
|
|
@@ -81,6 +149,7 @@ export class AbbacchioClient {
|
|
|
81
149
|
* Send logs immediately without batching
|
|
82
150
|
*/
|
|
83
151
|
async send(logs: unknown[]): Promise<void> {
|
|
152
|
+
if (!this.enabled) return;
|
|
84
153
|
const processedLogs = logs.map(log => this.processLog(log));
|
|
85
154
|
await this.sendToServer(processedLogs);
|
|
86
155
|
}
|
package/src/index.ts
CHANGED
|
@@ -15,5 +15,5 @@ export type { WinstonTransportOptions } from "./transports/winston.js";
|
|
|
15
15
|
export { bunyanStream, AbbacchioBunyanStream } from "./transports/bunyan.js";
|
|
16
16
|
export type { BunyanStreamOptions } from "./transports/bunyan.js";
|
|
17
17
|
|
|
18
|
-
export {
|
|
19
|
-
export type {
|
|
18
|
+
export { createPinoStream } from "./transports/pino.js";
|
|
19
|
+
export type { AbbacchioPinoStream } from "./transports/pino.js";
|
package/src/transports/bunyan.ts
CHANGED
|
@@ -75,6 +75,55 @@ export class AbbacchioBunyanStream extends Writable {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Change the channel dynamically
|
|
80
|
+
*/
|
|
81
|
+
setChannel(channel: string | undefined): void {
|
|
82
|
+
this.client.setChannel(channel);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Get the current channel
|
|
87
|
+
*/
|
|
88
|
+
getChannel(): string | undefined {
|
|
89
|
+
return this.client.getChannel();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Change the namespace dynamically
|
|
94
|
+
*/
|
|
95
|
+
setNamespace(namespace: string | undefined): void {
|
|
96
|
+
this.client.setNamespace(namespace);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get the current namespace
|
|
101
|
+
*/
|
|
102
|
+
getNamespace(): string | undefined {
|
|
103
|
+
return this.client.getNamespace();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Enable sending logs to the server
|
|
108
|
+
*/
|
|
109
|
+
enable(): void {
|
|
110
|
+
this.client.enable();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Disable sending logs to the server
|
|
115
|
+
*/
|
|
116
|
+
disable(): void {
|
|
117
|
+
this.client.disable();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Check if the client is currently enabled
|
|
122
|
+
*/
|
|
123
|
+
isEnabled(): boolean {
|
|
124
|
+
return this.client.isEnabled();
|
|
125
|
+
}
|
|
126
|
+
|
|
78
127
|
/**
|
|
79
128
|
* Close the stream
|
|
80
129
|
*/
|
|
@@ -23,14 +23,16 @@ const methodToLevel: Record<ConsoleMethod, number> = {
|
|
|
23
23
|
*
|
|
24
24
|
* @example
|
|
25
25
|
* ```typescript
|
|
26
|
-
* import { interceptConsole, restoreConsole } from "@abbacchio/
|
|
26
|
+
* import { interceptConsole, restoreConsole } from "@abbacchio/transport/transports/console";
|
|
27
27
|
*
|
|
28
28
|
* // Start intercepting console calls
|
|
29
29
|
* interceptConsole({
|
|
30
30
|
* url: "http://localhost:4000/api/logs",
|
|
31
31
|
* channel: "my-app",
|
|
32
|
+
* namespace: "my-namespace",
|
|
32
33
|
* secretKey: "optional-encryption-key",
|
|
33
34
|
* passthrough: true, // Still log to console
|
|
35
|
+
* enabled: true, // Can be toggled at runtime
|
|
34
36
|
* });
|
|
35
37
|
*
|
|
36
38
|
* console.log("This will be sent to Abbacchio!");
|
|
@@ -138,7 +140,7 @@ export function restoreConsole(): void {
|
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
/**
|
|
141
|
-
* Get the active client (for testing)
|
|
143
|
+
* Get the active client (for testing/runtime control)
|
|
142
144
|
*/
|
|
143
145
|
export function getActiveClient(): AbbacchioClient | null {
|
|
144
146
|
return activeClient;
|
package/src/transports/index.ts
CHANGED
|
@@ -10,6 +10,6 @@ export type { WinstonTransportOptions } from "./winston.js";
|
|
|
10
10
|
export { bunyanStream, AbbacchioBunyanStream } from "./bunyan.js";
|
|
11
11
|
export type { BunyanStreamOptions } from "./bunyan.js";
|
|
12
12
|
|
|
13
|
-
//
|
|
14
|
-
export {
|
|
15
|
-
export type {
|
|
13
|
+
// Pino stream with dynamic channel support
|
|
14
|
+
export { createPinoStream } from "./pino.js";
|
|
15
|
+
export type { AbbacchioPinoStream } from "./pino.js";
|
package/src/transports/pino.ts
CHANGED
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
import build from "pino-abstract-transport";
|
|
2
2
|
import { AbbacchioClient, type AbbacchioClientOptions } from "../client.js";
|
|
3
|
+
import { Transform } from "stream";
|
|
3
4
|
|
|
4
5
|
export interface PinoTransportOptions extends AbbacchioClientOptions {}
|
|
5
6
|
|
|
7
|
+
export interface AbbacchioPinoStream extends Transform {
|
|
8
|
+
/** Change the channel dynamically */
|
|
9
|
+
setChannel(channel: string | undefined): void;
|
|
10
|
+
/** Get the current channel */
|
|
11
|
+
getChannel(): string | undefined;
|
|
12
|
+
/** Change the namespace dynamically */
|
|
13
|
+
setNamespace(namespace: string | undefined): void;
|
|
14
|
+
/** Get the current namespace */
|
|
15
|
+
getNamespace(): string | undefined;
|
|
16
|
+
/** Enable sending logs to the server */
|
|
17
|
+
enable(): void;
|
|
18
|
+
/** Disable sending logs to the server */
|
|
19
|
+
disable(): void;
|
|
20
|
+
/** Check if the client is currently enabled */
|
|
21
|
+
isEnabled(): boolean;
|
|
22
|
+
/** Flush pending logs and close the client */
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
|
|
6
26
|
/**
|
|
7
27
|
* Pino transport for Abbacchio.
|
|
8
28
|
*
|
|
@@ -16,6 +36,7 @@ export interface PinoTransportOptions extends AbbacchioClientOptions {}
|
|
|
16
36
|
* options: {
|
|
17
37
|
* url: "http://localhost:4000/api/logs",
|
|
18
38
|
* channel: "my-app",
|
|
39
|
+
* namespace: "auth-service",
|
|
19
40
|
* secretKey: "optional-encryption-key",
|
|
20
41
|
* },
|
|
21
42
|
* },
|
|
@@ -47,3 +68,81 @@ export default async function pinoTransport(opts: PinoTransportOptions = {}) {
|
|
|
47
68
|
* Named export for programmatic usage
|
|
48
69
|
*/
|
|
49
70
|
export { pinoTransport };
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Create a Pino destination stream with direct access to the client.
|
|
74
|
+
* Use this when you need to change the channel dynamically.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* import pino from "pino";
|
|
79
|
+
* import { createPinoStream } from "@abbacchio/transport/transports/pino";
|
|
80
|
+
*
|
|
81
|
+
* const stream = createPinoStream({
|
|
82
|
+
* url: "http://localhost:4000/api/logs",
|
|
83
|
+
* channel: "initial-channel",
|
|
84
|
+
* });
|
|
85
|
+
*
|
|
86
|
+
* const logger = pino(stream);
|
|
87
|
+
*
|
|
88
|
+
* logger.info("Log to initial channel");
|
|
89
|
+
*
|
|
90
|
+
* // Change channel dynamically
|
|
91
|
+
* stream.setChannel("new-channel");
|
|
92
|
+
*
|
|
93
|
+
* logger.info("Log to new channel");
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export function createPinoStream(opts: PinoTransportOptions = {}): AbbacchioPinoStream {
|
|
97
|
+
const client = new AbbacchioClient(opts);
|
|
98
|
+
|
|
99
|
+
const stream = new Transform({
|
|
100
|
+
objectMode: true,
|
|
101
|
+
transform(chunk, _encoding, callback) {
|
|
102
|
+
try {
|
|
103
|
+
const log = typeof chunk === "string" ? JSON.parse(chunk) : chunk;
|
|
104
|
+
client.add(log);
|
|
105
|
+
callback();
|
|
106
|
+
} catch (err) {
|
|
107
|
+
callback(err as Error);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
flush(callback) {
|
|
111
|
+
client.flush().then(() => callback()).catch(callback);
|
|
112
|
+
},
|
|
113
|
+
}) as AbbacchioPinoStream;
|
|
114
|
+
|
|
115
|
+
stream.setChannel = (channel: string | undefined) => {
|
|
116
|
+
client.setChannel(channel);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
stream.getChannel = () => {
|
|
120
|
+
return client.getChannel();
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
stream.setNamespace = (namespace: string | undefined) => {
|
|
124
|
+
client.setNamespace(namespace);
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
stream.getNamespace = () => {
|
|
128
|
+
return client.getNamespace();
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
stream.enable = () => {
|
|
132
|
+
client.enable();
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
stream.disable = () => {
|
|
136
|
+
client.disable();
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
stream.isEnabled = () => {
|
|
140
|
+
return client.isEnabled();
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
stream.close = async () => {
|
|
144
|
+
await client.close();
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
return stream;
|
|
148
|
+
}
|
|
@@ -82,6 +82,55 @@ export class AbbacchioWinstonTransport extends TransportStream {
|
|
|
82
82
|
return levels[level] || 30;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Change the channel dynamically
|
|
87
|
+
*/
|
|
88
|
+
setChannel(channel: string | undefined): void {
|
|
89
|
+
this.client.setChannel(channel);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Get the current channel
|
|
94
|
+
*/
|
|
95
|
+
getChannel(): string | undefined {
|
|
96
|
+
return this.client.getChannel();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Change the namespace dynamically
|
|
101
|
+
*/
|
|
102
|
+
setNamespace(namespace: string | undefined): void {
|
|
103
|
+
this.client.setNamespace(namespace);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Get the current namespace
|
|
108
|
+
*/
|
|
109
|
+
getNamespace(): string | undefined {
|
|
110
|
+
return this.client.getNamespace();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Enable sending logs to the server
|
|
115
|
+
*/
|
|
116
|
+
enable(): void {
|
|
117
|
+
this.client.enable();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Disable sending logs to the server
|
|
122
|
+
*/
|
|
123
|
+
disable(): void {
|
|
124
|
+
this.client.disable();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Check if the client is currently enabled
|
|
129
|
+
*/
|
|
130
|
+
isEnabled(): boolean {
|
|
131
|
+
return this.client.isEnabled();
|
|
132
|
+
}
|
|
133
|
+
|
|
85
134
|
/**
|
|
86
135
|
* Close the transport
|
|
87
136
|
*/
|