log4js-node/test/tap/logLevelFilter-test.js

163 lines
4.3 KiB
JavaScript

const { test } = require("tap");
const fs = require("fs");
const os = require("os");
const EOL = os.EOL || "\n";
function remove(filename) {
try {
fs.unlinkSync(filename);
} catch (e) {
// doesn't really matter if it failed
}
}
test("log4js logLevelFilter", batch => {
batch.test("appender", t => {
const log4js = require("../../lib/log4js");
const recording = require("../../lib/appenders/recording");
log4js.configure({
appenders: {
recorder: { type: "recording" },
filtered: {
type: "logLevelFilter",
appender: "recorder",
level: "ERROR"
}
},
categories: {
default: { appenders: ["filtered"], level: "debug" }
}
});
const logger = log4js.getLogger("logLevelTest");
logger.debug("this should not trigger an event");
logger.warn("neither should this");
logger.error("this should, though");
logger.fatal("so should this");
const logEvents = recording.replay();
t.test(
"should only pass log events greater than or equal to its own level",
assert => {
assert.equal(logEvents.length, 2);
assert.equal(logEvents[0].data[0], "this should, though");
assert.equal(logEvents[1].data[0], "so should this");
assert.end();
}
);
t.end();
});
batch.test("configure", t => {
const log4js = require("../../lib/log4js");
remove(`${__dirname}/logLevelFilter.log`);
remove(`${__dirname}/logLevelFilter-warnings.log`);
remove(`${__dirname}/logLevelFilter-debugs.log`);
t.teardown(() => {
remove(`${__dirname}/logLevelFilter.log`);
remove(`${__dirname}/logLevelFilter-warnings.log`);
remove(`${__dirname}/logLevelFilter-debugs.log`);
});
log4js.configure({
appenders: {
"warning-file": {
type: "file",
filename: "test/tap/logLevelFilter-warnings.log",
layout: { type: "messagePassThrough" }
},
warnings: {
type: "logLevelFilter",
level: "WARN",
appender: "warning-file"
},
"debug-file": {
type: "file",
filename: "test/tap/logLevelFilter-debugs.log",
layout: { type: "messagePassThrough" }
},
debugs: {
type: "logLevelFilter",
level: "TRACE",
maxLevel: "DEBUG",
appender: "debug-file"
},
tests: {
type: "file",
filename: "test/tap/logLevelFilter.log",
layout: {
type: "messagePassThrough"
}
}
},
categories: {
default: { appenders: ["tests", "warnings", "debugs"], level: "trace" }
}
});
const logger = log4js.getLogger("tests");
logger.debug("debug");
logger.info("info");
logger.error("error");
logger.warn("warn");
logger.debug("debug");
logger.trace("trace");
// wait for the file system to catch up
setTimeout(() => {
t.test("tmp-tests.log should contain all log messages", assert => {
fs.readFile(
`${__dirname}/logLevelFilter.log`,
"utf8",
(err, contents) => {
const messages = contents.trim().split(EOL);
assert.same(messages, [
"debug",
"info",
"error",
"warn",
"debug",
"trace"
]);
assert.end();
}
);
});
t.test(
"tmp-tests-warnings.log should contain only error and warning logs",
assert => {
fs.readFile(
`${__dirname}/logLevelFilter-warnings.log`,
"utf8",
(err, contents) => {
const messages = contents.trim().split(EOL);
assert.same(messages, ["error", "warn"]);
assert.end();
}
);
}
);
t.test(
"tmp-tests-debugs.log should contain only trace and debug logs",
assert => {
fs.readFile(
`${__dirname}/logLevelFilter-debugs.log`,
"utf8",
(err, contents) => {
const messages = contents.trim().split(EOL);
assert.same(messages, ["debug", "debug", "trace"]);
assert.end();
}
);
}
);
t.end();
}, 500);
});
batch.end();
});