1.0.1 • Published 2 years ago

@nfjs/winston-logger v1.0.1

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

@nfjs/winston-logger

ОГЛАВЛЕНИЕ

Используемые понятия

Логгер - инстанс класса для выполнения логгирования по заданным настройкам. Транспорт - настройки тога куда именно будет произведено логгирование - в консоль процесса, в файл (с возможной ротацией), по http и прочее. Контейнер - множество именованных логгеров.

Принцип работы

Позволяет сконфигурировать несколько логгеров через конфигурационный файл, в котором заданы настройки для каждого в отдельности. При проходе по конфигурационному файлу недостающие настройки берутся из значений по умолчанию. Все они помещаются в контейнер под меткой loggers. Логгер с кодом default помещается в контейнер под меткой logger.

Конфигурация

СвойствоТипНазначениеЗначение по умолчанию
levelsstringУровни логовwinston.config.syslog.levels (emerg,alert,crit,error,warning,notice,info,debug)
defaultMetaObjectНабор свойств со значениями, которые дополняют объект лога{ instanceName: instance_name }
formatsObjectПеречень поддерживаемых модулем форматов преобразования лога, каждый со своими возможными настройками{ timestamp: {}, errors: { stack: true }, json: {} }
transportsObjectНабор транспортов в виде объектов. Каждый ключ - отдельный транспорт со своими настройками
.typestringТип транспорта, отвечающий куда отправлять логи. Например, Console,File'Console'
.optionsObjectНастройки транспорта в зависимости от типа. Часть ниже описана, как общие. Остальные в документации пакета
..handleExceptionsbooleanЛоггировать ли необработанные исключения (uncaughtException) процессаtrue
..handleRejectionsbooleanЛоггировать ли необработанные исключения (uncaughtRejection) процессаtrue
..levelstringУровень ниже которого включительно логгировать события'info'
..formatsObjectАналогично formats. Не рекомендуется использовать из-за бага в библиотеке на данный момент (winston-transport@4.4.0)

Подробнее про все возможные настройки в документации

Настройки логгера по умолчанию выглядят следующим образом

"@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);
}
1.0.1

2 years ago

1.0.0

2 years ago