Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/log/electron-main/logIpc.ts
3296 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 { Event } from '../../../base/common/event.js';
7
import { ResourceMap } from '../../../base/common/map.js';
8
import { URI } from '../../../base/common/uri.js';
9
import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js';
10
import { ILogger, ILoggerOptions, isLogLevel, log, LogLevel } from '../common/log.js';
11
import { ILoggerMainService } from './loggerService.js';
12
13
export class LoggerChannel implements IServerChannel {
14
15
private readonly loggers = new ResourceMap<ILogger>();
16
17
constructor(private readonly loggerService: ILoggerMainService) { }
18
19
listen(_: unknown, event: string, windowId?: number): Event<any> {
20
switch (event) {
21
case 'onDidChangeLoggers': return windowId ? this.loggerService.getOnDidChangeLoggersEvent(windowId) : this.loggerService.onDidChangeLoggers;
22
case 'onDidChangeLogLevel': return windowId ? this.loggerService.getOnDidChangeLogLevelEvent(windowId) : this.loggerService.onDidChangeLogLevel;
23
case 'onDidChangeVisibility': return windowId ? this.loggerService.getOnDidChangeVisibilityEvent(windowId) : this.loggerService.onDidChangeVisibility;
24
}
25
throw new Error(`Event not found: ${event}`);
26
}
27
28
async call(_: unknown, command: string, arg?: any): Promise<any> {
29
switch (command) {
30
case 'createLogger': this.createLogger(URI.revive(arg[0]), arg[1], arg[2]); return;
31
case 'log': return this.log(URI.revive(arg[0]), arg[1]);
32
case 'consoleLog': return this.consoleLog(arg[0], arg[1]);
33
case 'setLogLevel': return isLogLevel(arg[0]) ? this.loggerService.setLogLevel(arg[0]) : this.loggerService.setLogLevel(URI.revive(arg[0]), arg[1]);
34
case 'setVisibility': return this.loggerService.setVisibility(URI.revive(arg[0]), arg[1]);
35
case 'registerLogger': return this.loggerService.registerLogger({ ...arg[0], resource: URI.revive(arg[0].resource) }, arg[1]);
36
case 'deregisterLogger': return this.loggerService.deregisterLogger(URI.revive(arg[0]));
37
}
38
39
throw new Error(`Call not found: ${command}`);
40
}
41
42
private createLogger(file: URI, options: ILoggerOptions, windowId: number | undefined): void {
43
this.loggers.set(file, this.loggerService.createLogger(file, options, windowId));
44
}
45
46
private consoleLog(level: LogLevel, args: any[]): void {
47
let consoleFn = console.log;
48
49
switch (level) {
50
case LogLevel.Error:
51
consoleFn = console.error;
52
break;
53
case LogLevel.Warning:
54
consoleFn = console.warn;
55
break;
56
case LogLevel.Info:
57
consoleFn = console.info;
58
break;
59
}
60
61
consoleFn.call(console, ...args);
62
}
63
64
private log(file: URI, messages: [LogLevel, string][]): void {
65
const logger = this.loggers.get(file);
66
if (!logger) {
67
throw new Error('Create the logger before logging');
68
}
69
for (const [level, message] of messages) {
70
log(logger, level, message);
71
}
72
}
73
}
74
75
76