如何優雅的在flutter中使用logger

AaronLei發表於2021-07-22

flutter中的logger

flutter中的日誌使用print實現,但是print只能顯示一種顏色,這樣我們除錯起來比較麻煩。所以,我在ansicolor的基礎上實現了一個可以控制顏色的日誌記錄框架。

如何使用

已釋出pub,直接引用即可

colorize_logger: ^[last version]

地址:pub.dev/packages/co…

github: github.com/TaleAi/flut…

screenshot.png

優點

  • 有 info、warning、error、fatal四種日誌型別及顏色
  • release模式自動關閉日誌
  • 可自定義輸出風格

簡單用法

import 'package:colorize_logger/colorize_logger.dart';

// 初始化
Logger.client = ColorizeLoggerClient();

Logger.info('info');
Logger.warning('waring', tag: '_MyHomePageState');/// 可以設定tag
Logger.fatal('fatal');
Logger.error('error');
複製程式碼

自定義擴充套件

先來看看基類

abstract class LoggerClient {
  void info(String message, {String? tag});
  void warning(String message, {String? tag});
  void error(String message, {String? tag});
  void fatal(String message, {String? tag});
}

複製程式碼

只要繼承並實現LoggerClient的方法就可以自定義了

import 'package:ansicolor/ansicolor.dart';

import 'client.dart';

class CustomLoggerClient extends LoggerClient {
  @override
  void error(String message, {String? tag}) {
    final error = AnsiPen()
      ..white(bold: true)
      ..xterm(88, bg: true);
    print(error(_format(tag ?? 'ERROR', message)));
  }

  @override
  void fatal(String message, {String? tag}) {
    final fatal = AnsiPen()
      ..white()
      ..red(bg: true);
    print(fatal(_format(tag ?? 'FATAL', message)));
  }

  @override
  void info(String message, {String? tag}) {
    final info = AnsiPen()
      ..black()
      ..green(bg: true);
    print(info(_format(tag ?? 'INFO', message)));
  }

  @override
  void warning(String message, {String? tag}) {
    final info = AnsiPen()
      ..black()
      ..yellow(bg: true);
    print(info(_format(tag ?? 'WARNING', message)));
  }

  String _format(String tag, String message) {
    return '[$tag] $message';
  }
}

複製程式碼

接下來只要在初始化的地方替換就可以實現自定義日誌

Logger.client = CustomLoggerClient();
複製程式碼

下一步計劃

考慮到在實際應用中,給測試的包是release的版本,這樣有問題的時候我們無法看到日誌,所以下一步的計劃是

  • 實現一個基於檔案的日誌記錄,可以儲存在手機中,這樣有問題可以匯出日誌給開發看

相關文章