initFileLog static method
Future<void>
initFileLog({
- bool enable = true,
- DKLogLevel fileLogLevel = DKLogLevel.info,
- int maxFileSize = 10 * 1024 * 1024,
- int maxFileCount = 5,
- bool requestPermission = false,
初始化日志文件写入
@param enable 是否启用日志文件写入 @param fileLogLevel 写入文件的最低日志级别 @param maxFileSize 单个日志文件最大大小(字节) @param maxFileCount 最多保留的日志文件数量 @param requestPermission 是否自动请求权限(默认 false,因为应用私有目录不需要权限)
Implementation
static Future<void> initFileLog({
bool enable = true,
DKLogLevel fileLogLevel = DKLogLevel.info,
int maxFileSize = 10 * 1024 * 1024, // 10MB
int maxFileCount = 5,
bool requestPermission = false,
}) async {
if (kIsWeb) {
debugPrint('[DKLog] Web 平台不支持文件日志');
return;
}
_writeToFile = enable;
_fileLogLevel = fileLogLevel;
_maxFileSize = maxFileSize;
_maxFileCount = maxFileCount;
if (!enable) {
await _closeLogFile();
_fileInitialized = false;
return;
}
// 可选:请求权限(应用私有目录通常不需要)
if (requestPermission) {
final hasPermission = await hasStoragePermission();
if (!hasPermission) {
debugPrint('[DKLog] 正在请求存储权限...');
final granted = await requestStoragePermission();
if (!granted) {
debugPrint('[DKLog] 存储权限未授予,日志文件功能将不可用');
_writeToFile = false;
return;
}
}
}
try {
// 使用应用私有目录,不需要权限
final directory = await getApplicationDocumentsDirectory();
final logDir = Directory('${directory.path}/logs');
if (!await logDir.exists()) {
await logDir.create(recursive: true);
}
final now = DateTime.now();
final fileName =
'app_${now.year}${now.month.toString().padLeft(2, '0')}${now.day.toString().padLeft(2, '0')}_${now.hour.toString().padLeft(2, '0')}${now.minute.toString().padLeft(2, '0')}.log';
_logFilePath = '${logDir.path}/$fileName';
// 清理旧日志文件
await _cleanOldLogFiles(logDir);
_fileInitialized = true;
debugPrint('[DKLog] 日志文件已初始化: $_logFilePath');
} catch (e) {
debugPrint('[DKLog] 初始化日志文件失败: $e');
_writeToFile = false;
}
}