Skip to content

Commit 71a4bbb

Browse files
committed
feat: Allow logging errors when passed as message parameter
Signed-off-by: Ferdinand Thiessen <rpm@fthiessen.de>
1 parent 07b02c2 commit 71a4bbb

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

lib/ConsoleLogger.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,33 @@ export class ConsoleLogger implements ILogger {
55
private context: any
66

77
constructor(context: any) {
8-
this.context = context
8+
this.context = context || {}
99
}
1010

11-
private formatMessage(message: string, level: LogLevel, context: any): string {
11+
private formatMessage(message: string|Error, level: LogLevel, context: any): string {
1212
let msg = '[' + LogLevel[level].toUpperCase() + ']'
13+
1314
if (context && context.app) {
1415
msg += ' ' + context.app + ': '
1516
}
16-
return msg + message
17+
18+
if (typeof message === 'string') return msg + message
19+
20+
// basic error formatting
21+
msg += `Unexpected ${message.name}`
22+
if (message.message) msg += ` "${message.message}"`
23+
// only add stack trace when debugging
24+
if (level === LogLevel.Debug && message.stack) msg += `\n\nStack trace:\n${message.stack}`
25+
26+
return msg
1727
}
1828

19-
log(level: LogLevel, message: string, context: object) {
29+
log(level: LogLevel, message: string|Error, context: object) {
2030
if (level < this.context?.level) return;
2131

32+
// Add error object to context
33+
if (typeof message === 'object' && (context as any).error === undefined) (context as any).error = message
34+
2235
switch (level) {
2336
case LogLevel.Debug:
2437
console.debug(this.formatMessage(message, LogLevel.Debug, context), context)
@@ -39,23 +52,23 @@ export class ConsoleLogger implements ILogger {
3952
}
4053
}
4154

42-
debug(message: string, context?: object): void {
55+
debug(message: string|Error, context?: object): void {
4356
this.log(LogLevel.Debug, message, Object.assign({}, this.context, context))
4457
}
4558

46-
info(message: string, context?: object): void {
59+
info(message: string|Error, context?: object): void {
4760
this.log(LogLevel.Info, message, Object.assign({}, this.context, context))
4861
}
4962

50-
warn(message: string, context?: object): void {
63+
warn(message: string|Error, context?: object): void {
5164
this.log(LogLevel.Warn, message, Object.assign({}, this.context, context))
5265
}
5366

54-
error(message: string, context?: object): void {
67+
error(message: string|Error, context?: object): void {
5568
this.log(LogLevel.Error, message, Object.assign({}, this.context, context))
5669
}
5770

58-
fatal(message: string, context?: object): void {
71+
fatal(message: string|Error, context?: object): void {
5972
this.log(LogLevel.Fatal, message, Object.assign({}, this.context, context))
6073
}
6174

lib/contracts.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ export enum LogLevel {
88

99
export interface ILogger {
1010

11-
debug(message: string, context?: object): void
12-
info(message: string, context?: object): void
13-
warn(message: string, context?: object): void
14-
error(message: string, context?: object): void
15-
fatal(message: string, context?: object): void
11+
debug(message: string|Error, context?: object): void
12+
info(message: string|Error, context?: object): void
13+
warn(message: string|Error, context?: object): void
14+
error(message: string|Error, context?: object): void
15+
fatal(message: string|Error, context?: object): void
1616

1717
}
1818

0 commit comments

Comments
 (0)