MCPcopy Create free account
hub / github.com/Dart-Code/Dart-Code / captureLogs

Function captureLogs

src/shared/logging.ts:107–154  ·  view source on GitHub ↗
(logger: EmittingLogger, file: string, header: string, maxLogLineLength: number, logCategories: LogCategory[], excludeLogCategories = false)

Source from the content-addressed store, hash-verified

105}
106
107export function captureLogs(logger: EmittingLogger, file: string, header: string, maxLogLineLength: number, logCategories: LogCategory[], excludeLogCategories = false): IAmDisposableAsync {
108 if (!file || !path.isAbsolute(file))
109 throw new Error("Path passed to logTo must be an absolute path");
110 const time = (detailed = false) => detailed ? `[${(new Date()).toTimeString()}] ` : `[${(new Date()).toLocaleTimeString()}] `;
111 createFolderForFile(file);
112 let logStream: fs.WriteStream | undefined = fs.createWriteStream(file);
113 if (header)
114 logStream.write(header);
115
116 const categoryNames = logCategories.map((c) => LogCategory[c]);
117 logStream.write(`${excludeLogCategories ? "Not " : ""}Logging Categories:${platformEol} ${categoryNames.join(", ")}${platformEol}${platformEol}`);
118
119 logStream.write(`${(new Date()).toDateString()} ${time(true)}Log file started${platformEol}`);
120 let fileLogger: IAmDisposableAsync | undefined = logger.onLog((e) => {
121 if (!logStream)
122 return;
123
124 // We should log this event if:
125 // - We don't have a category filter; or
126 // - The category filter includes this category; or
127 // - The log is WARN/ERROR (they get logged everywhere).
128 const shouldLog = (excludeLogCategories
129 ? !logCategories.includes(e.category)
130 : logCategories.includes(e.category))
131 || e.severity === LogSeverity.Warn
132 || e.severity === LogSeverity.Error;
133 if (!shouldLog)
134 return;
135
136 logStream.write(`${e.toLine(maxLogLineLength)}${os.EOL}`);
137 });
138 return {
139 async dispose(): Promise<void> {
140 if (fileLogger) {
141 await fileLogger.dispose();
142 fileLogger = undefined;
143 }
144 return new Promise((resolve) => {
145 if (logStream) {
146 logStream.write(`${(new Date()).toDateString()} ${time(true)}Log file ended${os.EOL}`);
147 logStream.once("finish", resolve);
148 logStream.end();
149 logStream = undefined;
150 }
151 });
152 },
153 };
154}
155
156export class RingLog {
157 private readonly lines: string[];

Callers 4

setupTestLoggingFunction · 0.90
setupLogFunction · 0.90
onWillStartSessionMethod · 0.90
startLoggingMethod · 0.90

Calls 4

createFolderForFileFunction · 0.90
timeFunction · 0.85
onLogMethod · 0.80
toLineMethod · 0.65

Tested by

no test coverage detected