feat: extract logger interface & add noop logger

This commit is contained in:
thecodrr
2022-07-19 16:39:49 +05:00
parent 54103f7cec
commit 5f4d88cf14
3 changed files with 40 additions and 11 deletions

View File

@@ -1,7 +1,24 @@
import { consoleReporter } from "./reporters/console";
import { ILogReporter, LoggerConfig, LogLevel } from "./types";
export class Logger {
type LogLevelFunc = (message: string, extras?: Record<string, any>) => void;
type ErrorLogLevelFunc = (
error: Error,
fallbackMessage?: string,
extras?: Record<string, any>
) => 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<string, any>) => {
return (
error: Error,
fallbackMessage?: string,
extras?: Record<string, any>
) => {
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,

View File

@@ -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) });

View File

@@ -12,7 +12,6 @@ export enum LogLevel {
}
export type LogMessage = {
error?: Error;
timestamp: number;
message: string;
level: LogLevel;