astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
30 lines (29 loc) • 915 B
JavaScript
import { AstroLogger, levels } from "../core.js";
import { matchesLevel } from "../public.js";
export const SGR_REGEX = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, "g");
export default function jsonLoggerDestination(config = {}) {
const { pretty = false, level = "info" } = config;
return { write(event) {
if (!matchesLevel(event.level, level)) {
return;
}
const dest = levels[event.level] >= levels["error"] ? console.error : console.info;
const message = event.message.replace(SGR_REGEX, "");
const payload = pretty ? JSON.stringify({
message,
label: event.label,
level: event.level
}, null, 2) : JSON.stringify({
message,
label: event.label,
level: event.level
});
dest(payload);
} };
}
export function createJsonLoggerFromFlags(config) {
return new AstroLogger({
destination: jsonLoggerDestination({ pretty: false }),
level: config.logLevel ?? "info"
});
}