logger 日志库使用教程
logger 是 Flutter 中最流行的日志库,下面是完整的使用教程:
1. 安装
# pubspec.yaml
dependencies:
logger: ^2.7.0flutter pub get2. 基础使用
import 'package:logger/logger.dart';
final logger = Logger();
void main() {
logger.d('Debug 日志');
logger.i('Info 日志');
logger.w('Warning 日志');
logger.e('Error 日志');
logger.f('Fatal 致命错误');
}输出效果:
┌────────────────────────────────────────────────────────────
│ 💡 Info 日志
└────────────────────────────────────────────────────────────
┌────────────────────────────────────────────────────────────
│ ⚠️ Warning 日志
└────────────────────────────────────────────────────────────3. 日志级别
| 方法 | 级别 | 用途 |
|---|---|---|
logger.t() | Trace | 最详细的追踪信息 |
logger.d() | Debug | 调试信息,开发时用 |
logger.i() | Info | 普通信息,如用户操作 |
logger.w() | Warning | 警告,不会导致崩溃 |
logger.e() | Error | 错误,需要关注 |
logger.f() | Fatal | 致命错误,应用可能崩溃 |
4. 带错误对象和堆栈
try {
final result = 10 ~/ 0;
} catch (error, stackTrace) {
logger.e('计算失败', error: error, stackTrace: stackTrace);
}输出:
┌────────────────────────────────────────────────────────────
│ ❌ 计算失败
│ Error: IntegerDivisionByZeroException
│ #0 main (file:///main.dart:10:3)
└────────────────────────────────────────────────────────────5. 自定义配置
PrettyPrinter(最常用)
final logger = Logger(
printer: PrettyPrinter(
methodCount: 2, // 显示调用方法数
errorMethodCount: 8, // 错误时显示的方法数
lineLength: 120, // 每行最大长度
colors: true, // 彩色输出
printEmojis: true, // 显示表情
dateTimeFormat: DateTimeFormat.dateAndTime, // 显示时间
),
);生产环境过滤
import 'package:flutter/foundation.dart';
final logger = Logger(
// 生产环境只显示 warning 及以上
level: kDebugMode ? Level.debug : Level.warning,
);6. 封装成全局工具类(推荐)
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
class Log {
static final Logger _logger = Logger(
printer: PrettyPrinter(
methodCount: 2,
errorMethodCount: 8,
lineLength: 120,
colors: true,
printEmojis: true,
dateTimeFormat: DateTimeFormat.dateAndTime,
),
level: kDebugMode ? Level.trace : Level.warning,
);
static void t(String message) => _logger.t(message);
static void d(String message) => _logger.d(message);
static void i(String message) => _logger.i(message);
static void w(String message, {Object? error, StackTrace? stackTrace}) =>
_logger.w(message, error: error, stackTrace: stackTrace);
static void e(String message, {Object? error, StackTrace? stackTrace}) =>
_logger.e(message, error: error, stackTrace: stackTrace);
static void f(String message, {Object? error, StackTrace? stackTrace}) =>
_logger.f(message, error: error, stackTrace: stackTrace);
}使用:
Log.i('用户登录成功: $account');
Log.e('请求失败', error: dioError, stackTrace: stackTrace);7. 与 Dio 结合
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
final dio = Dio();
if (kDebugMode) {
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
Log.i('请求: ${options.method} ${options.path}');
Log.d('参数: ${options.data}');
handler.next(options);
},
onResponse: (response, handler) {
Log.i('响应: ${response.statusCode}');
Log.d('数据: ${response.data}');
handler.next(response);
},
onError: (error, handler) {
Log.e('请求错误: ${error.message}', error: error);
handler.next(error);
},
));
}8. 不同 Printer 对比
| Printer | 特点 | 适用场景 |
|---|---|---|
PrettyPrinter | 彩色、带边框、美观 | 开发环境(推荐) |
SimplePrinter | 单行输出,简洁 | 日志文件记录 |
LogfmtPrinter | key=value 格式 | 服务端日志收集 |
NoOpPrinter | 不输出任何内容 | 完全关闭日志 |
// 生产环境写入文件
final fileLogger = Logger(
printer: SimplePrinter(printColors: false),
output: FileOutput(file: File('app.log')),
);快速参考
Log.i('普通信息'); // ℹ️
Log.d('调试: $data'); // 💬
Log.w('警告', error: e); // ⚠️
Log.e('错误', error: e, stackTrace: st); // ❌用封装后的 Log 类替换项目中所有的 print,就完成迁移了。