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.
HMG_QLine/lib/services/logger_service.dart

72 lines
2.3 KiB
Dart

import 'dart:io';
import 'package:hmg_qline/config/dependency_injection.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/services/cache_service.dart';
import 'package:hmg_qline/utilities/enums.dart';
import 'package:hmg_qline/view_models/screen_config_view_model.dart';
import 'package:intl/intl.dart';
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';
abstract class LoggerService {
Future<void> logToFile({required String message, required LogTypeEnum type, required String source});
void logError(String message);
void logInfo(String message);
}
class LoggerServiceImp implements LoggerService {
Logger logger;
LoggerServiceImp({required this.logger});
@override
Future<void> logToFile({required String message, required LogTypeEnum type, required String source}) async {
try {
final timestamp = DateFormat('yyyy-MM-dd hh:mm:ss a').format(DateTime.now());
final formattedMessage = "[$timestamp] [SOURCE: $source] ${type.name.toUpperCase()}: $message";
final baseDir = await getExternalStorageDirectory();
final logDir = Directory('${baseDir!.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');
ScreenConfigViewModel screenConfigViewModel = getIt.get<ScreenConfigViewModel>();
CacheService cacheService = getIt.get<CacheService>();
final lastLogsClearedAt = screenConfigViewModel.lastTimeLogsCleared;
final now = DateTime.now();
if (lastLogsClearedAt != null &&
now.difference(lastLogsClearedAt).inHours >= AppConstants.clearLogsHoursThreshold) {
await file.writeAsString('');
screenConfigViewModel.lastTimeLogsCleared = now;
cacheService.setLastTimeLogsCleared(lastTimeCleared: now.millisecondsSinceEpoch);
}
await file.writeAsString("$formattedMessage\n", mode: FileMode.append);
} catch (e) {
logger.e('Logging failed: $e');
}
}
@override
void logError(String message) {
logger.e(message);
}
@override
void logInfo(String message) {
logger.i(message);
}
}