Skip to content

Instantly share code, notes, and snippets.

@Atsumi3
Created July 17, 2024 06:16
Show Gist options
  • Save Atsumi3/cfc6da64fb7db529bee2cc146e0d3b54 to your computer and use it in GitHub Desktop.
Save Atsumi3/cfc6da64fb7db529bee2cc146e0d3b54 to your computer and use it in GitHub Desktop.
flutterのログ周りを綺麗に定義する
final logger = Logger(
output: CrashlyticsLogger(),
printer: PrettyPrinter(
methodCount: 1,
errorMethodCount: 5,
dateTimeFormat: DateTimeFormat.onlyTimeAndSinceStart,
),
);
class CrashlyticsLogger extends LogOutput {
@override
void output(OutputEvent event) {
for (final e in event.lines) {
dev.log(e, name: 'logger');
}
_sendCrashlytics(event);
}
Future<void> _sendCrashlytics(OutputEvent event) async {
try {
if (Firebase.apps.isEmpty) return;
if (event.level.isSerious(Level.error)) {
await FirebaseCrashlytics.instance.recordError(
event.origin.error,
event.origin.stackTrace,
reason: event.origin.message,
printDetails: true,
fatal: event.level == Level.fatal,
);
} else if (event.level.isSerious(Level.info)) {
await FirebaseCrashlytics.instance.log(event.origin.message.toString());
}
} catch (e) {
dev.log('logの出力エラー', name: 'logger');
}
}
}
extension _LevelExt on Level {
bool isSerious(Level level) {
return value >= level.value;
}
}
extension AnalyticsLogExt on Logger {
Future<void> setUserId(String? id) async {
try {
if (Firebase.apps.isEmpty) return;
await FirebaseAnalytics.instance.setUserId(id: id);
await FirebaseCrashlytics.instance.setUserIdentifier(id ?? '');
} catch (e, s) {
logger.e('failed set userId.', error: e, stackTrace: s);
}
}
Future<void> setUserProperty({
required UserProperty property,
required String? value,
}) async {
try {
if (Firebase.apps.isEmpty) return;
await FirebaseAnalytics.instance.setUserProperty(
name: property.name,
value: value,
);
await FirebaseCrashlytics.instance.setCustomKey(
property.name,
value ?? '',
);
} catch (e, s) {
logger.e('failed set user property.', error: e, stackTrace: s);
}
}
}
sealed class UserProperty {
final String name;
UserProperty({required this.name});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment