Skip to Content
Welcome to yujie-code-blogs build by Nextra 4.0 🎉
Flutterlogger插件的使用

logger 日志库使用教程

logger 是 Flutter 中最流行的日志库,下面是完整的使用教程:


1. 安装

# pubspec.yaml dependencies: logger: ^2.7.0
flutter pub get

2. 基础使用

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单行输出,简洁日志文件记录
LogfmtPrinterkey=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,就完成迁移了。