Files
kuaishai2/lib/features/device/services/device_log.dart

50 lines
1.8 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:developer' as developer;
/// 串口/协议层统一日志入口
///
/// 使用 `dart:developer.log` 便于 Dart DevTools 抓取与分级。
/// 所有日志统一以 `kuaishai.device` 为 name 前缀,方便在 DevTools 中过滤。
class DeviceLog {
static const String _name = 'kuaishai.device';
/// 信息级别:正常收发与状态变化
static void info(String message, {Object? error, Map<String, Object?>? context}) {
developer.log(message, name: _name, level: 800, error: error);
}
/// 警告级别:可恢复的异常(解析错误、写入失败等)
static void warn(String message, {Object? error, Map<String, Object?>? context}) {
developer.log(
message,
name: _name,
level: 900,
error: error,
// dart:developer 当前不支持直接附带 context调用方可在 message 中拼接
);
}
/// 严重级别:连接断开、协议级不可恢复错误
static void severe(String message, {Object? error, Map<String, Object?>? context}) {
developer.log(message, name: _name, level: 1000, error: error);
}
/// 将 Map 数据截断为可读摘要,避免在日志中泄露超长负载
static String summarizeData(Map<String, dynamic>? data, {int maxKeys = 8}) {
if (data == null || data.isEmpty) return '{}';
final keys = data.keys.take(maxKeys).toList();
final shown = keys.map((k) {
final v = data[k];
if (v is String) return '$k="${_truncate(v, 32)}"';
if (v is List) return '$k=[${v.length}]';
return '$k=$v';
}).join(', ');
final suffix = data.length > maxKeys ? ', ...' : '';
return '{$shown$suffix}';
}
static String _truncate(String s, int max) {
if (s.length <= max) return s;
return '${s.substring(0, max)}';
}
}