diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index f09dd90da..f6f720483 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -1,7 +1,24 @@ import { consoleReporter } from "./reporters/console"; import { ILogReporter, LoggerConfig, LogLevel } from "./types"; -export class Logger { +type LogLevelFunc = (message: string, extras?: Record) => void; +type ErrorLogLevelFunc = ( + error: Error, + fallbackMessage?: string, + extras?: Record +) => void; +export interface ILogger { + fatal: ErrorLogLevelFunc; + warn: LogLevelFunc; + debug: LogLevelFunc; + error: ErrorLogLevelFunc; + info: LogLevelFunc; + log: LogLevelFunc; + measure: (tag: string) => void; + scope: (scope: string) => void; +} + +export class Logger implements ILogger { constructor( private readonly config: LoggerConfig = { reporter: consoleReporter, @@ -31,6 +48,18 @@ export class Logger { } } } + +export class NoopLogger implements ILogger { + fatal() {} + warn() {} + debug() {} + error() {} + info() {} + log() {} + measure(_tag: string) {} + scope(_scope: string) {} +} + export * from "./types"; export * from "./reporters"; @@ -50,12 +79,19 @@ function logLevelFactory(level: LogLevel, config: LoggerConfig) { } function errorLogLevelFactory(level: LogLevel, config: LoggerConfig) { - return (error: Error, message?: string, extras?: Record) => { + return ( + error: Error, + fallbackMessage?: string, + extras?: Record + ) => { const now = Date.now(); config.reporter.write({ - error, level, - message: message || "", + message: error.stack + ? error.stack.trim() + : fallbackMessage + ? fallbackMessage + : "An error occurred.", timestamp: now, extras, scope: config.scope, diff --git a/packages/logger/src/reporters/console.ts b/packages/logger/src/reporters/console.ts index 8a9450366..6cc18a1ea 100644 --- a/packages/logger/src/reporters/console.ts +++ b/packages/logger/src/reporters/console.ts @@ -37,12 +37,6 @@ export function format(log: LogMessage) { { value: LogLevel[log.level].toUpperCase(), separator: " | " }, { value: log.scope ? `[${log.scope}]` : "", separator: ": " }, { value: log.message }, - { - value: - log.error instanceof Error && typeof log.error.stack < "u" - ? log.error.stack?.trim() - : undefined, - }, ]; if (log.extras) tokens.push({ value: JSON.stringify(log.extras) }); diff --git a/packages/logger/src/types.ts b/packages/logger/src/types.ts index 2a81e19e3..753172a82 100644 --- a/packages/logger/src/types.ts +++ b/packages/logger/src/types.ts @@ -12,7 +12,6 @@ export enum LogLevel { } export type LogMessage = { - error?: Error; timestamp: number; message: string; level: LogLevel;