@logtail/pino 0.4.22 → 0.5.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/dist/cjs/helpers.js +1 -2
- package/dist/cjs/helpers.js.map +1 -1
- package/dist/cjs/pino.d.ts +0 -1
- package/dist/cjs/pino.js +32 -38
- package/dist/cjs/pino.js.map +1 -1
- package/dist/cjs/pino.test.d.ts +1 -0
- package/dist/cjs/pino.test.js +246 -0
- package/dist/cjs/pino.test.js.map +1 -0
- package/dist/es6/helpers.js.map +1 -1
- package/dist/es6/pino.d.ts +0 -1
- package/dist/es6/pino.js +31 -36
- package/dist/es6/pino.js.map +1 -1
- package/dist/es6/pino.test.d.ts +1 -0
- package/dist/es6/pino.test.js +241 -0
- package/dist/es6/pino.test.js.map +1 -0
- package/package.json +4 -8
- package/src/pino.ts +2 -2
package/dist/cjs/helpers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLogLevel =
|
|
3
|
+
exports.getLogLevel = getLogLevel;
|
|
4
4
|
const types_1 = require("@logtail/types");
|
|
5
5
|
/**
|
|
6
6
|
* Return a Logtail `LogLevel` based on the Pino level
|
|
@@ -30,5 +30,4 @@ function getLogLevel(level) {
|
|
|
30
30
|
// Everything above this level is considered fatal
|
|
31
31
|
return types_1.LogLevel.Fatal;
|
|
32
32
|
}
|
|
33
|
-
exports.getLogLevel = getLogLevel;
|
|
34
33
|
//# sourceMappingURL=helpers.js.map
|
package/dist/cjs/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;AAMA,kCA2BC;AAjCD,0CAA0C;AAE1C;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,WAAW;IACX,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,gBAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,gBAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,gBAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,gBAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,gBAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,kDAAkD;IAClD,OAAO,gBAAQ,CAAC,KAAK,CAAC;AACxB,CAAC"}
|
package/dist/cjs/pino.d.ts
CHANGED
package/dist/cjs/pino.js
CHANGED
|
@@ -10,7 +10,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
10
10
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.logtailTransport =
|
|
13
|
+
exports.logtailTransport = logtailTransport;
|
|
14
14
|
const pino_abstract_transport_1 = __importDefault(require("pino-abstract-transport"));
|
|
15
15
|
const node_1 = require("@logtail/node");
|
|
16
16
|
const helpers_1 = require("./helpers");
|
|
@@ -23,47 +23,42 @@ async function logtailTransport(options) {
|
|
|
23
23
|
const buildFunc = async (source) => {
|
|
24
24
|
var _a, e_1, _b, _c;
|
|
25
25
|
try {
|
|
26
|
-
for (var _d = true, source_1 = __asyncValues(source), source_1_1; source_1_1 = await source_1.next(), _a = source_1_1.done, !_a;) {
|
|
26
|
+
for (var _d = true, source_1 = __asyncValues(source), source_1_1; source_1_1 = await source_1.next(), _a = source_1_1.done, !_a; _d = true) {
|
|
27
27
|
_c = source_1_1.value;
|
|
28
28
|
_d = false;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
meta.dt = time;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Carry over any additional data fields
|
|
41
|
-
Object.keys(obj)
|
|
42
|
-
.filter(key => ["time", "msg", "message", "level", "v"].indexOf(key) < 0)
|
|
43
|
-
.forEach(key => (meta[key] = obj[key]));
|
|
44
|
-
// Get message
|
|
45
|
-
// NOTE: Pino passes messages as obj.msg but if user passes object to Pino it will pass it to us
|
|
46
|
-
// even without 'msg' field. Later we map 'msg' -> 'message' so let's also read 'message' field.
|
|
47
|
-
const msg = obj.msg || obj.message;
|
|
48
|
-
// Prevent overriding 'message' with 'msg'
|
|
49
|
-
if (obj.msg !== undefined && obj.message !== undefined) {
|
|
50
|
-
meta["message_field"] = obj.message;
|
|
51
|
-
}
|
|
52
|
-
// Determine the log level
|
|
53
|
-
let level;
|
|
54
|
-
try {
|
|
55
|
-
level = (0, helpers_1.getLogLevel)(obj.level);
|
|
56
|
-
}
|
|
57
|
-
catch (_) {
|
|
58
|
-
console.error("Error while mapping log level.");
|
|
59
|
-
continue;
|
|
29
|
+
let obj = _c;
|
|
30
|
+
// Logging meta data
|
|
31
|
+
const meta = {};
|
|
32
|
+
// Copy `time` if set
|
|
33
|
+
if (typeof obj.time === "string" || obj.time.length) {
|
|
34
|
+
const time = new Date(obj.time);
|
|
35
|
+
if (!isNaN(time.valueOf())) {
|
|
36
|
+
meta.dt = time;
|
|
60
37
|
}
|
|
61
|
-
// Log to Logtail
|
|
62
|
-
logtail.log(msg, level, meta, stackContextHint);
|
|
63
38
|
}
|
|
64
|
-
|
|
65
|
-
|
|
39
|
+
// Carry over any additional data fields
|
|
40
|
+
Object.keys(obj)
|
|
41
|
+
.filter((key) => ["time", "msg", "message", "level", "v"].indexOf(key) < 0)
|
|
42
|
+
.forEach((key) => (meta[key] = obj[key]));
|
|
43
|
+
// Get message
|
|
44
|
+
// NOTE: Pino passes messages as obj.msg but if user passes object to Pino it will pass it to us
|
|
45
|
+
// even without 'msg' field. Later we map 'msg' -> 'message' so let's also read 'message' field.
|
|
46
|
+
const msg = obj.msg || obj.message;
|
|
47
|
+
// Prevent overriding 'message' with 'msg'
|
|
48
|
+
if (obj.msg !== undefined && obj.message !== undefined) {
|
|
49
|
+
meta["message_field"] = obj.message;
|
|
66
50
|
}
|
|
51
|
+
// Determine the log level
|
|
52
|
+
let level;
|
|
53
|
+
try {
|
|
54
|
+
level = (0, helpers_1.getLogLevel)(obj.level);
|
|
55
|
+
}
|
|
56
|
+
catch (_) {
|
|
57
|
+
console.error("Error while mapping log level.");
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// Log to Logtail
|
|
61
|
+
logtail.log(msg, level, meta, stackContextHint);
|
|
67
62
|
}
|
|
68
63
|
}
|
|
69
64
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -79,5 +74,4 @@ async function logtailTransport(options) {
|
|
|
79
74
|
};
|
|
80
75
|
return (0, pino_abstract_transport_1.default)(buildFunc, { close: closeFunc });
|
|
81
76
|
}
|
|
82
|
-
exports.logtailTransport = logtailTransport;
|
|
83
77
|
//# sourceMappingURL=pino.js.map
|
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":";;;;;;;;;;;;AA2BA,4CAiDC;AA5ED,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;CACnF,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,246 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino.test.js","sourceRoot":"","sources":["../../src/pino.test.ts"],"names":[],"mappings":"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"}
|
package/dist/es6/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,WAAW;IACX,IAAI,KAAK,IAAI,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,WAAW;IACX,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,kDAAkD;IAClD,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC"}
|
package/dist/es6/pino.d.ts
CHANGED
package/dist/es6/pino.js
CHANGED
|
@@ -17,47 +17,42 @@ export async function logtailTransport(options) {
|
|
|
17
17
|
const buildFunc = async (source) => {
|
|
18
18
|
var _a, e_1, _b, _c;
|
|
19
19
|
try {
|
|
20
|
-
for (var _d = true, source_1 = __asyncValues(source), source_1_1; source_1_1 = await source_1.next(), _a = source_1_1.done, !_a;) {
|
|
20
|
+
for (var _d = true, source_1 = __asyncValues(source), source_1_1; source_1_1 = await source_1.next(), _a = source_1_1.done, !_a; _d = true) {
|
|
21
21
|
_c = source_1_1.value;
|
|
22
22
|
_d = false;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
meta.dt = time;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Carry over any additional data fields
|
|
35
|
-
Object.keys(obj)
|
|
36
|
-
.filter(key => ["time", "msg", "message", "level", "v"].indexOf(key) < 0)
|
|
37
|
-
.forEach(key => (meta[key] = obj[key]));
|
|
38
|
-
// Get message
|
|
39
|
-
// NOTE: Pino passes messages as obj.msg but if user passes object to Pino it will pass it to us
|
|
40
|
-
// even without 'msg' field. Later we map 'msg' -> 'message' so let's also read 'message' field.
|
|
41
|
-
const msg = obj.msg || obj.message;
|
|
42
|
-
// Prevent overriding 'message' with 'msg'
|
|
43
|
-
if (obj.msg !== undefined && obj.message !== undefined) {
|
|
44
|
-
meta["message_field"] = obj.message;
|
|
45
|
-
}
|
|
46
|
-
// Determine the log level
|
|
47
|
-
let level;
|
|
48
|
-
try {
|
|
49
|
-
level = getLogLevel(obj.level);
|
|
50
|
-
}
|
|
51
|
-
catch (_) {
|
|
52
|
-
console.error("Error while mapping log level.");
|
|
53
|
-
continue;
|
|
23
|
+
let obj = _c;
|
|
24
|
+
// Logging meta data
|
|
25
|
+
const meta = {};
|
|
26
|
+
// Copy `time` if set
|
|
27
|
+
if (typeof obj.time === "string" || obj.time.length) {
|
|
28
|
+
const time = new Date(obj.time);
|
|
29
|
+
if (!isNaN(time.valueOf())) {
|
|
30
|
+
meta.dt = time;
|
|
54
31
|
}
|
|
55
|
-
// Log to Logtail
|
|
56
|
-
logtail.log(msg, level, meta, stackContextHint);
|
|
57
32
|
}
|
|
58
|
-
|
|
59
|
-
|
|
33
|
+
// Carry over any additional data fields
|
|
34
|
+
Object.keys(obj)
|
|
35
|
+
.filter((key) => ["time", "msg", "message", "level", "v"].indexOf(key) < 0)
|
|
36
|
+
.forEach((key) => (meta[key] = obj[key]));
|
|
37
|
+
// Get message
|
|
38
|
+
// NOTE: Pino passes messages as obj.msg but if user passes object to Pino it will pass it to us
|
|
39
|
+
// even without 'msg' field. Later we map 'msg' -> 'message' so let's also read 'message' field.
|
|
40
|
+
const msg = obj.msg || obj.message;
|
|
41
|
+
// Prevent overriding 'message' with 'msg'
|
|
42
|
+
if (obj.msg !== undefined && obj.message !== undefined) {
|
|
43
|
+
meta["message_field"] = obj.message;
|
|
44
|
+
}
|
|
45
|
+
// Determine the log level
|
|
46
|
+
let level;
|
|
47
|
+
try {
|
|
48
|
+
level = getLogLevel(obj.level);
|
|
49
|
+
}
|
|
50
|
+
catch (_) {
|
|
51
|
+
console.error("Error while mapping log level.");
|
|
52
|
+
continue;
|
|
60
53
|
}
|
|
54
|
+
// Log to Logtail
|
|
55
|
+
logtail.log(msg, level, meta, stackContextHint);
|
|
61
56
|
}
|
|
62
57
|
}
|
|
63
58
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
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;CACnF,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;
|
|
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;CACnF,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,241 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino.test.js","sourceRoot":"","sources":["../../src/pino.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logtail/pino",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Better Stack Pino transport (formerly Logtail)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Better Stack",
|
|
@@ -28,16 +28,12 @@
|
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
|
30
30
|
},
|
|
31
|
-
"devDependencies": {
|
|
32
|
-
"npm-run-all": "^4.1.5",
|
|
33
|
-
"typescript": "^4.9.5"
|
|
34
|
-
},
|
|
35
31
|
"peerDependencies": {
|
|
36
32
|
"pino": "^7.0.0 || ^8.0.0 || ^9.0.0"
|
|
37
33
|
},
|
|
38
34
|
"dependencies": {
|
|
39
|
-
"@logtail/node": "^0.
|
|
40
|
-
"@logtail/types": "^0.
|
|
35
|
+
"@logtail/node": "^0.5.0",
|
|
36
|
+
"@logtail/types": "^0.5.0",
|
|
41
37
|
"pino-abstract-transport": "^1.0.0"
|
|
42
38
|
},
|
|
43
39
|
"scripts": {
|
|
@@ -48,5 +44,5 @@
|
|
|
48
44
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
49
45
|
},
|
|
50
46
|
"private": false,
|
|
51
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "206d52b85903715541e5acbb5b5f1c63298b0714"
|
|
52
48
|
}
|
package/src/pino.ts
CHANGED
|
@@ -43,8 +43,8 @@ export async function logtailTransport(options: IPinoLogtailOptions) {
|
|
|
43
43
|
|
|
44
44
|
// Carry over any additional data fields
|
|
45
45
|
Object.keys(obj)
|
|
46
|
-
.filter(key => ["time", "msg", "message", "level", "v"].indexOf(key) < 0)
|
|
47
|
-
.forEach(key => (meta[key] = obj[key]));
|
|
46
|
+
.filter((key) => ["time", "msg", "message", "level", "v"].indexOf(key) < 0)
|
|
47
|
+
.forEach((key) => (meta[key] = obj[key]));
|
|
48
48
|
|
|
49
49
|
// Get message
|
|
50
50
|
// NOTE: Pino passes messages as obj.msg but if user passes object to Pino it will pass it to us
|