Path: blob/main/src/vs/platform/log/electron-main/logIpc.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Event } from '../../../base/common/event.js';6import { ResourceMap } from '../../../base/common/map.js';7import { URI } from '../../../base/common/uri.js';8import { IServerChannel } from '../../../base/parts/ipc/common/ipc.js';9import { ILogger, ILoggerOptions, isLogLevel, log, LogLevel } from '../common/log.js';10import { ILoggerMainService } from './loggerService.js';1112export class LoggerChannel implements IServerChannel {1314private readonly loggers = new ResourceMap<ILogger>();1516constructor(private readonly loggerService: ILoggerMainService) { }1718listen(_: unknown, event: string, windowId?: number): Event<any> {19switch (event) {20case 'onDidChangeLoggers': return windowId ? this.loggerService.getOnDidChangeLoggersEvent(windowId) : this.loggerService.onDidChangeLoggers;21case 'onDidChangeLogLevel': return windowId ? this.loggerService.getOnDidChangeLogLevelEvent(windowId) : this.loggerService.onDidChangeLogLevel;22case 'onDidChangeVisibility': return windowId ? this.loggerService.getOnDidChangeVisibilityEvent(windowId) : this.loggerService.onDidChangeVisibility;23}24throw new Error(`Event not found: ${event}`);25}2627async call(_: unknown, command: string, arg?: any): Promise<any> {28switch (command) {29case 'createLogger': this.createLogger(URI.revive(arg[0]), arg[1], arg[2]); return;30case 'log': return this.log(URI.revive(arg[0]), arg[1]);31case 'consoleLog': return this.consoleLog(arg[0], arg[1]);32case 'setLogLevel': return isLogLevel(arg[0]) ? this.loggerService.setLogLevel(arg[0]) : this.loggerService.setLogLevel(URI.revive(arg[0]), arg[1]);33case 'setVisibility': return this.loggerService.setVisibility(URI.revive(arg[0]), arg[1]);34case 'registerLogger': return this.loggerService.registerLogger({ ...arg[0], resource: URI.revive(arg[0].resource) }, arg[1]);35case 'deregisterLogger': return this.loggerService.deregisterLogger(URI.revive(arg[0]));36}3738throw new Error(`Call not found: ${command}`);39}4041private createLogger(file: URI, options: ILoggerOptions, windowId: number | undefined): void {42this.loggers.set(file, this.loggerService.createLogger(file, options, windowId));43}4445private consoleLog(level: LogLevel, args: any[]): void {46let consoleFn = console.log;4748switch (level) {49case LogLevel.Error:50consoleFn = console.error;51break;52case LogLevel.Warning:53consoleFn = console.warn;54break;55case LogLevel.Info:56consoleFn = console.info;57break;58}5960consoleFn.call(console, ...args);61}6263private log(file: URI, messages: [LogLevel, string][]): void {64const logger = this.loggers.get(file);65if (!logger) {66throw new Error('Create the logger before logging');67}68for (const [level, message] of messages) {69log(logger, level, message);70}71}72}73747576