feat: add structured pino logging and validated log-level config
This commit is contained in:
@@ -7,11 +7,13 @@ test("config uses defaults when env is missing", () => {
|
||||
const previous = {
|
||||
PORT: process.env.PORT,
|
||||
STATE_FILE_PATH: process.env.STATE_FILE_PATH,
|
||||
LOG_LEVEL: process.env.LOG_LEVEL,
|
||||
WEBHOOK_RPM: process.env.WEBHOOK_RPM,
|
||||
};
|
||||
|
||||
delete process.env.PORT;
|
||||
delete process.env.STATE_FILE_PATH;
|
||||
delete process.env.LOG_LEVEL;
|
||||
delete process.env.WEBHOOK_RPM;
|
||||
|
||||
delete require.cache[require.resolve("../src/config")];
|
||||
@@ -19,6 +21,7 @@ test("config uses defaults when env is missing", () => {
|
||||
|
||||
assert.equal(config.port, 3000);
|
||||
assert.equal(config.stateFilePath, "./data/state.json");
|
||||
assert.equal(config.logLevel, "info");
|
||||
assert.equal(config.rateLimits.webhookPerMinute, 120);
|
||||
|
||||
if (previous.PORT === undefined) {
|
||||
@@ -33,6 +36,12 @@ test("config uses defaults when env is missing", () => {
|
||||
process.env.STATE_FILE_PATH = previous.STATE_FILE_PATH;
|
||||
}
|
||||
|
||||
if (previous.LOG_LEVEL === undefined) {
|
||||
delete process.env.LOG_LEVEL;
|
||||
} else {
|
||||
process.env.LOG_LEVEL = previous.LOG_LEVEL;
|
||||
}
|
||||
|
||||
if (previous.WEBHOOK_RPM === undefined) {
|
||||
delete process.env.WEBHOOK_RPM;
|
||||
} else {
|
||||
@@ -44,11 +53,13 @@ test("config reads state path and numeric env overrides", () => {
|
||||
const previous = {
|
||||
PORT: process.env.PORT,
|
||||
STATE_FILE_PATH: process.env.STATE_FILE_PATH,
|
||||
LOG_LEVEL: process.env.LOG_LEVEL,
|
||||
WEBHOOK_RPM: process.env.WEBHOOK_RPM,
|
||||
};
|
||||
|
||||
process.env.PORT = "8080";
|
||||
process.env.STATE_FILE_PATH = "/data/prod-state.json";
|
||||
process.env.LOG_LEVEL = "debug";
|
||||
process.env.WEBHOOK_RPM = "77";
|
||||
|
||||
delete require.cache[require.resolve("../src/config")];
|
||||
@@ -56,6 +67,7 @@ test("config reads state path and numeric env overrides", () => {
|
||||
|
||||
assert.equal(config.port, 8080);
|
||||
assert.equal(config.stateFilePath, "/data/prod-state.json");
|
||||
assert.equal(config.logLevel, "debug");
|
||||
assert.equal(config.rateLimits.webhookPerMinute, 77);
|
||||
|
||||
if (previous.PORT === undefined) {
|
||||
@@ -69,6 +81,11 @@ test("config reads state path and numeric env overrides", () => {
|
||||
} else {
|
||||
process.env.STATE_FILE_PATH = previous.STATE_FILE_PATH;
|
||||
}
|
||||
if (previous.LOG_LEVEL === undefined) {
|
||||
delete process.env.LOG_LEVEL;
|
||||
} else {
|
||||
process.env.LOG_LEVEL = previous.LOG_LEVEL;
|
||||
}
|
||||
if (previous.WEBHOOK_RPM === undefined) {
|
||||
delete process.env.WEBHOOK_RPM;
|
||||
} else {
|
||||
|
||||
12
test/logger.test.js
Normal file
12
test/logger.test.js
Normal file
@@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
|
||||
const test = require("node:test");
|
||||
const assert = require("node:assert/strict");
|
||||
const { createLogger } = require("../src/lib/logger");
|
||||
|
||||
test("createLogger returns pino-compatible logger", () => {
|
||||
const logger = createLogger({ level: "debug", name: "test" });
|
||||
assert.equal(typeof logger.info, "function");
|
||||
assert.equal(typeof logger.error, "function");
|
||||
assert.equal(logger.level, "debug");
|
||||
});
|
||||
Reference in New Issue
Block a user