Add logging to file

This commit is contained in:
Vishnu Mohandas 2020-05-02 21:58:54 +05:30
parent e2c1e8962b
commit 7b3a3eb184
14 changed files with 95 additions and 49 deletions

View file

@ -1,2 +1,4 @@
const int THUMBNAIL_SMALL_SIZE = 128;
const int THUMBNAIL_LARGE_SIZE = 512;
const String SENTRY_DSN =
"http://96780dc0b00f4c69a16c02e90d379996@3.211.17.56/2";

View file

@ -1,13 +1,13 @@
import 'package:dio/dio.dart';
import 'package:logger/logger.dart';
import 'core/configuration.dart';
import 'db/db_helper.dart';
import 'package:logging/logging.dart';
import 'models/face.dart';
import 'models/photo.dart';
class FaceSearchManager {
final _logger = Logger();
final logger = Logger("FaceSearchManager");
final _dio = Dio();
FaceSearchManager._privateConstructor();
@ -37,6 +37,6 @@ class FaceSearchManager {
}
void _onError(error) {
_logger.e(error);
logger.severe(error);
}
}

View file

@ -1,24 +1,38 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';
import 'package:photos/core/constants.dart';
import 'core/configuration.dart';
import 'photo_loader.dart';
import 'photo_sync_manager.dart';
import 'ui/home_widget.dart';
import 'package:provider/provider.dart';
import 'package:sentry/sentry.dart';
import 'package:super_logging/super_logging.dart';
import 'package:logging/logging.dart';
final logger = Logger("main");
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SuperLogging.main(LogConfig(
body: _main,
sentryDsn: SENTRY_DSN,
logDirPath: (await getTemporaryDirectory()).path + "/logs",
enableInDebugMode: true,
));
}
void _main() {
WidgetsFlutterBinding.ensureInitialized();
Configuration.instance.init();
PhotoSyncManager.instance.sync();
final SentryClient sentry = new SentryClient(
dsn: "http://96780dc0b00f4c69a16c02e90d379996@sentry.ente.io/2");
final SentryClient sentry = new SentryClient(dsn: SENTRY_DSN);
FlutterError.onError = (FlutterErrorDetails details) async {
print('Flutter error caught by Sentry');
FlutterError.dumpErrorToConsole(details, forceReport: true);
_sendErrorToSentry(sentry, details.exception, details.stack);
};
@ -30,12 +44,12 @@ void main() async {
);
}
void _sendErrorToSentry(
SentryClient sentry, Object error, StackTrace stackTrace) {
void _sendErrorToSentry(SentryClient sentry, Object error, StackTrace stack) {
logger.shout("Uncaught error", error, stack);
try {
sentry.captureException(
exception: error,
stackTrace: stackTrace,
stackTrace: stack,
);
print('Error sent to sentry.io: $error');
} catch (e) {

View file

@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:logging/logging.dart';
import 'db/db_helper.dart';
import 'models/photo.dart';
class PhotoLoader extends ChangeNotifier {
final logger = Logger();
final logger = Logger("PhotoLoader");
final _photos = List<Photo>();
PhotoLoader._privateConstructor();
@ -26,7 +26,7 @@ class PhotoLoader extends ChangeNotifier {
void reloadPhotos() async {
await loadPhotos();
logger.i("Reloading...");
logger.info("Reloading...");
notifyListeners();
}
}

View file

@ -1,7 +1,7 @@
import 'dart:async';
import 'dart:io';
import 'package:logger/logger.dart';
import 'package:logging/logging.dart';
import 'core/event_bus.dart';
import 'db/db_helper.dart';
import 'events/user_authenticated_event.dart';
@ -18,7 +18,7 @@ import 'core/configuration.dart';
import 'events/remote_sync_event.dart';
class PhotoSyncManager {
final _logger = Logger();
final _logger = Logger("PhotoSyncManager");
final _dio = Dio();
bool _isSyncInProgress = false;
@ -36,11 +36,11 @@ class PhotoSyncManager {
Future<void> sync() async {
if (_isSyncInProgress) {
_logger.w("Sync already in progress, skipping.");
_logger.warning("Sync already in progress, skipping.");
return;
}
_isSyncInProgress = true;
_logger.i("Syncing...");
_logger.info("Syncing...");
final prefs = await SharedPreferences.getInstance();
var lastDBUpdateTimestamp = prefs.getInt(_lastDBUpdateTimestampKey);
@ -62,7 +62,7 @@ class PhotoSyncManager {
try {
photos.add(await Photo.fromAsset(pathEntity, entity));
} catch (e) {
_logger.e(e);
_logger.severe(e);
}
}
}
@ -103,7 +103,7 @@ class PhotoSyncManager {
if (lastSyncTimestamp == null) {
lastSyncTimestamp = 0;
}
_logger.i("Last sync timestamp: " + lastSyncTimestamp.toString());
_logger.info("Last sync timestamp: " + lastSyncTimestamp.toString());
_getDiff(lastSyncTimestamp).then((diff) {
if (diff != null) {
@ -140,7 +140,7 @@ class PhotoSyncManager {
.download(
Configuration.instance.getHttpEndpoint() + "/" + photo.remotePath,
localPath)
.catchError((e) => _logger.e(e));
.catchError((e) => _logger.severe(e));
// TODO: Save path
photo.pathName = localPath;
await DatabaseHelper.instance.insertPhoto(photo);
@ -155,7 +155,7 @@ class PhotoSyncManager {
queryParameters: {
"token": Configuration.instance.getToken(),
"lastSyncTimestamp": lastSyncTimestamp
}).catchError((e) => _logger.e(e));
}).catchError((e) => _logger.severe(e));
if (response != null) {
Bus.instance.fire(RemoteSyncEvent(true));
return (response.data["diff"] as List)
@ -179,10 +179,10 @@ class PhotoSyncManager {
.post(Configuration.instance.getHttpEndpoint() + "/upload",
data: formData)
.then((response) {
_logger.i(response.toString());
_logger.info(response.toString());
var photo = Photo.fromJson(response.data);
return photo;
}).catchError((e) => _logger.e(e));
}).catchError((e) => _logger.severe(e));
}
Future<void> _deletePhotos() async {
@ -199,7 +199,7 @@ class PhotoSyncManager {
queryParameters: {
"token": Configuration.instance.getToken(),
"fileID": photo.uploadedFileId
}).catchError((e) => _logger.e(e));
}).catchError((e) => _logger.severe(e));
}
Future _initializeDirectories() async {
@ -211,7 +211,7 @@ class PhotoSyncManager {
Future<bool> _insertPhotosToDB(
List<Photo> photos, SharedPreferences prefs, int timestamp) async {
await DatabaseHelper.instance.insertPhotos(photos);
_logger.i("Inserted " + photos.length.toString() + " photos.");
_logger.info("Inserted " + photos.length.toString() + " photos.");
PhotoLoader.instance.reloadPhotos();
return await prefs.setInt(_lastDBUpdateTimestampKey, timestamp);
}

View file

@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:photos/models/album.dart';
import 'package:photos/models/photo.dart';
import 'package:photos/ui/gallery.dart';
import 'package:photos/ui/gallery_app_bar_widget.dart';
import 'package:logging/logging.dart';
class AlbumPage extends StatefulWidget {
final Album album;
@ -15,6 +15,7 @@ class AlbumPage extends StatefulWidget {
}
class _AlbumPageState extends State<AlbumPage> {
final logger = Logger("AlbumPageState");
Set<Photo> _selectedPhotos = Set<Photo>();
@override
@ -32,7 +33,7 @@ class _AlbumPageState extends State<AlbumPage> {
setState(() {
for (Photo deletedPhoto in deletedPhotos) {
var index = widget.album.photos.indexOf(deletedPhoto);
Logger().i("Deleting " + index.toString());
logger.info("Deleting " + index.toString());
widget.album.photos.removeAt(index);
}
_selectedPhotos.clear();

View file

@ -1,11 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:photos/core/lru_map.dart';
import 'package:photos/models/photo.dart';
import 'extents_page_view.dart';
import 'zoomable_image.dart';
import 'package:photos/utils/share_util.dart';
import 'package:logging/logging.dart';
class DetailPage extends StatefulWidget {
final List<Photo> photos;
@ -18,6 +18,7 @@ class DetailPage extends StatefulWidget {
}
class _DetailPageState extends State<DetailPage> {
final logger = Logger("DetailPageState");
bool _shouldDisableScroll = false;
List<Photo> _photos;
int _selectedIndex = 0;
@ -34,7 +35,7 @@ class _DetailPageState extends State<DetailPage> {
@override
Widget build(BuildContext context) {
Logger().i("Opening " +
logger.info("Opening " +
_photos[_selectedIndex].toString() +
". " +
_selectedIndex.toString() +
@ -72,7 +73,7 @@ class _DetailPageState extends State<DetailPage> {
},
extents: 1,
onPageChanged: (int index) {
Logger().i("onPageChanged to " + index.toString());
logger.info("onPageChanged to " + index.toString());
_selectedIndex = index;
},
physics: _shouldDisableScroll

View file

@ -3,7 +3,6 @@ import 'dart:collection';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:logger/logger.dart';
import 'package:photos/core/thumbnail_cache.dart';
import 'package:photos/models/photo.dart';
import 'package:photos/photo_loader.dart';

View file

@ -1,6 +1,5 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/db/db_helper.dart';
import 'package:photos/events/remote_sync_event.dart';
@ -67,6 +66,8 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
actions.add(IconButton(
icon: Icon(Icons.sync_problem),
onPressed: () {
final list = new List<int>();
print(list[0]);
_openSyncConfiguration(context);
},
));

View file

@ -1,6 +1,5 @@
import 'dart:typed_data';
import 'package:flutter/widgets.dart';
import 'package:logger/logger.dart';
import 'package:photos/core/image_cache.dart';
import 'package:photos/core/thumbnail_cache.dart';
import 'package:photos/models/photo.dart';

View file

@ -1,5 +1,5 @@
import 'package:dio/dio.dart';
import 'package:logger/logger.dart';
import 'package:logging/logging.dart';
import 'core/configuration.dart';
import 'core/event_bus.dart';
@ -7,7 +7,7 @@ import 'events/user_authenticated_event.dart';
class UserAuthenticator {
final _dio = Dio();
final _logger = Logger();
final _logger = Logger("UserAuthenticator");
UserAuthenticator._privateConstructor();
@ -31,7 +31,7 @@ class UserAuthenticator {
return false;
}
}).catchError((e) {
_logger.e(e.toString());
_logger.severe(e.toString());
return false;
});
}
@ -57,7 +57,7 @@ class UserAuthenticator {
}
}
}).catchError((e) {
_logger.e(e.toString());
_logger.severe(e.toString());
throw e;
});
}

View file

@ -2,10 +2,11 @@ import 'dart:async';
import 'package:connectivity/connectivity.dart';
import 'package:dio/dio.dart';
import 'package:logger/logger.dart';
import 'package:logging/logging.dart';
class EndpointFinder {
final _dio = Dio();
final logger = Logger("EndpointFinder");
EndpointFinder._privateConstructor() {
_dio.options = BaseOptions(connectTimeout: 200);
@ -15,7 +16,7 @@ class EndpointFinder {
Future<String> findEndpoint() {
return (Connectivity().getWifiIP()).then((ip) async {
Logger().i(ip);
logger.info(ip);
final ipSplit = ip.split(".");
var prefix = "";
for (int index = 0; index < ipSplit.length; index++) {
@ -23,7 +24,7 @@ class EndpointFinder {
prefix += ipSplit[index] + ".";
}
}
Logger().i(prefix);
logger.info(prefix);
for (int i = 1; i <= 255; i++) {
var endpoint = prefix + i.toString();
@ -43,7 +44,7 @@ class EndpointFinder {
Future<bool> ping(String endpoint) async {
return _dio.get("http://" + endpoint + ":8080/ping").then((response) {
if (response.data["message"] == "pong") {
Logger().i("Found " + endpoint);
logger.info("Found " + endpoint);
return true;
} else {
return false;

View file

@ -85,6 +85,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
device_info:
dependency: transitive
description:
name: device_info
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.2+2"
dio:
dependency: "direct main"
description:
@ -142,6 +149,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
get_ip:
dependency: transitive
description:
name: get_ip
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.0"
http:
dependency: transitive
description:
@ -163,13 +177,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.4"
io:
intl:
dependency: transitive
description:
name: io
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.4"
version: "0.16.1"
json_annotation:
dependency: transitive
description:
@ -184,13 +198,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
logger:
dependency: "direct main"
logging:
dependency: transitive
description:
name: logger
name: logging
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.3"
version: "0.11.4"
matcher:
dependency: transitive
description:
@ -205,6 +219,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.8"
package_info:
dependency: transitive
description:
name: package_info
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.0+17"
path:
dependency: transitive
description:
@ -371,6 +392,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
super_logging:
dependency: "direct main"
description:
name: super_logging
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
synchronized:
dependency: transitive
description:

View file

@ -28,7 +28,6 @@ dependencies:
sqflite: ^1.3.0
path_provider: ^1.6.5
shared_preferences: ^0.5.6
logger: ^0.8.3
dio: ^3.0.9
local_image_provider: ^1.0.0
crypto: ^2.1.3
@ -42,6 +41,7 @@ dependencies:
connectivity: ^0.4.8+2
event_bus: ^1.1.1
sentry: ">=3.0.0 <4.0.0"
super_logging: ^1.0.0
dev_dependencies:
flutter_test: