You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.0 KiB
Dart
75 lines
2.0 KiB
Dart
import 'dart:io';
|
|
import 'package:hmg_qline/constants/app_constants.dart';
|
|
import 'package:hmg_qline/utilities/enums.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:logger/logger.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
abstract class LoggerService {
|
|
Future<void> logToFile(String message, {LogTypeEnum type = LogTypeEnum.data});
|
|
|
|
Future<void> clearLogs();
|
|
|
|
void logError(String message);
|
|
|
|
void logInfo(String message);
|
|
}
|
|
|
|
class LoggerServiceImp implements LoggerService {
|
|
Logger logger;
|
|
|
|
LoggerServiceImp({required this.logger});
|
|
|
|
@override
|
|
Future<void> logToFile(String message, {LogTypeEnum type = LogTypeEnum.data}) async {
|
|
try {
|
|
final timestamp = DateFormat('yyyy-MM-dd hh:mm:ss a').format(DateTime.now());
|
|
final formattedMessage = "[$timestamp] ${type.name.toUpperCase()}: $message";
|
|
|
|
final dir = await getApplicationDocumentsDirectory();
|
|
final logDir = Directory('${dir.path}/logs');
|
|
if (!await logDir.exists()) {
|
|
await logDir.create(recursive: true);
|
|
}
|
|
|
|
final logFileName = type == LogTypeEnum.error ? AppStrings.errorLogsFileName : AppStrings.dataLogsFileName;
|
|
final file = File('${logDir.path}/$logFileName');
|
|
|
|
await file.writeAsString("$formattedMessage\n", mode: FileMode.append);
|
|
} catch (e) {
|
|
logger.i('Logging failed: $e');
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<void> clearLogs() async {
|
|
try {
|
|
final dir = await getApplicationDocumentsDirectory();
|
|
final logDir = Directory('${dir.path}/logs');
|
|
|
|
final filesToClear = [
|
|
File('${logDir.path}/${AppStrings.errorLogsFileName}'),
|
|
File('${logDir.path}/${AppStrings.dataLogsFileName}'),
|
|
];
|
|
|
|
for (var file in filesToClear) {
|
|
if (await file.exists()) {
|
|
await file.writeAsString('');
|
|
}
|
|
}
|
|
} catch (e) {
|
|
logger.e("Failed to clear logs: ${e.toString()}");
|
|
}
|
|
}
|
|
|
|
@override
|
|
void logError(String message) {
|
|
logger.e(message);
|
|
}
|
|
|
|
@override
|
|
void logInfo(String message) {
|
|
logger.i(message);
|
|
}
|
|
}
|