Logger
Logger отвечает за логирование в Diplodoc. Этот сервис предоставляет гибкую систему логирования с поддержкой различных уровней логирования, каналов и тем, а также возможностью кастомизации вывода.
Основные возможности
- Три уровня логирования: info, warning и error
- Поддержка каналов и тем логирования
- Цветной вывод сообщений
- Возможность создания пользовательских тем
- Поддержка фильтрации сообщений
- Возможность перенаправления логов
- Интеграция с хуками для обработки сообщений
Получение доступа к сервису
export class Extension {
apply(program: Build) {
getBaseHooks(program).BeforeAnyRun.tap('MyExtension', (run) => {
// Получение сервиса из контекста
const {logger} = run;
// Получение хуков сервиса
const loggerHooks = getLoggerHooks(logger);
});
}
}
Доступные хуки
Info
Хук вызывается при логировании информационных сообщений.
loggerHooks.Info.tap('MyHook', (message) => {
// message: Сообщение для логирования
console.log('Info message:', message);
return message;
});
Warn
Хук вызывается при логировании предупреждений.
loggerHooks.Warn.tap('MyHook', (message) => {
// message: Сообщение для логирования
console.warn('Warning message:', message);
return message;
});
Error
Хук вызывается при логировании ошибок.
loggerHooks.Error.tap('MyHook', (message) => {
// message: Сообщение для логирования
console.error('Error message:', message);
return message;
});
API сервиса
Метод setup
Настраивает параметры логгера.
Параметры:
options: {quiet?: boolean}
- опции настройкиquiet
- отключение информационных сообщений
Возвращает:
Logger
- текущий экземпляр логгера
logger.setup({quiet: true});
Метод pipe
Перенаправляет логи в другой логгер.
Параметры:
consumer: LogConsumer
- целевой логгер
Возвращает:
Logger
- текущий экземпляр логгера
logger.pipe(anotherLogger);
Метод topic
Создает новую тему логирования.
Параметры:
level: LogLevels
- уровень логированияprefix: string
- префикс сообщенияcolor?: Color
- цвет префикса
Возвращает:
(...messages: unknown[]) => void
- функция логирования
const myTopic = logger.topic(LogLevel.INFO, 'MY_TOPIC', gray);
myTopic('Message');
Метод reset
Сбрасывает счетчики сообщений.
Возвращает:
Logger
- текущий экземпляр логгера
logger.reset();
Методы
info
Метод для логирования информационных сообщений.
logger.info('Information message');
warn
Метод для логирования предупреждений.
logger.warn('Warning message');
error
Метод для логирования ошибок.
logger.error('Error message');
Примеры использования
Создание пользовательского логгера
export class CustomLogger extends Logger {
readonly process = this.topic(LogLevel.INFO, 'PROCESS', gray);
readonly validate = this.topic(LogLevel.INFO, 'VALIDATE', gray);
readonly transform = this.topic(LogLevel.INFO, 'TRANSFORM', gray);
readonly processError = this.topic(LogLevel.ERROR, 'PROCESS_ERROR');
readonly validateError = this.topic(LogLevel.ERROR, 'VALIDATE_ERROR');
readonly transformError = this.topic(LogLevel.ERROR, 'TRANSFORM_ERROR');
}
Фильтрация сообщений
export class Extension {
apply(program: Build) {
getBaseHooks(program).BeforeAnyRun.tap('MessageFilter', (run) => {
const logger = run.logger;
// Добавляем фильтр для сообщений
logger.filters.push((level, message) => {
if (level === LogLevel.INFO && message.includes('sensitive')) {
return ''; // Пропускаем сообщение
}
return message;
});
});
}
}
Сбор статистики логов
export class Extension {
apply(program: Build) {
getBaseHooks(program).BeforeAnyRun.tap('LogStats', (run) => {
const logger = run.logger;
// Собираем статистику по логам
const stats = {
info: logger.info.count,
warn: logger.warn.count,
error: logger.error.count
};
console.log('Log statistics:', stats);
});
}
}
Перенаправление логов в файл
export class Extension {
apply(program: Build) {
getBaseHooks(program).BeforeAnyRun.tap('FileLogger', (run) => {
const logger = run.logger;
const fileLogger = new FileLogger('logs.txt');
// Перенаправляем логи в файл
logger.pipe(fileLogger);
});
}
}
Была ли статья полезна?
Предыдущая
Следующая