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