summaryrefslogtreecommitdiff
path: root/std/log/logger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/log/logger.ts')
-rw-r--r--std/log/logger.ts38
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);
});