From 7892506073ef23fbb62aeebcb3692198155c3d9a Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 5 Jul 2024 12:24:06 +1200 Subject: [PATCH] add more options --- packages/effect/src/Logger.ts | 7 ++++- packages/effect/src/internal/logger.ts | 39 +++++++++++++++----------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/packages/effect/src/Logger.ts b/packages/effect/src/Logger.ts index 56cbaf91c3b..8690529e22b 100644 --- a/packages/effect/src/Logger.ts +++ b/packages/effect/src/Logger.ts @@ -367,7 +367,12 @@ export const stringLogger: Logger = internal.stringLogger * @category constructors */ export const prettyLogger: ( - options?: { readonly colors?: "auto" | boolean | undefined; readonly stderr?: boolean | undefined } + options?: { + readonly colors?: "auto" | boolean | undefined + readonly stderr?: boolean | undefined + readonly formatDate?: ((date: Date) => string) | undefined + readonly mode?: "browser" | "tty" | "auto" | undefined + } ) => Logger = internal.prettyLogger /** diff --git a/packages/effect/src/internal/logger.ts b/packages/effect/src/internal/logger.ts index af4123600ec..13b506ff851 100644 --- a/packages/effect/src/internal/logger.ts +++ b/packages/effect/src/internal/logger.ts @@ -382,18 +382,14 @@ const withColor = (text: string, ...colors: ReadonlyArray) => { const withColorNoop = (text: string, ..._colors: ReadonlyArray) => text const colors = { bold: "1", - red: "31", green: "32", yellow: "33", blue: "34", - magenta: "95", cyan: "36", white: "37", gray: "90", black: "30", - - bgRed: "41", bgBrightRed: "101" } as const @@ -408,28 +404,36 @@ const logLevelColors: Record> = Fatal: [colors.bgBrightRed, colors.black] } +const defaultDateFormat = (date: Date): string => + `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${ + date.getSeconds().toString().padStart(2, "0") + }.${date.getMilliseconds().toString().padStart(3, "0")}` + /** @internal */ export const prettyLogger = (options?: { readonly colors?: "auto" | boolean | undefined readonly stderr?: boolean | undefined -}) => - makeLogger( + readonly formatDate?: ((date: Date) => string) | undefined + readonly mode?: "browser" | "tty" | "auto" | undefined +}) => { + const mode_ = options?.mode ?? "auto" + const mode = mode_ === "auto" ? (hasWindow ? "browser" : "tty") : mode_ + const isBrowser = mode === "browser" + const showColors = typeof options?.colors === "boolean" ? options.colors : processStdoutIsTTY || isBrowser + const color = showColors ? withColor : withColorNoop + const formatDate = options?.formatDate ?? defaultDateFormat + + return makeLogger( ({ annotations, cause, context, date, fiberId, logLevel, message: message_, spans }) => { const services = FiberRefs.getOrDefault(context, defaultServices.currentServices) const console = Context.get(services, consoleTag).unsafe const log = options?.stderr === true ? console.error : console.log - const showColors = typeof options?.colors === "boolean" ? options.colors : processStdoutIsTTY || hasWindow - const color = showColors ? withColor : withColorNoop const message = Arr.ensure(message_) - let firstLine = color( - `[${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${ - date.getSeconds().toString().padStart(2, "0") - }.${date.getMilliseconds().toString().padStart(3, "0")}]`, - colors.white - ) - + ` ${color(logLevel.label, ...logLevelColors[logLevel._tag])} (${_fiberId.threadName(fiberId)})` + let firstLine = color(`[${formatDate(date)}]`, colors.white) + + ` ${color(logLevel.label, ...logLevelColors[logLevel._tag])}` + + ` (${_fiberId.threadName(fiberId)})` if (List.isCons(spans)) { const now = date.getTime() @@ -449,7 +453,7 @@ export const prettyLogger = (options?: { } } - if (hasWindow) { + if (isBrowser) { console.group(firstLine) } else { log(firstLine) @@ -461,7 +465,7 @@ export const prettyLogger = (options?: { if (!Cause.isEmpty(cause)) { const errors = Cause.prettyErrors(cause) for (let i = 0; i < errors.length; i++) { - if (hasWindow) { + if (isBrowser) { console.error(errors[i].stack) } else { currentMessage += "\n%s" @@ -490,3 +494,4 @@ export const prettyLogger = (options?: { console.groupEnd() } ) +}