Дважды вызывается регистратор дротиков

#flutter #dart #logging

#трепетание #дротик #ведение журнала

Вопрос:

У меня есть CustomLogger класс, которому я передаю Logger объект. Теперь всякий раз, когда я вызываю метод logger из CustomLogger класса, журналы печатаются дважды. Я создал этот класс CustomLogger, поскольку планирую отправлять эти журналы на сервер и не хочу вызывать для него отдельный метод.

Здесь я создаю объект CustomLogger класса

 var logger = CustomLogger(
  logger: Logger(
    printer: PrettyPrinter(
      methodCount: 0,
      errorMethodCount: 5,
      colors: true,
    ),
  ),
);

  

Это мой CustomLogger класс

 class CustomLogger {
  Logger logger;

  CustomLogger({
    @required this.logger,
  });

  /// Log a message at level [Level.debug].
  void d(dynamic message, [dynamic error, StackTrace stackTrace]) {
    logger.d(message, [error, stackTrace]);
  //TO Do : send log to server
  }
}
  

Когда я вызываю logger.d("test log"); , он сначала печатает null , а затем печатает журнал

  ┌────────────────────────────
 │ [null, null]               
 ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
 │  test log     
 └────────────────────────────
  

Ответ №1:

Я понял, почему он печатает [null,null] после долгой отладки, и просмотрел библиотечный код. На самом деле это error аргумент.

logger.d имеет message в качестве требуемого позиционный аргумент и error , stackTrace как необязательный, поэтому, когда мы вызываем logger.d(message,[error,stacktrace]) аргумент ошибки, он становится [error,stackTrace], и он печатает то error , что есть [null,null] .

Итак, правильный способ вызова logger.d' из класса-оболочки — это logger.d(message,error,stackTrace) .