fix: logger output. (#552)

This commit is contained in:
Jojo F
2026-03-07 18:21:57 -08:00
committed by GitHub
parent 570a8000a7
commit c9fac568a8
28 changed files with 62 additions and 33 deletions

View File

@@ -1,13 +1,14 @@
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:hacki/config/locator.dart';
import 'package:hacki/extensions/extensions.dart';
import 'package:hacki/models/models.dart';
import 'package:hacki/repositories/repositories.dart';
part 'auth_event.dart';
part 'auth_state.dart';
class AuthBloc extends Bloc<AuthEvent, AuthState> {
class AuthBloc extends Bloc<AuthEvent, AuthState> with Loggable {
AuthBloc({
AuthRepository? authRepository,
PreferenceRepository? preferenceRepository,
@@ -48,6 +49,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
/// then it will not be available from the API.
user ??= User.emptyWithId(username);
logInfo('silently logged in as ${user.id}.');
emit(
state.copyWith(
isLoggedIn: true,
@@ -56,6 +58,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
),
);
} else {
logInfo('no previous session found.');
emit(
state.copyWith(
isLoggedIn: false,
@@ -91,6 +94,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
if (successful) {
final User? user =
await _hackerNewsRepository.fetchUser(id: event.username);
logInfo('user logged in as ${user?.id}.');
emit(
state.copyWith(
user: user ?? User.emptyWithId(event.username),
@@ -111,9 +115,12 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
agreedToEULA: false,
),
);
await _authRepository.logout();
await _preferenceRepository.updateUnreadCommentsIds(<int>[]);
await _sembastRepository.deleteCachedComments();
logInfo('user logged out');
}
@override
String get logIdentifier => 'AuthBloc';
}

View File

@@ -653,5 +653,5 @@ class StoriesBloc extends Bloc<StoriesEvent, StoriesState> with Loggable {
}
@override
String get logIdentifier => '[StoriesBloc]';
String get logIdentifier => 'StoriesBloc';
}

View File

@@ -2,7 +2,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:hacki/config/custom_log_filter.dart';
import 'package:hacki/config/logger/custom_log_filter.dart';
import 'package:hacki/cubits/cubits.dart';
import 'package:hacki/repositories/repositories.dart';
import 'package:hacki/services/services.dart';

View File

@@ -735,5 +735,5 @@ class CommentsCubit extends Cubit<CommentsState> with Loggable {
}
@override
String get logIdentifier => '[CommentsCubit]';
String get logIdentifier => 'CommentsCubit';
}

View File

@@ -227,7 +227,7 @@ class FavCubit extends Cubit<FavState> with Loggable {
}
@override
String get logIdentifier => '[FavCubit]';
String get logIdentifier => 'FavCubit';
}
extension on FavCubit {

View File

@@ -259,5 +259,5 @@ class NotificationCubit extends Cubit<NotificationState> with Loggable {
}
@override
String get logIdentifier => '[NotificationCubit]';
String get logIdentifier => 'NotificationCubit';
}

View File

@@ -95,5 +95,5 @@ class PreferenceCubit extends Cubit<PreferenceState> with Loggable {
}
@override
String get logIdentifier => '[PreferenceCubit]';
String get logIdentifier => 'PreferenceCubit';
}

View File

@@ -62,7 +62,7 @@ class SplitViewCubit extends HydratedCubit<SplitViewState> with Loggable {
);
@override
String get logIdentifier => '[SplitViewCubit]';
String get logIdentifier => 'SplitViewCubit';
static const String _submissionPanelWidthKey = 'submissionPanelWidth';

View File

@@ -44,5 +44,5 @@ class TabCubit extends Cubit<TabState> with Loggable {
}
@override
String get logIdentifier => '[TabCubit]';
String get logIdentifier => 'TabCubit';
}

View File

@@ -25,7 +25,7 @@ extension DateTimeExtension on DateTime {
} else if (diff.inMinutes >= 1) {
return '''${diff.inMinutes} $minuteStr${diff.inMinutes == 1 ? '' : 's'} ago''';
} else if (diff.inSeconds >= 1) {
return ''''${diff.inSeconds} $secondStr${diff.inSeconds == 1 ? '' : 's'} ago''';
return '''${diff.inSeconds} $secondStr${diff.inSeconds == 1 ? '' : 's'} ago''';
}
return 'just now';
}

View File

