@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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLogLevel = void 0;
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
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAE1C;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,WAAW;IACX,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,gBAAQ,CAAC,KAAK,CAAC;KACvB;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,gBAAQ,CAAC,KAAK,CAAC;KACvB;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,gBAAQ,CAAC,IAAI,CAAC;KACtB;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,gBAAQ,CAAC,IAAI,CAAC;KACtB;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,gBAAQ,CAAC,KAAK,CAAC;KACvB;IACD,kDAAkD;IAClD,OAAO,gBAAQ,CAAC,KAAK,CAAC;AACxB,CAAC;AA3BD,kCA2BC"}
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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import build from "pino-abstract-transport";
3
2
  import { ILogtailOptions } from "@logtail/types";
4
3
  export interface PinoLog {
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 = void 0;
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
- try {
30
- let obj = _c;
31
- // Logging meta data
32
- const meta = {};
33
- // Copy `time` if set
34
- if (typeof obj.time === "string" || obj.time.length) {
35
- const time = new Date(obj.time);
36
- if (!isNaN(time.valueOf())) {
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
- finally {
65
- _d = true;
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
@@ -1 +1 @@
1
- {"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/pino.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,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;gBAAN,sBAAM;gBAAN,WAAM;;oBAAjB,IAAI,GAAG,KAAA,CAAA;oBAChB,oBAAoB;oBACpB,MAAM,IAAI,GAAY,EAAE,CAAC;oBAEzB,qBAAqB;oBACrB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;wBACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;4BAC1B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;yBAChB;qBACF;oBAED,wCAAwC;oBACxC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;yBACb,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;yBACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAE1C,cAAc;oBACd,gGAAgG;oBAChG,sGAAsG;oBACtG,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;oBAEnC,0CAA0C;oBAC1C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;wBACtD,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;qBACrC;oBAED,0BAA0B;oBAC1B,IAAI,KAAe,CAAC;oBAEpB,IAAI;wBACF,KAAK,GAAG,IAAA,qBAAW,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC;qBAChC;oBAAC,OAAO,CAAC,EAAE;wBACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;wBAChD,SAAS;qBACV;oBAED,iBAAiB;oBACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAoC,CAAC,CAAC;;;;;aACrE;;;;;;;;;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;AAjDD,4CAiDC"}
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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"}
@@ -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;QACf,OAAO,QAAQ,CAAC,KAAK,CAAC;KACvB;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,QAAQ,CAAC,KAAK,CAAC;KACvB;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,QAAQ,CAAC,IAAI,CAAC;KACtB;IAED,OAAO;IACP,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,QAAQ,CAAC,IAAI,CAAC;KACtB;IAED,QAAQ;IACR,IAAI,KAAK,IAAI,EAAE,EAAE;QACf,OAAO,QAAQ,CAAC,KAAK,CAAC;KACvB;IACD,kDAAkD;IAClD,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC"}
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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import build from "pino-abstract-transport";
3
2
  import { ILogtailOptions } from "@logtail/types";
4
3
  export interface PinoLog {
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
- try {
24
- let obj = _c;
25
- // Logging meta data
26
- const meta = {};
27
- // Copy `time` if set
28
- if (typeof obj.time === "string" || obj.time.length) {
29
- const time = new Date(obj.time);
30
- if (!isNaN(time.valueOf())) {
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
- finally {
59
- _d = true;
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 }; }
@@ -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;gBAAN,sBAAM;gBAAN,WAAM;;oBAAjB,IAAI,GAAG,KAAA,CAAA;oBAChB,oBAAoB;oBACpB,MAAM,IAAI,GAAY,EAAE,CAAC;oBAEzB,qBAAqB;oBACrB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;wBACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;4BAC1B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;yBAChB;qBACF;oBAED,wCAAwC;oBACxC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;yBACb,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;yBACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAE1C,cAAc;oBACd,gGAAgG;oBAChG,sGAAsG;oBACtG,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;oBAEnC,0CAA0C;oBAC1C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;wBACtD,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;qBACrC;oBAED,0BAA0B;oBAC1B,IAAI,KAAe,CAAC;oBAEpB,IAAI;wBACF,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;qBAChC;oBAAC,OAAO,CAAC,EAAE;wBACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;wBAChD,SAAS;qBACV;oBAED,iBAAiB;oBACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAoC,CAAC,CAAC;;;;;aACrE;;;;;;;;;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"}
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.4.22",
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.4.21",
40
- "@logtail/types": "^0.4.20",
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": "1f17b0dea54b25b734f27b6e587e04bfd45f5341"
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