hi-client/lib/app/utils/kr_file_logger.dart
2026-01-07 17:33:55 -08:00

83 lines
2.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:io';
import 'package:path/path.dart' as p;
/// 文件日志工具类 - 用于诊断 UI 卡死问题
///
/// 将关键操作的时间戳写入 日志.log 文件,方便排查问题
/// 使用全局开关控制是否启用日志写入
class KRFileLogger {
static const String _logFileName = '日志.log';
/// 🔧 全局日志开关 - 修改为 true 可启用文件日志写入
static const bool _enableFileLogging = true; // ⚠️ 调试模式开启日志分析UI阻塞 // ← 诊断完成后改回 false
static File? _logFile;
/// 初始化日志文件(应用启动时调用)
static Future<void> initialize() async {
if (!_enableFileLogging) return;
try {
// 获取应用根目录Windows 下通常是 exe 所在目录)
final appDir = Directory.current;
final logPath = p.join(appDir.path, _logFileName);
_logFile = File(logPath);
// 如果日志文件已存在且大于 5MB清空它
if (await _logFile!.exists()) {
final stat = await _logFile!.stat();
if (stat.size > 5 * 1024 * 1024) { // 5MB
await _logFile!.writeAsString('');
await _writeRaw('=== 日志文件已清空(超过 5MB===\n');
}
}
await _writeRaw('=== 日志系统初始化 - ${DateTime.now().toIso8601String()} ===\n');
} catch (e) {
// 初始化失败,静默处理,不影响应用
}
}
/// 写入日志(带时间戳)
static Future<void> log(String message) async {
if (!_enableFileLogging || _logFile == null) return;
try {
final timestamp = DateTime.now().toIso8601String();
final logLine = '[$timestamp] $message\n';
await _logFile!.writeAsString(logLine, mode: FileMode.append);
} catch (e) {
// 日志写入失败,静默处理,不要破坏主流程
}
}
/// 直接写入原始内容(用于特殊格式)
static Future<void> _writeRaw(String content) async {
if (!_enableFileLogging || _logFile == null) return;
try {
await _logFile!.writeAsString(content, mode: FileMode.append);
} catch (e) {
// 日志写入失败,静默处理
}
}
/// 写入分隔线(用于区分不同的操作)
static Future<void> separator() async {
if (!_enableFileLogging) return;
await _writeRaw('\n---\n');
}
/// 清空日志文件
static Future<void> clear() async {
if (!_enableFileLogging || _logFile == null) return;
try {
await _logFile!.writeAsString('');
await _writeRaw('=== 日志已清空 - ${DateTime.now().toIso8601String()} ===\n');
} catch (e) {
// 清空失败,静默处理
}
}
}