Improve logging module (denoland/deno_std#51)

Original: 439885c756
This commit is contained in:
Bartek Iwańczuk 2019-01-02 15:12:48 +01:00 committed by Ryan Dahl
parent bc4635a593
commit 4659271518
9 changed files with 278 additions and 172 deletions

View file

@ -1,53 +1,84 @@
import { remove, open, readAll } from "deno";
import { assertEqual, test } from "https://deno.land/x/testing/testing.ts";
import * as logging from "index.ts";
import * as log from "index.ts";
import { FileHandler } from "./handlers.ts";
// TODO: establish something more sophisticated
let testOutput = "";
class TestHandler extends logging.handlers.BaseHandler {
_log(level, ...args) {
testOutput += `${level} ${args[0]}\n`;
class TestHandler extends log.handlers.BaseHandler {
constructor(levelName: string) {
super(levelName);
}
log(msg: string) {
testOutput += `${msg}\n`;
}
}
logging.setup({
handlers: {
debug: {
level: "DEBUG",
class: TestHandler
},
test(function testDefaultlogMethods() {
log.debug("Foobar");
log.info("Foobar");
log.warning("Foobar");
log.error("Foobar");
log.critical("Foobar");
info: {
level: "INFO",
class: TestHandler
}
},
loggers: {
default: {
level: "DEBUG",
handlers: ["debug"]
},
info: {
level: "INFO",
handlers: ["info"]
}
}
const logger = log.getLogger('');
console.log(logger);
});
const logger = logging.getLogger("default");
const unknownLogger = logging.getLogger("info");
test(async function basicTest() {
const testFile = './log.txt';
test(function basicTest() {
logger.debug("I should be printed.");
unknownLogger.debug("I should not be printed.");
unknownLogger.info("And I should be printed as well.");
await log.setup({
handlers: {
debug: new TestHandler("DEBUG"),
info: new TestHandler("INFO"),
file: new FileHandler("DEBUG", testFile),
},
loggers: {
foo: {
level: "DEBUG",
handlers: ["debug", "file"]
},
bar: {
level: "INFO",
handlers: ["info"]
}
}
});
const fooLogger = log.getLogger("foo");
const barLogger = log.getLogger("bar");
const bazzLogger = log.getLogger("bazz");
fooLogger.debug("I should be logged.");
fooLogger.debug("I should be logged.");
barLogger.debug("I should not be logged.");
barLogger.info("And I should be logged as well.");
bazzLogger.critical("I shouldn't be logged neither.")
const expectedOutput =
"10 I should be printed.\n20 And I should be printed as well.\n";
"DEBUG I should be logged.\n" +
"DEBUG I should be logged.\n" +
"INFO And I should be logged as well.\n";
assertEqual(testOutput, expectedOutput);
// same check for file handler
const f = await open(testFile);
const bytes = await readAll(f);
const fileOutput = new TextDecoder().decode(bytes);
await f.close();
await remove(testFile);
const fileExpectedOutput =
"DEBUG I should be logged.\n" +
"DEBUG I should be logged.\n";
assertEqual(fileOutput, fileExpectedOutput);
});