MXLoggerCore 1.2.13

MXLoggerCore 1.2.13

dongjiayi 维护。



  • 作者
  • dongjiayi

license Platform

MXLogger

MXLogger

MXLogger 是一个基于 mmap 的多平台日志收集库。支持 iOS、Android 和 Flutter。核心代码使用 C/C++,在 Flutter 上使用 ffi 调用,性能几乎与原生相同。数据序列化使用 Google 的开源 flat_buffers 实现,高效且稳定。

中文说明请点击这里

结构

jiegoutu

目前,MXLogger 主要解决日志写入和日志分析问题。日志上报时间由服务决定,MXLogger 已开启日志路径,需要开发调用原生平台并上传文件到其服务器上的代码。

性能测试

测试环境

  • iphone11, 系统版本 14.6

  • 每次数据约为 134 字节,循环 100,000 次

  • 测试 10 次,取平均值

  • 设置 Xcode 构建配置为发布

结果

  • 0.13 秒

日志查看

  • 为了解析生成的二进制数据,我编写了一个配套的解析工具,您可以查看mxlogger_analyzer,它看起来像这样。视频链接
  • 您可以在搜索框中输入标签,以搜索标签属性。类似于`name msg`。

控制台

jiegoutu

mxlogger_analyzer_desktop.mp4
  • 如果您使用的是Mac,只需下载客户端。如果您使用Windows,您可能需要自己配置Flutter环境,编译mxlogger_analyzer的源代码并打包exe文件。
  • 如果您的项目是Project Flutter,您可以通过mxlogger_analyzer_lib依赖。
dependencies:
  mxlogger_analyzer_lib:^1.0.2

 MXAnalyzer.showDebug(
                    _navigatorStateKey.currentState!.overlay!,
                    diskcachePath: _mxLogger.diskcachePath,
                    cryptKey: _mxLogger.cryptKey,
                    iv: _mxLogger.iv,
                    databasePath: "you database path")

它看起来像这样视频链接

mxlogger_analyzer_pckage.mp4

安装

iOS

pod 'MXLogger'

Android

实现 'io.github.coder-dongjiayi:mxlogger:latest.release'

Flutter

dependencies:
  flutter_mxlogger: ^last

通知

不要在一个可能会被系统清理的目录中设置日志存储目录,例如iOS中的library/cache。MXLogger在每次写入数据时不会检查目录是否存在,而只在上次启动时创建它。如果应用程序运行时系统清理了日志文件,则程序不会报告错误也不会回放,但也不会记录日志。

  • iOS

    MXLogger * logger =  [MXLogger initializeWithNamespace:@"com.youdomain.logger.space",storagePolicy:MXStoragePolicyYYYYMMDD];
    logger.maxDiskAge = 60*60*24*7; // a week
    logger.maxDiskSize = 1024 * 1024 * 10; // 10M
    logger.fileLevel = 0;// If the file write level is lower than this level, the log file will not be written to the file
    
    [logger debug:@"mxlogger" msg:@"this is debug" tag:@"network,action"];
    [logger info:@"mxlogger" msg:@"this is info" tag:@"request"];
    [logger warn:@"mxlogger" msg:@"this is warn" tag:@"step"];
    [logger error:@"mxlogger" msg:@"this is error" tag:@"action"];
    [logger fatal:@"mxlogger" msg:@"this is fatal" tag:@"reponse"];
  • Android

    MXLogger logger = new MXLogger(this.getContext(),"com.djy.mxlogger");
    logger.maxDiskAge = 60*60*24*7; // a week
    logger.maxDiskSize = 1024 * 1024 * 10; // 10M
    logger.debug("request","mxlogger","this is debug",tag:"tag1,tag2,tag3");
    logger.info("response","mxlogger","this is info");
    logger.warn("tag","mxlogger","this is warn");
    logger.error("404","mxlogger","this is error");
    logger.fatal("200","mxlogger","this is fatal");
  • Flutter

     MXLogger logger = await MXLogger.initialize(
            nameSpace: "flutter.mxlogger",
            storagePolicy: MXStoragePolicyType.yyyy_MM_dd,
            cryptKey: "abcuioqbsdguijlk",
            iv: "bccuioqbsdguijiv");
    
     logger.setMaxDiskAge(60*60*24*7);
     logger.setMaxDiskSize(1024*1024*10);
     logger.setFileLevel(0);
    
     logger.debug("this is debug ", name: "mxlogger", tag: "tag1,tag2,tag3");
     logger.info("this is info", name: "mxlogger", tag: "w");
     logger.warn("this is  warn", name: "mxlogger", tag: "w");
     logger.error("this is  error", name: "mxlogger", tag: "e");
     logger.fatal("this fatal", name: "mxlogger", tag: "f");