Custom Logger for Effect Logs on Datadog

For those wanting to read Effect logs on Datadog, here's the Logger that I've been using for couple months now:

import { HashMap, Logger, Option } from "effect";

export const LoggerLive = Logger.replace(
    Logger.defaultLogger,
    Logger.make(({ message, annotations, date, logLevel }) => {
        const messageObjects = Array.isArray(message)
            ? message.filter((message): message is object => typeof message === "object")
            : [];
        const messageStrings = Array.isArray(message) ? message.filter((message) => typeof message === "string") : [];

        return JSON.stringify({
            level: logLevel.label.toLowerCase(),
            timestamp: date,
            dd: {
                trace_id: Option.getOrNull(HashMap.get(annotations, "effect.traceId")),
                span_id: Option.getOrNull(HashMap.get(annotations, "effect.spanId"))
            },
            message: messageStrings.join(" "),
            ...Object.assign({}, ...messageObjects)
        });
    }).pipe(Logger.withSpanAnnotations, Logger.withConsoleLog)
);
Was this page helpful?