@ldsg/opentelemetry-node 0.3.16 → 0.3.18
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/__tests__/pino-logger.test.js +21 -21
- package/dist/__tests__/sdk.test.js +21 -21
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/dist/pino-logger.d.ts +1 -1
- package/dist/pino-logger.js +8 -8
- package/dist/sdk.d.ts +3 -3
- package/dist/sdk.js +12 -12
- package/package.json +5 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const pino_logger_1 = require("../pino-logger");
|
|
4
|
-
describe(
|
|
4
|
+
describe("pino-logger", () => {
|
|
5
5
|
let originalLogger;
|
|
6
6
|
beforeEach(() => {
|
|
7
7
|
// Store the current logger state before each test
|
|
@@ -11,42 +11,42 @@ describe('pino-logger', () => {
|
|
|
11
11
|
// Restore the original logger state after each test
|
|
12
12
|
(0, pino_logger_1.setLogger)(originalLogger);
|
|
13
13
|
});
|
|
14
|
-
describe(
|
|
15
|
-
it(
|
|
14
|
+
describe("createPinoLogger", () => {
|
|
15
|
+
it("should create a pino logger with default options", () => {
|
|
16
16
|
const logger = (0, pino_logger_1.createPinoLogger)();
|
|
17
17
|
expect(logger).toBeDefined();
|
|
18
|
-
expect(typeof logger.info).toBe(
|
|
19
|
-
expect(typeof logger.error).toBe(
|
|
18
|
+
expect(typeof logger.info).toBe("function");
|
|
19
|
+
expect(typeof logger.error).toBe("function");
|
|
20
20
|
});
|
|
21
|
-
it(
|
|
21
|
+
it("should create a pino logger with custom options", () => {
|
|
22
22
|
const options = {
|
|
23
|
-
level:
|
|
24
|
-
serviceName:
|
|
25
|
-
serviceVersion:
|
|
23
|
+
level: "debug",
|
|
24
|
+
serviceName: "test-service",
|
|
25
|
+
serviceVersion: "1.0.0",
|
|
26
26
|
};
|
|
27
27
|
const logger = (0, pino_logger_1.createPinoLogger)(options);
|
|
28
28
|
expect(logger).toBeDefined();
|
|
29
29
|
});
|
|
30
|
-
it(
|
|
30
|
+
it("should create a pino logger with pretty print option (skipping due to missing pino-pretty)", () => {
|
|
31
31
|
// Note: This test is skipped if pino-pretty is not installed
|
|
32
32
|
// In a real environment, you would install pino-pretty as a dev dependency
|
|
33
33
|
const options = {
|
|
34
|
-
level:
|
|
35
|
-
prettyPrint: false // Disable pretty print in test
|
|
34
|
+
level: "info",
|
|
35
|
+
prettyPrint: false, // Disable pretty print in test
|
|
36
36
|
};
|
|
37
37
|
const logger = (0, pino_logger_1.createPinoLogger)(options);
|
|
38
38
|
expect(logger).toBeDefined();
|
|
39
39
|
});
|
|
40
40
|
});
|
|
41
|
-
describe(
|
|
42
|
-
it(
|
|
41
|
+
describe("getLogger", () => {
|
|
42
|
+
it("should return the same logger instance", () => {
|
|
43
43
|
// First call creates a new logger
|
|
44
44
|
const logger1 = (0, pino_logger_1.getLogger)();
|
|
45
45
|
// Second call returns the same logger
|
|
46
46
|
const logger2 = (0, pino_logger_1.getLogger)();
|
|
47
47
|
expect(logger1).toBe(logger2);
|
|
48
48
|
});
|
|
49
|
-
it(
|
|
49
|
+
it("should create a new logger if none exists", () => {
|
|
50
50
|
// First ensure there's no logger
|
|
51
51
|
(0, pino_logger_1.setLogger)(null);
|
|
52
52
|
// Now getLogger should create a new one
|
|
@@ -54,28 +54,28 @@ describe('pino-logger', () => {
|
|
|
54
54
|
expect(logger).toBeDefined();
|
|
55
55
|
});
|
|
56
56
|
});
|
|
57
|
-
describe(
|
|
58
|
-
it(
|
|
57
|
+
describe("setLogger", () => {
|
|
58
|
+
it("should set a custom logger", () => {
|
|
59
59
|
const mockLogger = {
|
|
60
60
|
info: jest.fn(),
|
|
61
61
|
warn: jest.fn(),
|
|
62
62
|
error: jest.fn(),
|
|
63
63
|
debug: jest.fn(),
|
|
64
|
-
trace: jest.fn()
|
|
64
|
+
trace: jest.fn(),
|
|
65
65
|
};
|
|
66
66
|
(0, pino_logger_1.setLogger)(mockLogger);
|
|
67
67
|
const logger = (0, pino_logger_1.getLogger)();
|
|
68
68
|
expect(logger).toBe(mockLogger);
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
|
-
describe(
|
|
72
|
-
it(
|
|
71
|
+
describe("trace context injection", () => {
|
|
72
|
+
it("should verify mixin function exists in pino options", () => {
|
|
73
73
|
// This test verifies the mixin function is set up correctly
|
|
74
74
|
const logger = (0, pino_logger_1.createPinoLogger)();
|
|
75
75
|
expect(logger).toBeDefined();
|
|
76
76
|
// The pino logger itself doesn't expose the mixin directly,
|
|
77
77
|
// but we can verify the logger was created successfully
|
|
78
|
-
expect(typeof logger.info).toBe(
|
|
78
|
+
expect(typeof logger.info).toBe("function");
|
|
79
79
|
});
|
|
80
80
|
});
|
|
81
81
|
});
|
|
@@ -4,13 +4,13 @@ const sdk_1 = require("../sdk");
|
|
|
4
4
|
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
5
5
|
const pino_logger_1 = require("../pino-logger");
|
|
6
6
|
// Mock NodeSDK to avoid actual network calls
|
|
7
|
-
jest.mock(
|
|
7
|
+
jest.mock("@opentelemetry/sdk-node", () => ({
|
|
8
8
|
NodeSDK: jest.fn().mockImplementation(() => ({
|
|
9
9
|
start: jest.fn(),
|
|
10
|
-
shutdown: jest.fn()
|
|
11
|
-
}))
|
|
10
|
+
shutdown: jest.fn(),
|
|
11
|
+
})),
|
|
12
12
|
}));
|
|
13
|
-
describe(
|
|
13
|
+
describe("sdk", () => {
|
|
14
14
|
beforeEach(() => {
|
|
15
15
|
(0, pino_logger_1.setLogger)(null);
|
|
16
16
|
jest.clearAllMocks();
|
|
@@ -18,51 +18,51 @@ describe('sdk', () => {
|
|
|
18
18
|
afterEach(() => {
|
|
19
19
|
(0, pino_logger_1.setLogger)(null);
|
|
20
20
|
});
|
|
21
|
-
describe(
|
|
22
|
-
it(
|
|
21
|
+
describe("createSDK", () => {
|
|
22
|
+
it("should create SDK with default options", () => {
|
|
23
23
|
const { sdk, logger } = (0, sdk_1.createSDK)();
|
|
24
24
|
expect(sdk).toBeDefined();
|
|
25
25
|
expect(logger).toBeDefined();
|
|
26
26
|
// NodeSDK should be called (but we won't verify exact parameters due to complexity)
|
|
27
27
|
expect(sdk_node_1.NodeSDK).toHaveBeenCalled();
|
|
28
28
|
});
|
|
29
|
-
it(
|
|
29
|
+
it("should create SDK with custom options", () => {
|
|
30
30
|
const options = {
|
|
31
|
-
url:
|
|
32
|
-
headers: {
|
|
31
|
+
url: "https://custom-collector.com/v1/traces",
|
|
32
|
+
headers: { "X-Custom-Header": "value" },
|
|
33
33
|
pinoOptions: {
|
|
34
|
-
level:
|
|
35
|
-
serviceName:
|
|
36
|
-
serviceVersion:
|
|
34
|
+
level: "debug",
|
|
35
|
+
serviceName: "test-service",
|
|
36
|
+
serviceVersion: "1.0.0",
|
|
37
37
|
},
|
|
38
|
-
replaceConsole: true
|
|
38
|
+
replaceConsole: true,
|
|
39
39
|
};
|
|
40
40
|
const { sdk, logger } = (0, sdk_1.createSDK)(options);
|
|
41
41
|
expect(sdk).toBeDefined();
|
|
42
42
|
expect(logger).toBeDefined();
|
|
43
43
|
expect(sdk_node_1.NodeSDK).toHaveBeenCalled();
|
|
44
44
|
});
|
|
45
|
-
it(
|
|
45
|
+
it("should replace console methods when replaceConsole is true", () => {
|
|
46
46
|
const originalLog = console.log;
|
|
47
47
|
const originalInfo = console.info;
|
|
48
48
|
const { logger } = (0, sdk_1.createSDK)({ replaceConsole: true });
|
|
49
49
|
expect(console.log).not.toBe(originalLog);
|
|
50
50
|
expect(console.info).not.toBe(originalInfo);
|
|
51
51
|
// Test that console.log calls logger.info
|
|
52
|
-
const mockInfo = jest.spyOn(logger,
|
|
53
|
-
console.log(
|
|
54
|
-
expect(mockInfo).toHaveBeenCalledWith(
|
|
52
|
+
const mockInfo = jest.spyOn(logger, "info").mockImplementation(() => { });
|
|
53
|
+
console.log("test message");
|
|
54
|
+
expect(mockInfo).toHaveBeenCalledWith("test message");
|
|
55
55
|
mockInfo.mockRestore();
|
|
56
56
|
});
|
|
57
|
-
it(
|
|
57
|
+
it("should not replace console methods when replaceConsole is false", () => {
|
|
58
58
|
const originalLog = console.log;
|
|
59
59
|
(0, sdk_1.createSDK)({ replaceConsole: false });
|
|
60
60
|
// Console methods should remain unchanged
|
|
61
61
|
expect(console.log).toBe(originalLog);
|
|
62
62
|
});
|
|
63
63
|
});
|
|
64
|
-
describe(
|
|
65
|
-
it(
|
|
64
|
+
describe("getPinoLogger", () => {
|
|
65
|
+
it("should throw error if logger not initialized", () => {
|
|
66
66
|
(0, pino_logger_1.setLogger)(null);
|
|
67
67
|
// The getPinoLogger function actually creates a new logger if none exists
|
|
68
68
|
// so we need to mock the behavior or adjust our test
|
|
@@ -70,7 +70,7 @@ describe('sdk', () => {
|
|
|
70
70
|
const logger = (0, sdk_1.getPinoLogger)();
|
|
71
71
|
expect(logger).toBeDefined();
|
|
72
72
|
});
|
|
73
|
-
it(
|
|
73
|
+
it("should return logger after createSDK is called", () => {
|
|
74
74
|
const { logger } = (0, sdk_1.createSDK)();
|
|
75
75
|
const retrievedLogger = (0, sdk_1.getPinoLogger)();
|
|
76
76
|
expect(retrievedLogger).toBe(logger);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createSDK, getPinoLogger } from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
import { createSDK, getPinoLogger } from "./sdk";
|
|
2
|
+
export * from "./methods";
|
|
3
|
+
export * from "./pino-logger";
|
|
4
|
+
export * from "./sdk";
|
|
5
5
|
declare let logger: ReturnType<typeof getPinoLogger>;
|
|
6
|
-
declare let sdk: ReturnType<typeof createSDK>[
|
|
6
|
+
declare let sdk: ReturnType<typeof createSDK>["sdk"];
|
|
7
7
|
export { logger, sdk };
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ let sdk;
|
|
|
24
24
|
if (process.env.ENABLE_TELEMETRY) {
|
|
25
25
|
// Initialize SDK with default configuration
|
|
26
26
|
const createSDKRes = (0, sdk_1.createSDK)({
|
|
27
|
-
replaceConsole: true
|
|
27
|
+
replaceConsole: true,
|
|
28
28
|
});
|
|
29
29
|
exports.logger = logger = createSDKRes.logger;
|
|
30
30
|
exports.sdk = sdk = createSDKRes.sdk;
|
package/dist/pino-logger.d.ts
CHANGED
package/dist/pino-logger.js
CHANGED
|
@@ -44,15 +44,15 @@ const pino_1 = __importDefault(require("pino"));
|
|
|
44
44
|
const os = __importStar(require("os"));
|
|
45
45
|
let loggerInstance = null;
|
|
46
46
|
function createPinoLogger(options = {}) {
|
|
47
|
-
const { level =
|
|
47
|
+
const { level = "info", prettyPrint = false, serviceName = "unknown-service", serviceVersion = "0.0.0", } = options;
|
|
48
48
|
const transportConfig = prettyPrint
|
|
49
49
|
? {
|
|
50
|
-
target:
|
|
50
|
+
target: "pino-pretty",
|
|
51
51
|
options: {
|
|
52
52
|
colorize: true,
|
|
53
|
-
translateTime:
|
|
54
|
-
ignore:
|
|
55
|
-
}
|
|
53
|
+
translateTime: "SYS:standard",
|
|
54
|
+
ignore: "pid,hostname",
|
|
55
|
+
},
|
|
56
56
|
}
|
|
57
57
|
: undefined;
|
|
58
58
|
const logger = (0, pino_1.default)({
|
|
@@ -62,7 +62,7 @@ function createPinoLogger(options = {}) {
|
|
|
62
62
|
serviceName,
|
|
63
63
|
serviceVersion,
|
|
64
64
|
pid: process.pid,
|
|
65
|
-
hostname: os.hostname()
|
|
65
|
+
hostname: os.hostname(),
|
|
66
66
|
},
|
|
67
67
|
mixin() {
|
|
68
68
|
const span = api_1.trace.getSpan(api_1.context.active());
|
|
@@ -71,11 +71,11 @@ function createPinoLogger(options = {}) {
|
|
|
71
71
|
return {
|
|
72
72
|
trace_id: spanContext.traceId,
|
|
73
73
|
span_id: spanContext.spanId,
|
|
74
|
-
trace_flags: spanContext.traceFlags
|
|
74
|
+
trace_flags: spanContext.traceFlags,
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
return {};
|
|
78
|
-
}
|
|
78
|
+
},
|
|
79
79
|
});
|
|
80
80
|
loggerInstance = logger;
|
|
81
81
|
return logger;
|
package/dist/sdk.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { NodeSDK } from
|
|
2
|
-
import { type PinoLoggerOptions, type PinoLogger } from
|
|
1
|
+
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
2
|
+
import { type PinoLoggerOptions, type PinoLogger } from "./pino-logger";
|
|
3
3
|
export interface SDKOptions {
|
|
4
4
|
url?: string;
|
|
5
5
|
headers?: Record<string, string>;
|
|
@@ -11,5 +11,5 @@ export declare function createSDK(options?: SDKOptions): {
|
|
|
11
11
|
logger: PinoLogger;
|
|
12
12
|
};
|
|
13
13
|
export declare function getPinoLogger(): PinoLogger;
|
|
14
|
-
export { NodeSDK } from
|
|
14
|
+
export { NodeSDK } from "@opentelemetry/sdk-node";
|
|
15
15
|
//# sourceMappingURL=sdk.d.ts.map
|
package/dist/sdk.js
CHANGED
|
@@ -34,37 +34,37 @@ function getServiceVersion() {
|
|
|
34
34
|
}
|
|
35
35
|
function createSDK(options = {}) {
|
|
36
36
|
var _a, _b, _c;
|
|
37
|
-
const { url =
|
|
37
|
+
const { url = "https://otel-collector.hfbdkj.com/v1/traces", headers = {}, pinoOptions = {}, replaceConsole = true, } = options;
|
|
38
38
|
const serviceName = (_a = pinoOptions.serviceName) !== null && _a !== void 0 ? _a : getServiceName();
|
|
39
39
|
const serviceVersion = (_b = pinoOptions.serviceVersion) !== null && _b !== void 0 ? _b : getServiceVersion();
|
|
40
40
|
// Create pino logger with trace context
|
|
41
41
|
pinoInstance = (0, pino_logger_1.createPinoLogger)({
|
|
42
|
-
level: (_c = pinoOptions.level) !== null && _c !== void 0 ? _c :
|
|
42
|
+
level: (_c = pinoOptions.level) !== null && _c !== void 0 ? _c : "info",
|
|
43
43
|
prettyPrint: pinoOptions.prettyPrint,
|
|
44
44
|
serviceName,
|
|
45
|
-
serviceVersion
|
|
45
|
+
serviceVersion,
|
|
46
46
|
});
|
|
47
47
|
// Replace console methods with pino if enabled
|
|
48
48
|
if (replaceConsole) {
|
|
49
|
-
global.console.log = (...args) => pinoInstance.info(args.join(
|
|
50
|
-
global.console.info = (...args) => pinoInstance.info(args.join(
|
|
51
|
-
global.console.warn = (...args) => pinoInstance.warn(args.join(
|
|
52
|
-
global.console.error = (...args) => pinoInstance.error(args.join(
|
|
53
|
-
global.console.debug = (...args) => pinoInstance.debug(args.join(
|
|
54
|
-
global.console.trace = (...args) => pinoInstance.trace(args.join(
|
|
49
|
+
global.console.log = (...args) => pinoInstance.info(args.join(" "));
|
|
50
|
+
global.console.info = (...args) => pinoInstance.info(args.join(" "));
|
|
51
|
+
global.console.warn = (...args) => pinoInstance.warn(args.join(" "));
|
|
52
|
+
global.console.error = (...args) => pinoInstance.error(args.join(" "));
|
|
53
|
+
global.console.debug = (...args) => pinoInstance.debug(args.join(" "));
|
|
54
|
+
global.console.trace = (...args) => pinoInstance.trace(args.join(" "));
|
|
55
55
|
}
|
|
56
56
|
const sdk = new sdk_node_1.NodeSDK({
|
|
57
57
|
traceExporter: new exporter_trace_otlp_proto_1.OTLPTraceExporter({
|
|
58
58
|
url,
|
|
59
|
-
headers
|
|
59
|
+
headers,
|
|
60
60
|
}),
|
|
61
|
-
instrumentations: [(0, auto_instrumentations_node_1.getNodeAutoInstrumentations)()]
|
|
61
|
+
instrumentations: [(0, auto_instrumentations_node_1.getNodeAutoInstrumentations)()],
|
|
62
62
|
});
|
|
63
63
|
return { sdk, logger: pinoInstance };
|
|
64
64
|
}
|
|
65
65
|
function getPinoLogger() {
|
|
66
66
|
if (!pinoInstance) {
|
|
67
|
-
throw new Error(
|
|
67
|
+
throw new Error("Pino logger not initialized. Call createSDK() first.");
|
|
68
68
|
}
|
|
69
69
|
return pinoInstance;
|
|
70
70
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ldsg/opentelemetry-node",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.18",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "wanxger",
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
"@types/jest": "^29.5.14",
|
|
30
30
|
"@types/node": "^22.1.0",
|
|
31
31
|
"jest": "^29.7.0",
|
|
32
|
+
"oxfmt": "latest",
|
|
33
|
+
"oxlint": "latest",
|
|
32
34
|
"ts-jest": "^29.2.5",
|
|
33
35
|
"ts-loader": "^9.5.1",
|
|
34
36
|
"ts-node": "~10.9.2",
|
|
@@ -42,6 +44,8 @@
|
|
|
42
44
|
"scripts": {
|
|
43
45
|
"build": "tsc --project tsconfig.build.json",
|
|
44
46
|
"clean": "rm -rf dist",
|
|
47
|
+
"format": "oxfmt --write src/",
|
|
48
|
+
"lint": "oxlint src/",
|
|
45
49
|
"test": "jest",
|
|
46
50
|
"test:coverage": "jest --coverage",
|
|
47
51
|
"test:watch": "jest --watch"
|