1. logger 库
GitHub: github.com/simc/logger
1.1 核心特性
-
彩色输出
-
自定义打印器
-
错误堆栈跟踪
-
方法调用跟踪
-
JSON 格式化
1.2 架构设计
Logger
├── LogPrinter (输出格式化)
├── LogOutput (输出目标)
└── LogFilter (日志过滤)
1.3 关键实现
class Logger {
final LogFilter? filter;
final LogPrinter printer;
final LogOutput output;
void log(Level level, message, [error, StackTrace? stackTrace]) {
final event = LogEvent(level, message, error, stackTrace);
if (filter?.shouldLog(event) ?? true) {
List<String> lines = printer.log(event);
output.output(OutputEvent(level, lines));
}
}
}
2. logging 库 (Dart 官方)
pub.dev: pub.dev/packages/lo…
2.1 核心特性
-
分层日志记录
-
层级结构
-
灵活的处理器
-
简单易用
2.2 架构设计
Logger (层级式)
├── LogRecord (日志记录)
└── Level (日志级别)
2.3 关键实现
class Logger {
final String name;
final Map<String, Logger> _children;
final Logger? parent;
void log(Level level, message, [Object? error]) {
if (isLoggable(level)) {
var record = LogRecord(level, message, name, error);
Function? handler = recordHandler;
if (handler != null) handler(record);
}
}
}
3. talker
GitHub: github.com/Frezyx/talk…
3.1 核心特性
-
UI 界面展示
-
网络日志
-
错误处理
-
自定义格式
-
文件存储
3.2 架构设计
Talker
├── TalkerLogger (日志记录)
├── TalkerObserver (观察者)
├── TalkerFilter (过滤器)
└── TalkerDataInterface (数据接口)
3.3 关键实现
class Talker {
final List<TalkerObserver> observers;
final TalkerDataInterface dataInterface;
void handle(TalkerData data) {
for (final observer in observers) {
observer.handle(data);
}
dataInterface.save(data);
}
}
4. l
pub.dev: pub.dev/packages/l
4.1 核心特性
-
极简设计
-
链式调用
-
自定义标签
-
性能优化
4.2 架构设计
L
└── LogMessage
4.3 关键实现
class L {
static void log(
dynamic message, {
String? tag,
StackTrace? stackTrace,
}) {
print('$tag: $message');
if (stackTrace != null) print(stackTrace);
}
}
5. 框架对比分析
5.1 功能对比
功能 | logger | logging | talker | l |
---|---|---|---|---|
彩色输出 | ✓ | × | ✓ | × |
文件存储 | × | × | ✓ | × |
UI展示 | × | × | ✓ | × |
自定义格式 | ✓ | ✓ | ✓ | × |
错误追踪 | ✓ | ✓ | ✓ | ✓ |
性能 | 中 | 高 | 中 | 高 |
5.2 优缺点分析
logger
优点:
-
输出格式美观
-
配置灵活
-
社区活跃
缺点:
-
性能开销较大
-
缺少文件存储
-
配置较复杂
logging
优点:
-
官方支持
-
性能优秀
-
设计简洁
缺点:
-
功能较简单
-
缺少可视化
-
配置有限
talker
优点:
-
功能全面
-
UI界面支持
-
扩展性强
缺点:
-
学习曲线陡
-
依赖较多
-
体积较大
l
优点:
-
极简设计
-
性能最优
-
使用简单
缺点:
-
功能有限
-
扩展性差
-
定制性低