Skip to content

Commit 2a171f3

Browse files
authored
feat: serialize logger messages (#1)
1 parent 98bfcec commit 2a171f3

File tree

2 files changed

+47
-11
lines changed

2 files changed

+47
-11
lines changed

src/index.ts

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export type LogColors = keyof typeof colors
1111
export interface LogEntry {
1212
timestamp: Date
1313
level: LogLevel
14-
message: string
14+
message: any
1515
}
1616

1717
export class Logger {
@@ -60,7 +60,7 @@ export class Logger {
6060
* @example
6161
* logger.debug('no duplicates found, creating a document...')
6262
*/
63-
public debug(message: string, ...positionals: Array<unknown>): void {
63+
public debug(message: any, ...positionals: Array<unknown>): void {
6464
this.logEntry({
6565
level: 'debug',
6666
message: colors.gray(message),
@@ -77,7 +77,7 @@ export class Logger {
7777
* @example
7878
* logger.info('start parsing...')
7979
*/
80-
public info(message: string, ...positionals: Array<unknown>) {
80+
public info(message: any, ...positionals: Array<unknown>) {
8181
this.logEntry({
8282
level: 'info',
8383
message,
@@ -90,7 +90,7 @@ export class Logger {
9090

9191
const performance = new PerformanceEntry()
9292

93-
return (message: string, ...positionals: Array<unknown>) => {
93+
return (message: any, ...positionals: Array<unknown>) => {
9494
performance.measure()
9595

9696
this.logEntry({
@@ -110,7 +110,7 @@ export class Logger {
110110
* @example
111111
* logger.success('successfully created document')
112112
*/
113-
public success(message: string, ...positionals: Array<unknown>): void {
113+
public success(message: any, ...positionals: Array<unknown>): void {
114114
this.logEntry({
115115
level: 'info',
116116
message,
@@ -128,7 +128,7 @@ export class Logger {
128128
* @example
129129
* logger.warning('found legacy document format')
130130
*/
131-
public warning(message: string, ...positionals: Array<unknown>): void {
131+
public warning(message: any, ...positionals: Array<unknown>): void {
132132
this.logEntry({
133133
level: 'warning',
134134
message,
@@ -146,7 +146,7 @@ export class Logger {
146146
* @example
147147
* logger.error('something went wrong')
148148
*/
149-
public error(message: string, ...positionals: Array<unknown>): void {
149+
public error(message: any, ...positionals: Array<unknown>): void {
150150
this.logEntry({
151151
level: 'error',
152152
message,
@@ -172,7 +172,7 @@ export class Logger {
172172
callback()
173173
}
174174

175-
private createEntry(level: LogLevel, message: string): LogEntry {
175+
private createEntry(level: LogLevel, message: unknown): LogEntry {
176176
return {
177177
timestamp: new Date(),
178178
level,
@@ -182,7 +182,7 @@ export class Logger {
182182

183183
private logEntry(args: {
184184
level: LogLevel
185-
message: string
185+
message: unknown
186186
positionals?: Array<unknown>
187187
prefix?: string
188188
colors?: {
@@ -211,9 +211,9 @@ export class Logger {
211211
write(
212212
[colorize.timestamp(this.formatTimestamp(entry.timestamp))]
213213
.concat(prefix != null ? colorize.prefix(prefix) : [])
214-
.concat(message)
214+
.concat(serializeInput(message))
215215
.join(' '),
216-
...positionals
216+
...positionals.map(serializeInput)
217217
)
218218
}
219219

@@ -304,3 +304,23 @@ function isDefinedAndNotEquals(
304304
): boolean {
305305
return value !== undefined && value !== expected
306306
}
307+
308+
function serializeInput(message: any): string {
309+
if (typeof message === 'undefined') {
310+
return 'undefined'
311+
}
312+
313+
if (message === null) {
314+
return 'null'
315+
}
316+
317+
if (typeof message === 'string') {
318+
return message
319+
}
320+
321+
if (typeof message === 'object') {
322+
return JSON.stringify(message)
323+
}
324+
325+
return message.toString()
326+
}

test/node/Logger.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,19 @@ it('supports positionals', () => {
100100
`${colors.red('12:34:56:789')} ${colors.red('✖ [parser]')} hello world\n`
101101
)
102102
})
103+
104+
it('serializes the input message', () => {
105+
logger.info({ hello: 'world' })
106+
expect(process.stdout.write).toHaveBeenCalledWith(
107+
`${colors.gray('12:34:56:789')} ${colors.blue(
108+
'[parser]'
109+
)} {"hello":"world"}\n`
110+
)
111+
112+
logger.info([1, 'two', { three: 3 }])
113+
expect(process.stdout.write).toHaveBeenCalledWith(
114+
`${colors.gray('12:34:56:789')} ${colors.blue(
115+
'[parser]'
116+
)} [1,"two",{"three":3}]\n`
117+
)
118+
})

0 commit comments

Comments
 (0)