лесовоз
Обычно каждый адаптер записывает свои сообщения через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Это позволяет им пересылать сообщения об ошибках. - Адаптеру, который хочет обрабатывать только собственные сообщения, это не нужно: он просто записывает данные самостоятельно в процессе логирования.
Если вы хотите сообщить пользователю о конкретном событии, вместо того чтобы читать каждое сообщение, лучше использовать уведомления .