лесовоз

Обычно каждый адаптер записывает свои сообщения черезthis.log Сообщение записывается в файл журнала, и на этом всё. Однако некоторым адаптерам нужны сами сообщения: администратор отображает их в журналах , другие записывают их в базу данных или пересылают. Вот тут-то и пригодится транспортёр журналов.

Для ваших собственных целей ведения журнала этого достаточно.this.log.info(...) На этой странице описывается особый случай, когда один адаптер хочет прочитать сообщения всех остальных .

Включать

Вio-package.json в блокеcommon :

"logTransporter": true

Только тогда этот метод становится доступным.requireLog Эта функция вообще недоступна. Она включена в коде адаптера и в событии.log Подписались:

async onReady() {
    await this.requireLog(true);
}

onLog(logObject) {
    // logObject.severity, .message, .from, .ts, ._id
}

Обработчик, как и остальные, привязывается в конструкторе:

this.on('log', this.onLog.bind(this));

Структура сообщения

ПолеСодержание
_idпоследовательный идентификатор сообщения
fromпример, из которого оно происходит, например. system.adapter.web.0
severityУровень протокола:silly ,debug ,info ,warn , error
tsВременная метка в миллисекундах
messageтекст

Пример:

{ _id: 4711, from: 'testlog.0', message: 'testlog.0 (12504) adapter disabled',
  severity: 'error', ts: 1585413238439 }

Что происходит на заднем плане?

Есть ли такая функция у адаптера?logTransporter js-контроллер устанавливает состояние для каждого экземпляра.system.adapter.<name>.<instanz>.logging Включено. Адаптер перекрывает его?requireLog(true) наtrue , тем самым заявляя: Мне нужны отчеты.

Во всех остальных случаях соблюдаются условия.*.logging Как только один из них приземлитсяtrue Если сообщение находится в очереди FIFO, оно также будет отправлено этому получателю. Получатель читает его и получает как событие.log доставленный.

!>requireLog(false) Это не срабатывает мгновенно. В других случаях доставка прекращается примерно через десять секунд.

В чём смысл всего этого?

  • Это позволяет администратору просматривать журналы в режиме реального времени, не читая файл.
  • Адаптеры, такие какsql илиtelegram Это позволяет им пересылать сообщения об ошибках.
  • Адаптеру, который хочет обрабатывать только собственные сообщения, это не нужно: он просто записывает данные самостоятельно в процессе логирования.

Если вы хотите сообщить пользователю о конкретном событии, вместо того чтобы читать каждое сообщение, лучше использовать уведомления .