Logger: 導入 使い方 - Ki-Kobayashi/flutter_wiki GitHub Wiki
🟩 「logger」パッケージのインストール」
loggerから、インストールする
.
import 'package:intl/intl.dart';
import 'package:logger/logger.dart';
/// 👇dev:全ログ出力 / release:全ログ非表示 にする設定
final logger = Logger(
filter: ProductionFilter(),
printer: PrettyPrinter(
errorMethodCount: 15, // 👈エラーの表示行数
colors: true,
),
);
/// ログをシンプルに表示したい場合は、以下を使用する
class AppPrinter extends LogPrinter {
@override
List<String> log(LogEvent event) {
final message = event.message;
String msg;
if (message is Function()) {
msg = message().toString();
} else if (message is String) {
msg = message;
} else {
msg = message.toString();
}
return [
'[${event.level.name.toUpperCase()}] '
'${DateFormat('HH:mm:ss.SSS').format(DateTime.now())}: '
'$msg'
];
}
}
class AppLogOutput extends ConsoleOutput {
@override
void output(OutputEvent event) {
super.output(event);
if (event.level.index >= Level.error.index) {
// 致命的なエラーが発生したら、AssertionErrorをthrowしてStackTraceを表示
throw AssertionError('View stack trace by logger');
}
}
}
.
Future<void> main() async {
FlutterError.onError = (details) {
logger.e(details.summary.toString(), details.exception, details.stack);
};
PlatformDispatcher.instance.onError = (error, stack) {
logger.e("", error, stack);
return true;
};
}
.
https://zenn.dev/senkyaku/articles/b575a41a46e898
画面遷移の流れも、ログに入れておくと、エラーが起こった時の流れが追いやすくなる。
GoRouterのobserversに、ログ保存用のNavigatorObserverを登録する
class LoggerNavigatorObserver extends NavigatorObserver {
void _sendLog(Route<dynamic> route) {
logger.i("Screen: ${route.settings.name}");
}
@override
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
super.didPush(route, previousRoute);
if (route is PageRoute) {
_sendLog(route);
}
}
@override
void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
if (newRoute != null && newRoute is PageRoute) {
_sendLog(newRoute);
}
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
super.didPop(route, previousRoute);
if (previousRoute != null && previousRoute is PageRoute) {
_sendLog(previousRoute);
}
}
}
.
.
.
.
.