Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/test/automation/src/logger.ts
3520 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { appendFileSync, writeFileSync } from 'fs';
7
import { format } from 'util';
8
import { EOL } from 'os';
9
10
export interface Logger {
11
log(message: string, ...args: any[]): void;
12
}
13
14
export class ConsoleLogger implements Logger {
15
16
log(message: string, ...args: any[]): void {
17
console.log('**', message, ...args);
18
}
19
}
20
21
export class FileLogger implements Logger {
22
23
constructor(private path: string) {
24
writeFileSync(path, '');
25
}
26
27
log(message: string, ...args: any[]): void {
28
const date = new Date().toISOString();
29
appendFileSync(this.path, `[${date}] ${format(message, ...args)}${EOL}`);
30
}
31
}
32
33
export class MultiLogger implements Logger {
34
35
constructor(private loggers: Logger[]) { }
36
37
log(message: string, ...args: any[]): void {
38
for (const logger of this.loggers) {
39
logger.log(message, ...args);
40
}
41
}
42
}
43
44
export async function measureAndLog<T>(promiseFactory: () => Promise<T>, name: string, logger: Logger): Promise<T> {
45
const now = Date.now();
46
47
logger.log(`Starting operation '${name}'...`);
48
49
let res: T | undefined = undefined;
50
let e: unknown;
51
try {
52
res = await promiseFactory();
53
} catch (error) {
54
e = error;
55
}
56
57
if (e) {
58
logger.log(`Finished operation '${name}' with error ${e} after ${Date.now() - now}ms`);
59
throw e;
60
}
61
62
logger.log(`Finished operation '${name}' successfully after ${Date.now() - now}ms`);
63
64
return res as unknown as T;
65
}
66
67