Skip to content

Commit 29fe85a

Browse files
committed
WIP
1 parent b3e2b74 commit 29fe85a

File tree

3 files changed

+56
-22
lines changed

3 files changed

+56
-22
lines changed

Diff for: src/Logger.ts

+41-19
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { LogData, LogRecord, LogFormatter } from './types';
1+
import type { ToString, LogData, LogRecord, LogFormatter } from './types';
22
import type Handler from './Handler';
33
import { LogLevel } from './types';
44
import ConsoleErrHandler from './handlers/ConsoleErrHandler';
@@ -83,10 +83,14 @@ class Logger {
8383
delete this.filter;
8484
}
8585

86-
public debug(msg: string, format?: LogFormatter): void;
87-
public debug(msg: string, data: LogData, format?: LogFormatter): void;
86+
public debug(msg: ToString | undefined, format?: LogFormatter): void;
8887
public debug(
89-
msg: string,
88+
msg: ToString | undefined,
89+
data: LogData,
90+
format?: LogFormatter,
91+
): void;
92+
public debug(
93+
msg: ToString | undefined,
9094
formatOrData?: LogFormatter | LogData,
9195
format?: LogFormatter,
9296
): void {
@@ -97,10 +101,14 @@ class Logger {
97101
}
98102
}
99103

100-
public info(msg: string, format?: LogFormatter): void;
101-
public info(msg: string, data: LogData, format?: LogFormatter): void;
104+
public info(msg: ToString | undefined, format?: LogFormatter): void;
105+
public info(
106+
msg: ToString | undefined,
107+
data: LogData,
108+
format?: LogFormatter,
109+
): void;
102110
public info(
103-
msg: string,
111+
msg: ToString | undefined,
104112
formatOrData?: LogFormatter | LogData,
105113
format?: LogFormatter,
106114
): void {
@@ -111,10 +119,14 @@ class Logger {
111119
}
112120
}
113121

114-
public warn(msg: string, format?: LogFormatter): void;
115-
public warn(msg: string, data: LogData, format?: LogFormatter): void;
122+
public warn(msg: ToString | undefined, format?: LogFormatter): void;
116123
public warn(
117-
msg: string,
124+
msg: ToString | undefined,
125+
data: LogData,
126+
format?: LogFormatter,
127+
): void;
128+
public warn(
129+
msg: ToString | undefined,
118130
formatOrData?: LogFormatter | LogData,
119131
format?: LogFormatter,
120132
): void {
@@ -125,10 +137,14 @@ class Logger {
125137
}
126138
}
127139

128-
public error(msg: string, format?: LogFormatter): void;
129-
public error(msg: string, data: LogData, format?: LogFormatter): void;
140+
public error(msg: ToString | undefined, format?: LogFormatter): void;
141+
public error(
142+
msg: ToString | undefined,
143+
data: LogData,
144+
format?: LogFormatter,
145+
): void;
130146
public error(
131-
msg: string,
147+
msg: ToString | undefined,
132148
formatOrData?: LogFormatter | LogData,
133149
format?: LogFormatter,
134150
): void {
@@ -140,11 +156,13 @@ class Logger {
140156
}
141157

142158
protected log(
143-
msg: string,
159+
msg: ToString | undefined,
144160
data: LogData,
145161
level: LogLevel,
146162
format?: LogFormatter,
147163
): void {
164+
// Filter on level before making a record
165+
if (level < this.getEffectiveLevel()) return;
148166
const record = this.makeRecord(msg, data, level);
149167
this.callHandlers(record, level, format);
150168
}
@@ -154,13 +172,17 @@ class Logger {
154172
* The `LogRecord` can contain lazy values via wrapping with a lambda
155173
* This improves performance as they are not evaluated unless needed during formatting
156174
*/
157-
protected makeRecord(msg: string, data: LogData, level: LogLevel): LogRecord {
175+
protected makeRecord(
176+
msg: ToString | undefined,
177+
data: LogData,
178+
level: LogLevel,
179+
): LogRecord {
158180
return {
159181
logger: this,
160182
key: this.key,
161183
date: new Date(),
162184
level,
163-
msg,
185+
msg: msg?.toString(),
164186
data,
165187
keys: () => {
166188
let logger: Logger = this;
@@ -197,9 +219,9 @@ class Logger {
197219
format?: LogFormatter,
198220
keys: Array<string> = [],
199221
): void {
200-
if (level < this.getEffectiveLevel()) {
201-
return;
202-
}
222+
// Filter on level before calling handlers
223+
// This is also called when traversing up the parent
224+
if (level < this.getEffectiveLevel()) return;
203225
keys.push(this.key);
204226
if (this.filter != null) {
205227
const keysPath = keys.reduce((prev, curr) => `${curr}.${prev}`);

Diff for: src/formatting.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function format(
2424
} else if (value === date) {
2525
result += record.date.toISOString();
2626
} else if (value === msg) {
27-
result += record.msg;
27+
if (record.msg != null) result += record.msg;
2828
} else if (value === level) {
2929
result += utils.levelToString(record.level);
3030
} else if (value === data) {

Diff for: src/types.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ enum LogLevel {
88
ERROR = 4,
99
}
1010

11+
interface ToString {
12+
toString: () => string;
13+
}
14+
1115
interface ToJSON {
1216
toJSON: (key?: string) => string;
1317
}
@@ -42,7 +46,7 @@ type LogRecord = {
4246
key: string;
4347
date: Date;
4448
level: LogLevel;
45-
msg: string;
49+
msg: string | undefined;
4650
data: LogData;
4751
keys: () => string;
4852
stack: () => string;
@@ -52,4 +56,12 @@ type LogFormatter = (record: LogRecord) => string;
5256

5357
export { LogLevel };
5458

55-
export type { LogDataKey, LogDataValue, LogData, LogRecord, LogFormatter };
59+
export type {
60+
ToString,
61+
ToJSON,
62+
LogDataKey,
63+
LogDataValue,
64+
LogData,
65+
LogRecord,
66+
LogFormatter,
67+
};

0 commit comments

Comments
 (0)