initFileLog static method

Future<void> initFileLog({
  1. bool enable = true,
  2. DKLogLevel fileLogLevel = DKLogLevel.info,
  3. int maxFileSize = 10 * 1024 * 1024,
  4. int maxFileCount = 5,
  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;
  }
}