sumo-logger (js-sumo-logger) sumoLogger.log Возвращает или boolean или Promise
Primary tabs
Ситуация
При вызове метода логгирования какого-то API получаем ошибку:
TypeError: result.then is not a function at ...
Ошибка связана с тем, что sumoLogger.log() может возвращать boolean, ошибка происходит при обработке логгирования:
const result = this.sumoLogger.log<LogMessage>(log) as Promise<any>; console.log(' result', result); result .then(() => { // если boolean, то метод then не определен! this.logger.debug('Send to SumoLogic: %o', log); }) .catch((error) => { this.logger.error('Send error: %o', error); });
При этом в настройках у нас returnPromise: true:
this.sumoLogger = new SumoLogger({ endpoint: this.configService.get<string>('SL_HTTP_ADDRESS') || '', returnPromise: true, });
Таким образом, допущение:
as Promise<any>
в коде выше является ошибкой, так как мы можем получить и boolean
Что не так
Формально про опцию returnPromise имеем:
returnPromise (optional)
Default: TRUE. Causes log() to return a promise and ignore the onSuccess and onError handler options (if passed). ONLY works when logs are sent individually and not batched (interval: 0).
Тем не менее мы получаем boolean
Как быстро воспроизвести
- Просто вызовите в коде sumoLogger.log() два раза подряд, чтобы один запрос логгировался дважды при настройках, указанных выше
- ошибка проявится и про быстрых повторных вызовах метода логгирования в api даже с одним sumoLogger.log(), но два подряд вызова не снаружи, а прямо в методе гарантировано проявят проблему
Причина в коде
"Проблема" вот в этой строке файла исходников:
if (this.logSending || this.pendingLogs.length === 0) { return false; }
-- если предыдущая отправка ещё не завершилась, ничего отправляться не будет, просто вернется false.
Возможное решение
Получается, что фактически слать логи подряд без настроенного interval и/или batchSize не получится (ну или просто некоторые сообщения будут пропадать)
Источники:
- Репозиторий sumo-logger: https://github.com/sumologic/js-sumo-logger
- Log in to post comments
- 821 reads