import 'dart:io'; import 'package:logger/logger.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; final logger = PiliLogger(); class PiliLogger extends Logger { PiliLogger() : super(); @override Future log( Level level, dynamic message, { Object? error, StackTrace? stackTrace, DateTime? time, }) async { if (level == Level.error || level == Level.fatal) { // 添加至文件末尾 File logFile = await LoggerUtils.getLogsPath(); logFile.writeAsString( "**${DateTime.now()}** \n $message \n $stackTrace", mode: FileMode.writeOnlyAppend, ); } super.log(level, "$message", error: error, stackTrace: stackTrace); } } class LoggerUtils { static File? _logFile; static Future getLogsPath() async { if (_logFile != null) return _logFile!; String dir = (await getApplicationDocumentsDirectory()).path; final String filename = p.join(dir, ".pili_logs"); final File file = File(filename); if (!file.existsSync()) { await file.create(recursive: true); } return _logFile = file; } static Future clearLogs() async { final file = await getLogsPath(); try { await file.writeAsBytes(const [], flush: true); } catch (e) { // if (kDebugMode) debugPrint('Error clearing file: $e'); return false; } return true; } }