UNPKG

monaco-editor-core

Version:

A browser based code editor

151 lines (150 loc) 4.67 kB
import { Emitter } from '../../../base/common/event.js'; import { Disposable } from '../../../base/common/lifecycle.js'; import { RawContextKey } from '../../contextkey/common/contextkey.js'; import { createDecorator } from '../../instantiation/common/instantiation.js'; export const ILogService = createDecorator('logService'); export var LogLevel; (function (LogLevel) { LogLevel[LogLevel["Off"] = 0] = "Off"; LogLevel[LogLevel["Trace"] = 1] = "Trace"; LogLevel[LogLevel["Debug"] = 2] = "Debug"; LogLevel[LogLevel["Info"] = 3] = "Info"; LogLevel[LogLevel["Warning"] = 4] = "Warning"; LogLevel[LogLevel["Error"] = 5] = "Error"; })(LogLevel || (LogLevel = {})); export const DEFAULT_LOG_LEVEL = LogLevel.Info; export class AbstractLogger extends Disposable { constructor() { super(...arguments); this.level = DEFAULT_LOG_LEVEL; this._onDidChangeLogLevel = this._register(new Emitter()); this.onDidChangeLogLevel = this._onDidChangeLogLevel.event; } setLevel(level) { if (this.level !== level) { this.level = level; this._onDidChangeLogLevel.fire(this.level); } } getLevel() { return this.level; } checkLogLevel(level) { return this.level !== LogLevel.Off && this.level <= level; } } export class ConsoleLogger extends AbstractLogger { constructor(logLevel = DEFAULT_LOG_LEVEL, useColors = true) { super(); this.useColors = useColors; this.setLevel(logLevel); } trace(message, ...args) { if (this.checkLogLevel(LogLevel.Trace)) { if (this.useColors) { console.log('%cTRACE', 'color: #888', message, ...args); } else { console.log(message, ...args); } } } debug(message, ...args) { if (this.checkLogLevel(LogLevel.Debug)) { if (this.useColors) { console.log('%cDEBUG', 'background: #eee; color: #888', message, ...args); } else { console.log(message, ...args); } } } info(message, ...args) { if (this.checkLogLevel(LogLevel.Info)) { if (this.useColors) { console.log('%c INFO', 'color: #33f', message, ...args); } else { console.log(message, ...args); } } } warn(message, ...args) { if (this.checkLogLevel(LogLevel.Warning)) { if (this.useColors) { console.log('%c WARN', 'color: #993', message, ...args); } else { console.log(message, ...args); } } } error(message, ...args) { if (this.checkLogLevel(LogLevel.Error)) { if (this.useColors) { console.log('%c ERR', 'color: #f33', message, ...args); } else { console.error(message, ...args); } } } } export class MultiplexLogger extends AbstractLogger { constructor(loggers) { super(); this.loggers = loggers; if (loggers.length) { this.setLevel(loggers[0].getLevel()); } } setLevel(level) { for (const logger of this.loggers) { logger.setLevel(level); } super.setLevel(level); } trace(message, ...args) { for (const logger of this.loggers) { logger.trace(message, ...args); } } debug(message, ...args) { for (const logger of this.loggers) { logger.debug(message, ...args); } } info(message, ...args) { for (const logger of this.loggers) { logger.info(message, ...args); } } warn(message, ...args) { for (const logger of this.loggers) { logger.warn(message, ...args); } } error(message, ...args) { for (const logger of this.loggers) { logger.error(message, ...args); } } dispose() { for (const logger of this.loggers) { logger.dispose(); } super.dispose(); } } export function LogLevelToString(logLevel) { switch (logLevel) { case LogLevel.Trace: return 'trace'; case LogLevel.Debug: return 'debug'; case LogLevel.Info: return 'info'; case LogLevel.Warning: return 'warn'; case LogLevel.Error: return 'error'; case LogLevel.Off: return 'off'; } } // Contexts export const CONTEXT_LOG_LEVEL = new RawContextKey('logLevel', LogLevelToString(LogLevel.Info));