diff options
author | Chris Knight <cknight1234@gmail.com> | 2020-04-09 12:45:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-09 13:45:24 +0200 |
commit | 475a47cfb7b83e05872ce084bc4b13d60697711b (patch) | |
tree | 3b1a1647f0c3e79bc665a16f7854b73bfe19efd5 /std/log/logger.ts | |
parent | 198a045dbee7b0350055b7f88f1e0670da87fb3b (diff) |
feat(std/log): improvements and new log handler (#4674)
Diffstat (limited to 'std/log/logger.ts')
-rw-r--r-- | std/log/logger.ts | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/std/log/logger.ts b/std/log/logger.ts index 226b8dba6..9653d9008 100644 --- a/std/log/logger.ts +++ b/std/log/logger.ts @@ -2,12 +2,26 @@ import { LogLevel, getLevelByName, getLevelName } from "./levels.ts"; import { BaseHandler } from "./handlers.ts"; -export interface LogRecord { - msg: string; - args: unknown[]; - datetime: Date; - level: number; - levelName: string; +export class LogRecord { + readonly msg: string; + #args: unknown[]; + #datetime: Date; + readonly level: number; + readonly levelName: string; + + constructor(msg: string, args: unknown[], level: number) { + this.msg = msg; + this.#args = [...args]; + this.level = level; + this.#datetime = new Date(); + this.levelName = getLevelName(level); + } + get args(): unknown[] { + return [...this.#args]; + } + get datetime(): Date { + return new Date(this.#datetime.getTime()); + } } export class Logger { @@ -26,16 +40,8 @@ export class Logger { _log(level: number, msg: string, ...args: unknown[]): void { if (this.level > level) return; - // TODO: it'd be a good idea to make it immutable, so - // no handler mangles it by mistake - // TODO: iterpolate msg with values - const record: LogRecord = { - msg: msg, - args: args, - datetime: new Date(), - level: level, - levelName: getLevelName(level), - }; + const record: LogRecord = new LogRecord(msg, args, level); + this.handlers.forEach((handler): void => { handler.handle(record); }); |