@@ -14,7 +14,7 @@ mixin Loggable {
StackTrace? stackTrace,
}) {
_logger.t(
'$logIdentifier $message',
'[$logIdentifier] $message',
time: time,
error: error,
stackTrace: stackTrace,
@@ -29,7 +29,7 @@ mixin Loggable {
StackTrace? stackTrace,
}) {
_logger.d(
'$logIdentifier $message',
'[$logIdentifier] $message',
time: time,
error: error,
stackTrace: stackTrace,
@@ -44,7 +44,7 @@ mixin Loggable {
StackTrace? stackTrace,
}) {
_logger.i(
'$logIdentifier $message',
'[$logIdentifier] $message',
time: time,
error: error,
stackTrace: stackTrace,
@@ -59,7 +59,7 @@ mixin Loggable {
StackTrace? stackTrace,
}) {
_logger.w(
'$logIdentifier $message',
'[$logIdentifier] $message',
time: time,
error: error,
stackTrace: stackTrace,
@@ -74,7 +74,7 @@ mixin Loggable {
StackTrace? stackTrace,
}) {
_logger.e(
'$logIdentifier $message',
'[$logIdentifier] $message',
time: time,
error: error,
stackTrace: stackTrace,
@@ -89,7 +89,7 @@ mixin Loggable {
StackTrace? stackTrace,
}) {
_logger.f(
'$logIdentifier $message',
'[$logIdentifier] $message',
time: time,
error: error,
stackTrace: stackTrace,

View File

@@ -130,5 +130,5 @@ class AuthRepository extends PostableRepository with Loggable {
}
@override
String get logIdentifier => '[AuthRepository]';
String get logIdentifier => 'AuthRepository';
}

View File

@@ -432,7 +432,7 @@ class HackerNewsRepository with Loggable {
}
@override
String get logIdentifier => '[HackerNewsRepository]';
String get logIdentifier => 'HackerNewsRepository';
}
extension on Map<String, dynamic> {

View File

@@ -285,5 +285,5 @@ class OfflineRepository with Loggable {
}
@override
String get logIdentifier => '[OfflineRepository]';
String get logIdentifier => 'OfflineRepository';
}

View File

@@ -458,5 +458,5 @@ class PreferenceRepository with Loggable {
static String _getHasReadKey(int storyId) => 'hasRead_$storyId';
@override
String get logIdentifier => '[PreferenceRepository]';
String get logIdentifier => 'PreferenceRepository';
}

View File

@@ -289,5 +289,5 @@ class SembastRepository with Loggable {
}
@override
String get logIdentifier => '[SembastRepository]';
String get logIdentifier => 'SembastRepository';
}

View File

@@ -331,5 +331,5 @@ class _HomeScreenState extends State<HomeScreen>
}
@override
String get logIdentifier => '[HomeScreen]';
String get logIdentifier => 'HomeScreen';
}

View File

@@ -1094,5 +1094,5 @@ class _SettingsState extends State<Settings> with ItemActionMixin, Loggable {
}
@override
String get logIdentifier => '[Settings]';
String get logIdentifier => 'Settings';
}

View File

@@ -2,7 +2,7 @@ import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:hacki/config/constants.dart';
import 'package:hacki/config/file_output.dart';
import 'package:hacki/config/logger/file_output.dart';
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';

View File

@@ -1,17 +1,12 @@
import 'package:bloc_test/bloc_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hacki/blocs/blocs.dart';
import 'package:hacki/config/locator.dart';
import 'package:hacki/models/models.dart';
import 'package:hacki/repositories/repositories.dart';
import 'package:logger/logger.dart';
import 'package:mocktail/mocktail.dart';
class MockAuthRepository extends Mock implements AuthRepository {}
class MockPreferenceRepository extends Mock implements PreferenceRepository {}
class MockHackerNewsRepository extends Mock implements HackerNewsRepository {}
class MockSembastRepository extends Mock implements SembastRepository {}
import '../../mocks/mocks.dart';
void main() {
final MockAuthRepository mockAuthRepository = MockAuthRepository();
@@ -20,6 +15,8 @@ void main() {
final MockHackerNewsRepository mockHackerNewsRepository =
MockHackerNewsRepository();
final MockSembastRepository mockSembastRepository = MockSembastRepository();
final MockLogger mockLogger = MockLogger();
locator.registerSingleton<Logger>(mockLogger);
const int created = 0;
const int delay = 1;

4
test/mocks/logger.dart Normal file
View File

@@ -0,0 +1,4 @@
import 'package:logger/logger.dart';
import 'package:mocktail/mocktail.dart';
class MockLogger extends Mock implements Logger {}

5
test/mocks/mocks.dart Normal file
View File

@@ -0,0 +1,5 @@
export 'logger.dart';
export 'repositories/auth_repository.dart';
export 'repositories/hacker_news_repository.dart';
export 'repositories/preference_repository.dart';
export 'repositories/sembast_repository.dart';

View File

@@ -0,0 +1,4 @@
import 'package:hacki/repositories/auth_repository.dart';
import 'package:mocktail/mocktail.dart';
class MockAuthRepository extends Mock implements AuthRepository {}

View File

@@ -0,0 +1,4 @@
import 'package:hacki/repositories/hacker_news_repository.dart';
import 'package:mocktail/mocktail.dart';
class MockHackerNewsRepository extends Mock implements HackerNewsRepository {}

View File

@@ -0,0 +1,4 @@
import 'package:hacki/repositories/preference_repository.dart';
import 'package:mocktail/mocktail.dart';
class MockPreferenceRepository extends Mock implements PreferenceRepository {}

View File

@@ -0,0 +1,4 @@
import 'package:hacki/repositories/sembast_repository.dart';
import 'package:mocktail/mocktail.dart';
class MockSembastRepository extends Mock implements SembastRepository {}