@nfjs/winston-logger
v1.0.1
Published
Logger
Downloads
321
Readme
@nfjs/winston-logger
ОГЛАВЛЕНИЕ
Используемые понятия
Логгер - инстанс класса для выполнения логгирования по заданным настройкам.
Транспорт - настройки тога куда именно будет произведено логгирование - в консоль процесса, в файл (с возможной ротацией), по http и прочее.
Контейнер - множество именованных логгеров.
Принцип работы
Позволяет сконфигурировать несколько логгеров через конфигурационный файл, в котором заданы настройки для каждого в отдельности. При проходе по конфигурационному файлу недостающие настройки берутся из значений по умолчанию.
Все они помещаются в контейнер под меткой loggers. Логгер с кодом default помещается в контейнер под меткой logger.
Конфигурация
|Свойство|Тип|Назначение|Значение по умолчанию|
|---|---|---|---|
|levels|string|Уровни логов|winston.config.syslog.levels (emerg,alert,crit,error,warning,notice,info,debug)|
|defaultMeta|Object|Набор свойств со значениями, которые дополняют объект лога| { instanceName: instance_name } |
|formats|Object|Перечень поддерживаемых модулем форматов преобразования лога, каждый со своими возможными настройками| { timestamp: {}, errors: { stack: true }, json: {} }|
|transports|Object|Набор транспортов в виде объектов. Каждый ключ - отдельный транспорт со своими настройками||
|.type|string|Тип транспорта, отвечающий куда отправлять логи. Например, Console,File|'Console'|
|.options|Object|Настройки транспорта в зависимости от типа. Часть ниже описана, как общие. Остальные в документации пакета||
|..handleExceptions|boolean|Логгировать ли необработанные исключения (uncaughtException) процесса|true|
|..handleRejections|boolean|Логгировать ли необработанные исключения (uncaughtRejection) процесса|true|
|..level|string|Уровень ниже которого включительно логгировать события|'info'|
|..formats|Object|Аналогично formats. Не рекомендуется использовать из-за бага в библиотеке на данный момент ([email protected])||
Подробнее про все возможные настройки в документации
Настройки логгера по умолчанию выглядят следующим образом
"@nfjs/winston-logger": {
"default": {
"levels": "syslog",
"formats": {
"timestamp": {},
"errors": {
"stack": true
},
"json": {}
},
"transports": {
"default": {
"type": "Console",
"options": {
"handleExceptions": true,
"handleRejections": true,
"level": "info"
}
}
}
}
}Что соответствует коду создания логгера модуля winston
import winston from 'winston';
const logger = winston.createLogger({
levels: winston.config.syslog.levels,
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json(),
),
transports: [new winston.transports.Console({
level: 'info',
handleExceptions: true,
handleRejections: true
})]
})Пример использования
Работает только при запущенном полностью приложении, так как помещается в контейнер при старте приложения.
import { container } from '@nfjs/core';
import { v4 } from 'uuid/v4';
// Из контейнера логгеров выбрали настроенный, например, только для интеграционных сервисов
const logger = container.loggers.get('integrations');
// Здесь использовалась возможность "закрелять" часть свойств для последующих вызовов логгирования, чтобы избежать повторений.
const logg = logger.child({ logType: 'integrationFRMR', uuid: v4() });
try {
logg.info('start');
// something
logg.info('end');
} catch (e) {
logg.info(e);
}