@logtail/pino 0.5.0 → 0.5.3
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/dist/cjs/pino.js +1 -0
- package/dist/cjs/pino.js.map +1 -1
- package/dist/es6/pino.js +1 -0
- package/dist/es6/pino.js.map +1 -1
- package/package.json +4 -4
- package/src/pino.ts +1 -0
- package/dist/cjs/pino.test.d.ts +0 -1
- package/dist/cjs/pino.test.js +0 -246
- package/dist/cjs/pino.test.js.map +0 -1
- package/dist/es6/pino.test.d.ts +0 -1
- package/dist/es6/pino.test.js +0 -241
- package/dist/es6/pino.test.js.map +0 -1
package/dist/cjs/pino.js
CHANGED
|
@@ -17,6 +17,7 @@ const helpers_1 = require("./helpers");
|
|
|
17
17
|
const stackContextHint = {
|
|
18
18
|
fileName: "node_modules/pino",
|
|
19
19
|
methodNames: ["log", "fatal", "error", "warn", "info", "debug", "trace", "silent"],
|
|
20
|
+
required: true,
|
|
20
21
|
};
|
|
21
22
|
async function logtailTransport(options) {
|
|
22
23
|
const logtail = new node_1.Logtail(options.sourceToken, options.options);
|
package/dist/cjs/pino.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/pino.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/pino.ts"],"names":[],"mappings":";;;;;;;;;;;;AA4BA,4CAiDC;AA7ED,sFAA4C;AAE5C,wCAAwC;AAGxC,uCAAwC;AAiBxC,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IAClF,QAAQ,EAAE,IAAI;CACf,CAAC;AAEK,KAAK,UAAU,gBAAgB,CAAC,OAA4B;IACjE,MAAM,OAAO,GAAG,IAAI,cAAO,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,KAAK,EAAE,MAAW,EAAE,EAAE;;;YACtC,KAAsB,eAAA,WAAA,cAAA,MAAM,CAAA,YAAA,4EAAE,CAAC;gBAAT,sBAAM;gBAAN,WAAM;gBAAjB,IAAI,GAAG,KAAA,CAAA;gBAChB,oBAAoB;gBACpB,MAAM,IAAI,GAAY,EAAE,CAAC;gBAEzB,qBAAqB;gBACrB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAED,wCAAwC;gBACxC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;qBACb,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAC1E,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAE5C,cAAc;gBACd,gGAAgG;gBAChG,sGAAsG;gBACtG,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;gBAEnC,0CAA0C;gBAC1C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACvD,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;gBACtC,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,KAAe,CAAC;gBAEpB,IAAI,CAAC;oBACH,KAAK,GAAG,IAAA,qBAAW,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAChD,SAAS;gBACX,CAAC;gBAED,iBAAiB;gBACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAoC,CAAC,CAAC;YACtE,CAAC;;;;;;;;;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC,CAAC;IACF,OAAO,IAAA,iCAAK,EAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/es6/pino.js
CHANGED
|
@@ -11,6 +11,7 @@ import { getLogLevel } from "./helpers";
|
|
|
11
11
|
const stackContextHint = {
|
|
12
12
|
fileName: "node_modules/pino",
|
|
13
13
|
methodNames: ["log", "fatal", "error", "warn", "info", "debug", "trace", "silent"],
|
|
14
|
+
required: true,
|
|
14
15
|
};
|
|
15
16
|
export async function logtailTransport(options) {
|
|
16
17
|
const logtail = new Logtail(options.sourceToken, options.options);
|
package/dist/es6/pino.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/pino.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAiBxC,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/pino.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAiBxC,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IAClF,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA4B;IACjE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,KAAK,EAAE,MAAW,EAAE,EAAE;;;YACtC,KAAsB,eAAA,WAAA,cAAA,MAAM,CAAA,YAAA,4EAAE,CAAC;gBAAT,sBAAM;gBAAN,WAAM;gBAAjB,IAAI,GAAG,KAAA,CAAA;gBAChB,oBAAoB;gBACpB,MAAM,IAAI,GAAY,EAAE,CAAC;gBAEzB,qBAAqB;gBACrB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAED,wCAAwC;gBACxC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;qBACb,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBAC1E,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAE5C,cAAc;gBACd,gGAAgG;gBAChG,sGAAsG;gBACtG,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;gBAEnC,0CAA0C;gBAC1C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACvD,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;gBACtC,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,KAAe,CAAC;gBAEpB,IAAI,CAAC;oBACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAChD,SAAS;gBACX,CAAC;gBAED,iBAAiB;gBACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAoC,CAAC,CAAC;YACtE,CAAC;;;;;;;;;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC,CAAC;IACF,OAAO,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logtail/pino",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "Better Stack Pino transport (formerly Logtail)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Better Stack",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"pino": "^7.0.0 || ^8.0.0 || ^9.0.0"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@logtail/node": "^0.5.
|
|
36
|
-
"@logtail/types": "^0.5.
|
|
35
|
+
"@logtail/node": "^0.5.3",
|
|
36
|
+
"@logtail/types": "^0.5.3",
|
|
37
37
|
"pino-abstract-transport": "^1.0.0"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
45
45
|
},
|
|
46
46
|
"private": false,
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "4e656e66560fa1a16f82bbb12df7ba6769ed15eb"
|
|
48
48
|
}
|
package/src/pino.ts
CHANGED
|
@@ -23,6 +23,7 @@ export interface IPinoLogtailOptions {
|
|
|
23
23
|
const stackContextHint = {
|
|
24
24
|
fileName: "node_modules/pino",
|
|
25
25
|
methodNames: ["log", "fatal", "error", "warn", "info", "debug", "trace", "silent"],
|
|
26
|
+
required: true,
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
export async function logtailTransport(options: IPinoLogtailOptions) {
|
package/dist/cjs/pino.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/cjs/pino.test.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const pino_1 = __importDefault(require("pino"));
|
|
7
|
-
const types_1 = require("@logtail/types");
|
|
8
|
-
const pino_2 = require("./pino");
|
|
9
|
-
// TODO: REMOVE
|
|
10
|
-
let winston, LogtailTransport;
|
|
11
|
-
// Sample log message
|
|
12
|
-
const message = "Something to do with something";
|
|
13
|
-
/**
|
|
14
|
-
* Test a Winston level vs. Logtail level
|
|
15
|
-
* @param level - Winston log level
|
|
16
|
-
* @param logLevel LogLevel - Logtail log level
|
|
17
|
-
* @param levels Use custom log levels
|
|
18
|
-
*/
|
|
19
|
-
async function testLevel(level, logLevel, levels) {
|
|
20
|
-
// Sample log
|
|
21
|
-
const log = {
|
|
22
|
-
level,
|
|
23
|
-
message,
|
|
24
|
-
};
|
|
25
|
-
// Logtail fixtures
|
|
26
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
27
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
28
|
-
// logtail.setSync(async logs => {
|
|
29
|
-
// resolve(logs);
|
|
30
|
-
// return logs;
|
|
31
|
-
// });
|
|
32
|
-
// });
|
|
33
|
-
// Create a Pino logger
|
|
34
|
-
const syncedLogs = [];
|
|
35
|
-
const sync = async (logs) => {
|
|
36
|
-
logs.forEach(log => syncedLogs.push(log));
|
|
37
|
-
return logs;
|
|
38
|
-
};
|
|
39
|
-
const transport = (0, pino_2.logtailTransport)({ sourceToken: 'test', options: { batchInterval: 100 }, sync });
|
|
40
|
-
const logger = (0, pino_1.default)(transport);
|
|
41
|
-
// Log it!
|
|
42
|
-
logger.info("Hello world!");
|
|
43
|
-
await new Promise(resolve => {
|
|
44
|
-
setTimeout(() => resolve(true), 500);
|
|
45
|
-
});
|
|
46
|
-
// Should be exactly one log
|
|
47
|
-
expect(syncedLogs.length).toBe(1);
|
|
48
|
-
// Message should match
|
|
49
|
-
expect(syncedLogs[0].message).toBe(log.message);
|
|
50
|
-
// Log level should be 'logLevel'
|
|
51
|
-
expect(syncedLogs[0].level).toBe(logLevel);
|
|
52
|
-
}
|
|
53
|
-
describe("Winston logging tests", () => {
|
|
54
|
-
const levels = {
|
|
55
|
-
silly: types_1.LogLevel.Silly,
|
|
56
|
-
debug: types_1.LogLevel.Debug,
|
|
57
|
-
http: types_1.LogLevel.Http,
|
|
58
|
-
verbose: types_1.LogLevel.Verbose,
|
|
59
|
-
warn: types_1.LogLevel.Warn,
|
|
60
|
-
error: types_1.LogLevel.Error,
|
|
61
|
-
};
|
|
62
|
-
for (const key in levels) {
|
|
63
|
-
it(`should log at the '${key}' level`, async () => {
|
|
64
|
-
return testLevel(key, levels[key]);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
//
|
|
68
|
-
// it("should sync multiple logs", async () => {
|
|
69
|
-
// // Create multiple log entries
|
|
70
|
-
// const entries: any[] = [
|
|
71
|
-
// {
|
|
72
|
-
// level: "info",
|
|
73
|
-
// message: `${message} 1`,
|
|
74
|
-
// },
|
|
75
|
-
// {
|
|
76
|
-
// level: "debug",
|
|
77
|
-
// message: `${message} 2`,
|
|
78
|
-
// },
|
|
79
|
-
// {
|
|
80
|
-
// level: "warn",
|
|
81
|
-
// message: `${message} 3`,
|
|
82
|
-
// },
|
|
83
|
-
// {
|
|
84
|
-
// level: "error",
|
|
85
|
-
// message: `${message} 4`,
|
|
86
|
-
// },
|
|
87
|
-
// ];
|
|
88
|
-
//
|
|
89
|
-
// // Fixtures
|
|
90
|
-
// const logtail = new Logtail("test", {
|
|
91
|
-
// throwExceptions: true,
|
|
92
|
-
// batchInterval: 1000, // <-- shouldn't be exceeded
|
|
93
|
-
// batchSize: entries.length,
|
|
94
|
-
// });
|
|
95
|
-
//
|
|
96
|
-
// logtail.setSync(async logs => {
|
|
97
|
-
// expect(logs.length).toBe(entries.length);
|
|
98
|
-
//
|
|
99
|
-
// // Logs should be identical
|
|
100
|
-
// const isIdentical = logs.every(
|
|
101
|
-
// log =>
|
|
102
|
-
// entries.findIndex(entry => {
|
|
103
|
-
// return entry.message == log.message;
|
|
104
|
-
// }) > -1,
|
|
105
|
-
// );
|
|
106
|
-
// expect(isIdentical).toBe(true);
|
|
107
|
-
//
|
|
108
|
-
// return logs;
|
|
109
|
-
// });
|
|
110
|
-
//
|
|
111
|
-
// // Create a Winston logger
|
|
112
|
-
// const logger = winston.createLogger({
|
|
113
|
-
// level: "debug", // <-- debug and above
|
|
114
|
-
// transports: [new LogtailTransport(logtail)],
|
|
115
|
-
// });
|
|
116
|
-
//
|
|
117
|
-
// entries.forEach(entry => logger.log(entry.level, entry.message));
|
|
118
|
-
// });
|
|
119
|
-
//
|
|
120
|
-
// it("should log metadata with the message and level", async () => {
|
|
121
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
122
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
123
|
-
// logtail.setSync(async logs => {
|
|
124
|
-
// resolve(logs);
|
|
125
|
-
// return logs;
|
|
126
|
-
// });
|
|
127
|
-
// });
|
|
128
|
-
//
|
|
129
|
-
// // Create a Winston logger
|
|
130
|
-
// const logger = winston.createLogger({
|
|
131
|
-
// level: LogLevel.Info,
|
|
132
|
-
// transports: [new LogtailTransport(logtail)],
|
|
133
|
-
// });
|
|
134
|
-
//
|
|
135
|
-
// // Log it!
|
|
136
|
-
// logger.log(LogLevel.Info, "a test message", { request_id: 123 });
|
|
137
|
-
//
|
|
138
|
-
// const logs = await logged;
|
|
139
|
-
//
|
|
140
|
-
// // Should be exactly one log
|
|
141
|
-
// expect(logs.length).toBe(1);
|
|
142
|
-
//
|
|
143
|
-
// // Message should match
|
|
144
|
-
// expect(logs[0].message).toBe("a test message");
|
|
145
|
-
//
|
|
146
|
-
// // Log level should be 'info'
|
|
147
|
-
// expect(logs[0].level).toBe(LogLevel.Info);
|
|
148
|
-
//
|
|
149
|
-
// expect(logs[0]["request_id"]).toBe(123);
|
|
150
|
-
// });
|
|
151
|
-
//
|
|
152
|
-
// it("should log defaultMetadata with the message and level", async () => {
|
|
153
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
154
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
155
|
-
// logtail.setSync(async logs => {
|
|
156
|
-
// resolve(logs);
|
|
157
|
-
// return logs;
|
|
158
|
-
// });
|
|
159
|
-
// });
|
|
160
|
-
//
|
|
161
|
-
// // Create a Winston logger
|
|
162
|
-
// const logger = winston.createLogger({
|
|
163
|
-
// level: LogLevel.Info,
|
|
164
|
-
// transports: [new LogtailTransport(logtail)],
|
|
165
|
-
// defaultMeta: {
|
|
166
|
-
// component: "server",
|
|
167
|
-
// },
|
|
168
|
-
// });
|
|
169
|
-
//
|
|
170
|
-
// // Log it!
|
|
171
|
-
// logger.log(LogLevel.Info, "a test message", { request_id: 123 });
|
|
172
|
-
//
|
|
173
|
-
// const logs = await logged;
|
|
174
|
-
//
|
|
175
|
-
// // Should be exactly one log
|
|
176
|
-
// expect(logs.length).toBe(1);
|
|
177
|
-
//
|
|
178
|
-
// // Message should match
|
|
179
|
-
// expect(logs[0].message).toBe("a test message");
|
|
180
|
-
//
|
|
181
|
-
// // Log level should be 'info'
|
|
182
|
-
// expect(logs[0].level).toBe(LogLevel.Info);
|
|
183
|
-
//
|
|
184
|
-
// expect(logs[0]["request_id"]).toBe(123);
|
|
185
|
-
// expect(logs[0]["component"]).toBe("server");
|
|
186
|
-
// });
|
|
187
|
-
//
|
|
188
|
-
// it("should include correct context fields", async () => {
|
|
189
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
190
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
191
|
-
// logtail.setSync(async logs => {
|
|
192
|
-
// resolve(logs);
|
|
193
|
-
// return logs;
|
|
194
|
-
// });
|
|
195
|
-
// });
|
|
196
|
-
//
|
|
197
|
-
// // Create a Winston logger
|
|
198
|
-
// const logger = winston.createLogger({
|
|
199
|
-
// level: LogLevel.Info,
|
|
200
|
-
// transports: [new LogtailTransport(logtail)],
|
|
201
|
-
// defaultMeta: {
|
|
202
|
-
// component: "server",
|
|
203
|
-
// },
|
|
204
|
-
// });
|
|
205
|
-
//
|
|
206
|
-
// logger.info("message with context");
|
|
207
|
-
//
|
|
208
|
-
// const logs = await logged;
|
|
209
|
-
//
|
|
210
|
-
// const context = logs[0].context;
|
|
211
|
-
// expect(context.runtime.file).toMatch("winston.test.ts");
|
|
212
|
-
// });
|
|
213
|
-
//
|
|
214
|
-
// it("should flush logtail when the logger is closed", async () => {
|
|
215
|
-
// let logs: ILogtailLog[] = [];
|
|
216
|
-
//
|
|
217
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
218
|
-
//
|
|
219
|
-
// logtail.setSync(async (_logs: ILogtailLog[]) => {
|
|
220
|
-
// logs.push(..._logs);
|
|
221
|
-
// return logs;
|
|
222
|
-
// });
|
|
223
|
-
//
|
|
224
|
-
// const logger = winston.createLogger({
|
|
225
|
-
// level: LogLevel.Info,
|
|
226
|
-
// transports: [new LogtailTransport(logtail)],
|
|
227
|
-
// });
|
|
228
|
-
//
|
|
229
|
-
// const finished = new Promise<void>(resolve => {
|
|
230
|
-
// logger.on("finish", resolve);
|
|
231
|
-
// });
|
|
232
|
-
//
|
|
233
|
-
// // Act
|
|
234
|
-
// logger.info("a test message");
|
|
235
|
-
// logger.end();
|
|
236
|
-
//
|
|
237
|
-
// await finished;
|
|
238
|
-
//
|
|
239
|
-
// // Should be exactly one log
|
|
240
|
-
// expect(logs.length).toBe(1);
|
|
241
|
-
//
|
|
242
|
-
// // Message should match
|
|
243
|
-
// expect(logs[0].message).toBe("a test message");
|
|
244
|
-
// });
|
|
245
|
-
});
|
|
246
|
-
//# sourceMappingURL=pino.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pino.test.js","sourceRoot":"","sources":["../../src/pino.test.ts"],"names":[],"mappings":"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"}
|
package/dist/es6/pino.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/es6/pino.test.js
DELETED
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import pino from "pino";
|
|
2
|
-
import { LogLevel } from "@logtail/types";
|
|
3
|
-
import { logtailTransport } from "./pino";
|
|
4
|
-
// TODO: REMOVE
|
|
5
|
-
let winston, LogtailTransport;
|
|
6
|
-
// Sample log message
|
|
7
|
-
const message = "Something to do with something";
|
|
8
|
-
/**
|
|
9
|
-
* Test a Winston level vs. Logtail level
|
|
10
|
-
* @param level - Winston log level
|
|
11
|
-
* @param logLevel LogLevel - Logtail log level
|
|
12
|
-
* @param levels Use custom log levels
|
|
13
|
-
*/
|
|
14
|
-
async function testLevel(level, logLevel, levels) {
|
|
15
|
-
// Sample log
|
|
16
|
-
const log = {
|
|
17
|
-
level,
|
|
18
|
-
message,
|
|
19
|
-
};
|
|
20
|
-
// Logtail fixtures
|
|
21
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
22
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
23
|
-
// logtail.setSync(async logs => {
|
|
24
|
-
// resolve(logs);
|
|
25
|
-
// return logs;
|
|
26
|
-
// });
|
|
27
|
-
// });
|
|
28
|
-
// Create a Pino logger
|
|
29
|
-
const syncedLogs = [];
|
|
30
|
-
const sync = async (logs) => {
|
|
31
|
-
logs.forEach(log => syncedLogs.push(log));
|
|
32
|
-
return logs;
|
|
33
|
-
};
|
|
34
|
-
const transport = logtailTransport({ sourceToken: 'test', options: { batchInterval: 100 }, sync });
|
|
35
|
-
const logger = pino(transport);
|
|
36
|
-
// Log it!
|
|
37
|
-
logger.info("Hello world!");
|
|
38
|
-
await new Promise(resolve => {
|
|
39
|
-
setTimeout(() => resolve(true), 500);
|
|
40
|
-
});
|
|
41
|
-
// Should be exactly one log
|
|
42
|
-
expect(syncedLogs.length).toBe(1);
|
|
43
|
-
// Message should match
|
|
44
|
-
expect(syncedLogs[0].message).toBe(log.message);
|
|
45
|
-
// Log level should be 'logLevel'
|
|
46
|
-
expect(syncedLogs[0].level).toBe(logLevel);
|
|
47
|
-
}
|
|
48
|
-
describe("Winston logging tests", () => {
|
|
49
|
-
const levels = {
|
|
50
|
-
silly: LogLevel.Silly,
|
|
51
|
-
debug: LogLevel.Debug,
|
|
52
|
-
http: LogLevel.Http,
|
|
53
|
-
verbose: LogLevel.Verbose,
|
|
54
|
-
warn: LogLevel.Warn,
|
|
55
|
-
error: LogLevel.Error,
|
|
56
|
-
};
|
|
57
|
-
for (const key in levels) {
|
|
58
|
-
it(`should log at the '${key}' level`, async () => {
|
|
59
|
-
return testLevel(key, levels[key]);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
//
|
|
63
|
-
// it("should sync multiple logs", async () => {
|
|
64
|
-
// // Create multiple log entries
|
|
65
|
-
// const entries: any[] = [
|
|
66
|
-
// {
|
|
67
|
-
// level: "info",
|
|
68
|
-
// message: `${message} 1`,
|
|
69
|
-
// },
|
|
70
|
-
// {
|
|
71
|
-
// level: "debug",
|
|
72
|
-
// message: `${message} 2`,
|
|
73
|
-
// },
|
|
74
|
-
// {
|
|
75
|
-
// level: "warn",
|
|
76
|
-
// message: `${message} 3`,
|
|
77
|
-
// },
|
|
78
|
-
// {
|
|
79
|
-
// level: "error",
|
|
80
|
-
// message: `${message} 4`,
|
|
81
|
-
// },
|
|
82
|
-
// ];
|
|
83
|
-
//
|
|
84
|
-
// // Fixtures
|
|
85
|
-
// const logtail = new Logtail("test", {
|
|
86
|
-
// throwExceptions: true,
|
|
87
|
-
// batchInterval: 1000, // <-- shouldn't be exceeded
|
|
88
|
-
// batchSize: entries.length,
|
|
89
|
-
// });
|
|
90
|
-
//
|
|
91
|
-
// logtail.setSync(async logs => {
|
|
92
|
-
// expect(logs.length).toBe(entries.length);
|
|
93
|
-
//
|
|
94
|
-
// // Logs should be identical
|
|
95
|
-
// const isIdentical = logs.every(
|
|
96
|
-
// log =>
|
|
97
|
-
// entries.findIndex(entry => {
|
|
98
|
-
// return entry.message == log.message;
|
|
99
|
-
// }) > -1,
|
|
100
|
-
// );
|
|
101
|
-
// expect(isIdentical).toBe(true);
|
|
102
|
-
//
|
|
103
|
-
// return logs;
|
|
104
|
-
// });
|
|
105
|
-
//
|
|
106
|
-
// // Create a Winston logger
|
|
107
|
-
// const logger = winston.createLogger({
|
|
108
|
-
// level: "debug", // <-- debug and above
|
|
109
|
-
// transports: [new LogtailTransport(logtail)],
|
|
110
|
-
// });
|
|
111
|
-
//
|
|
112
|
-
// entries.forEach(entry => logger.log(entry.level, entry.message));
|
|
113
|
-
// });
|
|
114
|
-
//
|
|
115
|
-
// it("should log metadata with the message and level", async () => {
|
|
116
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
117
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
118
|
-
// logtail.setSync(async logs => {
|
|
119
|
-
// resolve(logs);
|
|
120
|
-
// return logs;
|
|
121
|
-
// });
|
|
122
|
-
// });
|
|
123
|
-
//
|
|
124
|
-
// // Create a Winston logger
|
|
125
|
-
// const logger = winston.createLogger({
|
|
126
|
-
// level: LogLevel.Info,
|
|
127
|
-
// transports: [new LogtailTransport(logtail)],
|
|
128
|
-
// });
|
|
129
|
-
//
|
|
130
|
-
// // Log it!
|
|
131
|
-
// logger.log(LogLevel.Info, "a test message", { request_id: 123 });
|
|
132
|
-
//
|
|
133
|
-
// const logs = await logged;
|
|
134
|
-
//
|
|
135
|
-
// // Should be exactly one log
|
|
136
|
-
// expect(logs.length).toBe(1);
|
|
137
|
-
//
|
|
138
|
-
// // Message should match
|
|
139
|
-
// expect(logs[0].message).toBe("a test message");
|
|
140
|
-
//
|
|
141
|
-
// // Log level should be 'info'
|
|
142
|
-
// expect(logs[0].level).toBe(LogLevel.Info);
|
|
143
|
-
//
|
|
144
|
-
// expect(logs[0]["request_id"]).toBe(123);
|
|
145
|
-
// });
|
|
146
|
-
//
|
|
147
|
-
// it("should log defaultMetadata with the message and level", async () => {
|
|
148
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
149
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
150
|
-
// logtail.setSync(async logs => {
|
|
151
|
-
// resolve(logs);
|
|
152
|
-
// return logs;
|
|
153
|
-
// });
|
|
154
|
-
// });
|
|
155
|
-
//
|
|
156
|
-
// // Create a Winston logger
|
|
157
|
-
// const logger = winston.createLogger({
|
|
158
|
-
// level: LogLevel.Info,
|
|
159
|
-
// transports: [new LogtailTransport(logtail)],
|
|
160
|
-
// defaultMeta: {
|
|
161
|
-
// component: "server",
|
|
162
|
-
// },
|
|
163
|
-
// });
|
|
164
|
-
//
|
|
165
|
-
// // Log it!
|
|
166
|
-
// logger.log(LogLevel.Info, "a test message", { request_id: 123 });
|
|
167
|
-
//
|
|
168
|
-
// const logs = await logged;
|
|
169
|
-
//
|
|
170
|
-
// // Should be exactly one log
|
|
171
|
-
// expect(logs.length).toBe(1);
|
|
172
|
-
//
|
|
173
|
-
// // Message should match
|
|
174
|
-
// expect(logs[0].message).toBe("a test message");
|
|
175
|
-
//
|
|
176
|
-
// // Log level should be 'info'
|
|
177
|
-
// expect(logs[0].level).toBe(LogLevel.Info);
|
|
178
|
-
//
|
|
179
|
-
// expect(logs[0]["request_id"]).toBe(123);
|
|
180
|
-
// expect(logs[0]["component"]).toBe("server");
|
|
181
|
-
// });
|
|
182
|
-
//
|
|
183
|
-
// it("should include correct context fields", async () => {
|
|
184
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
185
|
-
// const logged = new Promise<ILogtailLog[]>(resolve => {
|
|
186
|
-
// logtail.setSync(async logs => {
|
|
187
|
-
// resolve(logs);
|
|
188
|
-
// return logs;
|
|
189
|
-
// });
|
|
190
|
-
// });
|
|
191
|
-
//
|
|
192
|
-
// // Create a Winston logger
|
|
193
|
-
// const logger = winston.createLogger({
|
|
194
|
-
// level: LogLevel.Info,
|
|
195
|
-
// transports: [new LogtailTransport(logtail)],
|
|
196
|
-
// defaultMeta: {
|
|
197
|
-
// component: "server",
|
|
198
|
-
// },
|
|
199
|
-
// });
|
|
200
|
-
//
|
|
201
|
-
// logger.info("message with context");
|
|
202
|
-
//
|
|
203
|
-
// const logs = await logged;
|
|
204
|
-
//
|
|
205
|
-
// const context = logs[0].context;
|
|
206
|
-
// expect(context.runtime.file).toMatch("winston.test.ts");
|
|
207
|
-
// });
|
|
208
|
-
//
|
|
209
|
-
// it("should flush logtail when the logger is closed", async () => {
|
|
210
|
-
// let logs: ILogtailLog[] = [];
|
|
211
|
-
//
|
|
212
|
-
// const logtail = new Logtail("test", { throwExceptions: true });
|
|
213
|
-
//
|
|
214
|
-
// logtail.setSync(async (_logs: ILogtailLog[]) => {
|
|
215
|
-
// logs.push(..._logs);
|
|
216
|
-
// return logs;
|
|
217
|
-
// });
|
|
218
|
-
//
|
|
219
|
-
// const logger = winston.createLogger({
|
|
220
|
-
// level: LogLevel.Info,
|
|
221
|
-
// transports: [new LogtailTransport(logtail)],
|
|
222
|
-
// });
|
|
223
|
-
//
|
|
224
|
-
// const finished = new Promise<void>(resolve => {
|
|
225
|
-
// logger.on("finish", resolve);
|
|
226
|
-
// });
|
|
227
|
-
//
|
|
228
|
-
// // Act
|
|
229
|
-
// logger.info("a test message");
|
|
230
|
-
// logger.end();
|
|
231
|
-
//
|
|
232
|
-
// await finished;
|
|
233
|
-
//
|
|
234
|
-
// // Should be exactly one log
|
|
235
|
-
// expect(logs.length).toBe(1);
|
|
236
|
-
//
|
|
237
|
-
// // Message should match
|
|
238
|
-
// expect(logs[0].message).toBe("a test message");
|
|
239
|
-
// });
|
|
240
|
-
});
|
|
241
|
-
//# sourceMappingURL=pino.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pino.test.js","sourceRoot":"","sources":["../../src/pino.test.ts"],"names":[],"mappings":"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"}
|