MXLogger 1.2.13

MXLogger 1.2.13

dongjiayi 维护。



MXLogger 1.2.13

  • By
  • dongjiayi

license Platform

MXLogger

MXLogger

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

中文说明请点击这里

结构

jiegoutu

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

性能测试

测试环境

  • iphone11,系统版本 14.6

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

  • 测试 10 次,取平均值

  • 将 Xcode 构建配置设置为 release

结果

  • 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

notice

不要在一个可能会被系统清理的目录中设置日志存储目录,如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");