MCPcopy Create free account
hub / github.com/OpenHands/OpenHands / createFileLogger

Function createFileLogger

scripts/logger.mjs:47–91  ·  view source on GitHub ↗

* Attempt to construct a winston-backed file logger. Returns `null` if * winston isn't installed (packaged desktop app) or any setup step fails; * `fileLog` then degrades to a no-op. * * @returns {Promise }

()

Source from the content-addressed store, hash-verified

45 * @returns {Promise<import("winston").Logger | null>}
46 */
47async function createFileLogger() {
48 let winston;
49 let DailyRotateFileMod;
50 try {
51 winston = await import("winston");
52 DailyRotateFileMod = await import("winston-daily-rotate-file");
53 } catch {
54 return null;
55 }
56
57 try {
58 mkdirSync(logDir, { recursive: true });
59
60 const DailyRotateFile =
61 DailyRotateFileMod.default ?? DailyRotateFileMod;
62 const fileTransport = new DailyRotateFile({
63 dirname: logDir,
64 filename: "agent-canvas.%DATE%.log",
65 datePattern: "YYYY-MM-DD",
66 maxFiles: "7d",
67 auditFile: join(logDir, ".log-audit.json"),
68 createSymlink: false,
69 });
70
71 const logger = winston.createLogger({
72 level: "debug",
73 format: winston.format.combine(
74 winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
75 winston.format.printf(
76 ({ timestamp, level, message }) =>
77 `${timestamp} [${level.toUpperCase().padEnd(5)}] ${message}`,
78 ),
79 ),
80 transports: [fileTransport],
81 });
82
83 // Swallow any transport-level errors (e.g. disk full) so a logging
84 // failure never crashes the dev server.
85 logger.on("error", () => {});
86 fileTransport.on("error", () => {});
87 return logger;
88 } catch {
89 return null;
90 }
91}
92
93const fileLogger = await createFileLogger();
94

Callers 1

logger.mjsFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected