monaco-editor-core
Version:
A browser based code editor
151 lines (150 loc) • 4.67 kB
JavaScript
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));