Flutter每日库: logger自定义日志格式并输出到文件

在Flutter开发中,日志记录是调试和分析问题的重要工具。虽然系统自带print()debugPrint(),但功能单一、缺乏灵活性。今天为大家推荐一款高效、美观且可扩展的日志库------Logger,支持多级日志、自定义输出格式,甚至能将日志写入文件!

一、安装

复制代码
 flutter pub add logger

二、核心功能:自定义日志格式并写入文件

1. 自定义文件输出类

通过继承LogOutput,实现将日志按时间格式写入文件的功能。以下代码展示了如何创建FileLogOutput

dart 复制代码
// 自定义日志输出到文件格式
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
import 'package:path_provider/path_provider.dart';

class FileLogOutput extends LogOutput {

  late Directory _targetDir;

  @override
  Future<void> init() async {
    _targetDir = await getApplicationDocumentsDirectory();
    debugPrint("_targetDir = $_targetDir");
    return super.init();
  }

  @override
  void output(OutputEvent event) async {

    final DateTime currentDate = DateTime.now();
    final String dateString =
        "${currentDate.day}-${currentDate.month}-${currentDate.year}";

    final File file = File('${_targetDir.path}/log.log');
    if (!(await file.exists())) {
      await file.create(recursive: true);
    }

    file.writeAsStringSync(
      "[$dateString | ${currentDate.hour}:${currentDate.minute}:${currentDate.second}] ${event.origin.message}\n",
      mode: FileMode.append,
    );
  }
}

2. 多输出源核心配置

dart 复制代码
 final logger = Logger(
    output: MultiOutput([ConsoleOutput(), FileLogOutput()]),
  );

3. 使用案例

dart 复制代码
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';

import 'file_log_output.dart';

class LogPage extends StatefulWidget {
  const LogPage({super.key});

  @override
  State<LogPage> createState() => _LogPageState();
}

class _LogPageState extends State<LogPage> {
  
  // 同时输出到控制台和日志文件
  final logger = Logger(
    output: MultiOutput([ConsoleOutput(), FileLogOutput()]),
  );

  final pickList = [
    "Pick an image",
    "Capture a photo",
    "Pick a video",
    "Capture a video",
    "Pick multiple images",
    "Pick singe image or video",
    "Pick multiple images and videos",
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('LogPage'), elevation: 4),
      backgroundColor: Colors.white,
      body: Column(
        children: [
          TextButton(
            onPressed: () {
              // 输出示例
              logger.t("Trace log");
              logger.i("Debug log");
              logger.i(pickList);
              logger.i("Info log");
            },
            child: Text("log print"),
          ),
        ],
      ),
    );
  }
}

该库自带的输出类型介绍

  • ConsoleOutput:默认控制台输出

  • AdvancedFileOutput:支持日志文件滚动管理(如按日期分割)

  • MemoryOutput:将日志暂存于内存,适合短期调试

  • MultiOutput:多输出源组合

  • StreamOutput:结合Stream实现动态日志流处理

相关推荐
不会写代码0007 小时前
Flutter 框架跨平台鸿蒙开发 - 全国博物馆查询:探索中华文明宝库
flutter·华为·harmonyos
kirk_wang8 小时前
Flutter艺术探索-SQLite数据库:sqflite库完全指南
flutter·移动开发·flutter教程·移动开发教程
Miguo94well8 小时前
Flutter框架跨平台鸿蒙开发——节日祝福语APP的开发流程
flutter·harmonyos·鸿蒙·节日
晚霞的不甘8 小时前
解决 Flutter for OpenHarmony 构建失败:HVigor ERROR 00303168 (SDK component missing)
android·javascript·flutter
2501_944521599 小时前
Flutter for OpenHarmony 微动漫App实战:分享功能实现
android·开发语言·javascript·flutter·ecmascript
猛扇赵四那边好嘴.9 小时前
Flutter 框架跨平台鸿蒙开发 - 星座运势详解:探索星座奥秘
flutter·华为·harmonyos
不会写代码0009 小时前
Flutter 框架跨平台鸿蒙开发 - 实时快递柜查询:智能管理包裹取寄
flutter·华为·harmonyos
A懿轩A9 小时前
【2026 最新】Flutter 编译开发 OpenHarmony 工程目录结构全解析
flutter·harmonyos·openharmony·开源鸿蒙
2501_944521599 小时前
Flutter for OpenHarmony 微动漫App实战:标签筛选功能实现
android·开发语言·前端·javascript·flutter
kirk_wang10 小时前
Flutter艺术探索-Hive高性能存储:NoSQL数据库实战
flutter·移动开发·flutter教程·移动开发教程