50 lines
1.8 KiB
Dart
50 lines
1.8 KiB
Dart
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)}…';
|
||
}
|
||
}
|