print()メソッドでログを出していますが、もう少し情報を追加して、汎用的なメソッドが欲しくて作ってみた。
作った後に知ったけど、【まとめ】Flutterでログ出力してデバッグする方法 | Dart【2022】で紹介されているようにいろいろな出力あるらしい。
ログを出力するloggerというパッケージもあるようだけど。
お勉強も兼ねて作ってる部分もあります。
kDebugModeをちゃんと試せてないので、いずれちゃんと確認したいところ。
実装と概要
そんなに難しことはやってないので、コードを見ればわかります。
import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
/// ログ出力クラス
class Log{
/// ログに利用する日時フォーマット
static final DateFormat _datetimeFormat = DateFormat("yyyy-MM-dd HH:mm:ss.ms");
/// デバッグログ
static void debug(String log){
if (kDebugMode) {
_log("DEBUG", log);
}
}
/// 情報ログ
static void info(String log){
_log("INFO", log);
}
/// 警告ログ
static void warn(String log){
_log("WARN", log);
}
/// エラーログ
static void error(String log, [Exception? exception]){
var exceptionMessage = exception?.toString();
_log("ERROR", "$log $exceptionMessage");
}
static void _log(String prefix, String log){
String date = _datetimeFormat.format(DateTime.now());
String stackTrace = StackTrace.current.toString();
String target = stackTrace.split("#2")[1].split("#3")[0].split("(")[1];
debugPrint("${target.substring(0, target.indexOf(")")).trim()} : [$date][$prefix] $log");
}
}
やってることは、privateメソッドの_log()を使って、その中で、
- 日時を取得
- 呼び出し元のスタックトレースからファイルと行列の情報を取得。
- debugPrintでログを出力
そして、debug()、info()、warn()、error()を実装し、それぞれ種類わかるように出力しているだけです。