writeEvents method

Future<void> writeEvents(
  1. List<LogEvent> events
)

写入事件到文件 (实现同一天合并逻辑)

Implementation

Future<void> writeEvents(List<LogEvent> events) async {
  if (events.isEmpty) return;
  try {
    // 获取当天的日期存储路径
    final dateStoragePath = await config.getStoragePathByDate();
    final dateDirectory = Directory(dateStoragePath);
    // 确保日期目录存在
    if (!await dateDirectory.exists()) {
      await dateDirectory.create(recursive: true);
    }
    final fileName = _generateFileName();
    final file = File('$dateStoragePath/$fileName');
    // 检查当日主文件是否存在且大小是否超限
    if (await file.exists()) {
      final fileSize = await file.length();
      // 检查文件大小是否超过指定限制 (默认10MB)
      final maxSizeBytes = config.maxFileSize * 1024 * 1024;
      if (fileSize > maxSizeBytes) {
        // 文件过大,创建新的时间戳文件
        final newFileName = _generateFileName(forceNew: true);
        final newFile = File('$dateStoragePath/$newFileName');
        await _writeEventsToFile(newFile, events, isNewFile: true);
        if (config.enableDebugMode) {
          debugPrint('📄 Created new log file due to size limit: $newFileName');
        }
        return;
      } else {
        // 文件存在且未超限,追加到现有文件
        await _writeEventsToFile(file, events, isNewFile: false);
        if (config.enableDebugMode) {
          debugPrint('📝 Appended ${events.length} events to existing file: $fileName');
        }
        return;
      }
    } else {
      // 文件不存在,创建新文件
      await _writeEventsToFile(file, events, isNewFile: true);
      if (config.enableDebugMode) {
        debugPrint('📄 Created new log file: $fileName');
      }
    }
  } catch (e) {
    if (config.enableDebugMode) {
      debugPrint('❌ Failed to write events: $e');
    }
  }
}