Flutter解决日志打印不全问题

最近在搞flutter项目,开发的时候发现使用自带的print函数在打印的时候日志显示不全,找到一个不错的日志打印工具类记录一下方便查找

import 'package:flutter/cupertino.dart';

class LogUtil {
  static var _separator = "=";
  static var _split =
      "$_separator$_separator$_separator$_separator$_separator$_separator$_separator$_separator$_separator";
  static var _title = "Yl-Log";
  static var _isDebug = true;
  static int _limitLength = 800;
  static String _startLine = "$_split$_title$_split";
  static String _endLine = "$_split$_separator$_separator$_separator$_split";

  static void init({String title, @required bool isDebug,int limitLength}) {
    _title = title;
    _isDebug = isDebug;
    _limitLength = limitLength??=_limitLength;
    _startLine = "$_split$_title$_split";
    var endLineStr = StringBuffer();
    var cnCharReg = RegExp("[\u4e00-\u9fa5]");
    for (int i = 0; i < _startLine.length; i++) {
      if (cnCharReg.stringMatch(_startLine[i]) != null) {
        endLineStr.write(_separator);
      }
      endLineStr.write(_separator);
    }
    _endLine = endLineStr.toString();
  }

  //仅Debug模式可见
  static void d(dynamic obj) {
    if (_isDebug) {
      _log(obj.toString());
    }
  }

  static void v(dynamic obj) {
    _log(obj.toString());
  }

  static void _log(String msg) {
    print("$_startLine");
    _logEmpyLine();
    if(msg.length<_limitLength){
      print(msg);
    }else{
      segmentationLog(msg);
    }
    _logEmpyLine();
    print("$_endLine");
  }

  static void segmentationLog(String msg) {
    var outStr = StringBuffer();
    for (var index = 0; index < msg.length; index++) {
      outStr.write(msg[index]);
      if (index % _limitLength == 0 && index!=0) {
        print(outStr);
        outStr.clear();
        var lastIndex = index+1;
        if(msg.length-lastIndex<_limitLength){
          var remainderStr = msg.substring(lastIndex,msg.length);
          print(remainderStr);
          break;
        }
      }
    }
  }

  static void _logEmpyLine(){
    print("");
  }
}

 

### Flutter中的日志记录方法 在开发Flutter应用程序时,有效的日志记录机制可以帮助开发者快速诊断和解决问题。以下是几种常见的日志记录方式以及如何实现高效的日志管理。 #### 使用`print()`函数 最简单的方式是通过内置的 `print()` 函数来输出调试信息到控制台。然而,在生产环境中建议使用此方法,因为它可能会暴露敏感数据并影响性能[^1]。 ```dart void main() { print('This is a debug message.'); } ``` #### Dart 的 `debugPrint` 为了替代标准的 `print()` 方法,可以考虑使用来自 `foundation` 库的 `debugPrint` 函数。它具有缓冲区溢出保护功能,并且仅限于调试模式下工作。 ```dart import 'package:flutter/foundation.dart'; void main() { debugPrint('A safer way to log messages.'); } ``` #### 高级日志库 - `logger`包 对于更复杂的需求,推荐引入第三方库如 `logger` 来增强日志的功能性和可读性。该库支持多种日志级别(info, warning, error 等),并且允许自定义输出格式。 安装依赖项: ```yaml dependencies: logger: ^2.0.0 ``` 实际运用例子: ```dart import 'package:logger/logger.dart'; final logger = Logger(); void main() { logger.i('Informational message'); logger.w('Warning occurred!'); logger.e('Error happened!', StackTrace.current); } ``` #### 自动化日志上传与错误追踪 除了本地打印外,建立一套完整的线上监控体系同样重要。这通常涉及将捕获的日志发送至远程服务器以便进一步分析处理。文中提到过创建智能化的日志上传策略能够极大地提高排查效率。 关于具体实施细节,则需结合业务场景定制相应的API接口或者选用现成的服务平台比如 Sentry、Bugsnag 等来进行集成配置。 --- ### 常见问题解答 如果遇到某些特定情况下的难题,例如测试失败或是插件冲突等情况,也可以查阅相关资料获取指导。例如重新运行指定路径下的集成测试文件可以通过命令行完成操作[^2]: ```bash flutter test integration_test/app_test.dart ``` 另外针对一些流行的开源组件如 `flutter_downloader` ,其官方文档提供了丰富的FAQ帮助用户解决日常碰到的技术障碍[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值