Fire-crawl / src /lib /logger.ts
Echo-AI-official's picture
Upload 280 files
0e759d2 verified
import * as winston from "winston";
import { configDotenv } from "dotenv";
configDotenv();
const logFormat = winston.format.printf(
(info) =>
`${info.timestamp} ${info.level} [${info.metadata.module ?? ""}:${info.metadata.method ?? ""}]: ${info.message} ${
info.level.includes("error") || info.level.includes("warn")
? JSON.stringify(info.metadata, (_, value) => {
if (value instanceof Error) {
return {
...value,
name: value.name,
message: value.message,
stack: value.stack,
cause: value.cause,
};
} else {
return value;
}
})
: ""
}`,
);
export const logger = winston.createLogger({
level: process.env.LOGGING_LEVEL?.toLowerCase() ?? "debug",
format: winston.format.json({
replacer(key, value) {
if (value instanceof Error) {
return {
...value,
name: value.name,
message: value.message,
stack: value.stack,
cause: value.cause,
};
} else {
return value;
}
},
}),
transports: [
...(process.env.FIRECRAWL_LOG_TO_FILE
? [
new winston.transports.File({
filename:
"firecrawl-" +
(process.argv[1].includes("worker") ? "worker" : "app") +
"-" +
crypto.randomUUID() +
".log",
}),
]
: []),
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
winston.format.metadata({
fillExcept: ["message", "level", "timestamp"],
}),
...((process.env.ENV === "production" &&
process.env.SENTRY_ENVIRONMENT === "dev") ||
process.env.ENV !== "production"
? [winston.format.colorize(), logFormat]
: []),
),
}),
],
});