DDLoggerSwift是一个iOS端将输出日志log悬浮显示在屏幕上的库,可以方便的写入日志并支持日志文件分享、上传,便于在真机没有连接xcode的情况下调试信息。可以分享、筛选log等操作。

该项目使用SQLite高效存储,并保证日志插入时的顺序。不会影响界面性能和操作,运行效率高。自动解析Array、Dictionary为JSON字符串显示。

预览gif图Xcode对比gif图
2024-05-27T14:12:32.png2024-05-27T14:13:01.png

一、安装

你可以选择使用cocoaPod安装,也可以直接下载源文件拖入项目中

1.1、cocoaPod安装

pod 'DDLoggerSwift'

1.2、文件安装

可以将工程底下,pod文件夹内的文件拖入项目即可

二、使用

1、导入头文件

import DDLoggerSwift

2、显示悬浮窗

DDLoggerSwift.show()

3、打印日志内容

四种输出方式字体颜色显示不同,对应的printLog不同的类型

printDebug(log)    //调试输出,仅在xcode输出日志,不会写入日志数据库

printLog(log)        //日志为绿色

printWarn(log)    //日志为黄色

printError(log)    //日志为红色

printPrivacy(log)    //加密数据的输出,加密方式可以查看加密说明

输出格式

✅ [2025-03-19T03:11:59Z] [INFO] File: TalkViewModel.swift | Line: 730 | Function: _bindRequest() |
---------------------------------
Log日志

⚠️ [2025-03-19T03:11:59Z] [WARN] File: TalkViewModel.swift | Line: 730 | Function: _bindRequest() |
---------------------------------
警告提示

❌ [2025-03-19T03:11:59Z] [ERROR] File: TalkViewModel.swift | Line: 730 | Function: _bindRequest() |
---------------------------------
错误提示

⛔️ [2025-03-19T03:11:59Z] [PRIVACY] File: TalkViewModel.swift | Line: 730 | Function: _bindRequest() |
---------------------------------
AAuKjIm5hC2jiPqz7OKHAngWspeACyWZufDguqdOcugituhWV8jnbr/6SHYoK0/9

💜 [2025-03-19T03:11:59Z] [DEBUG] File: TalkViewModel.swift | Line: 730 | Function: _bindRequest() |
---------------------------------
测试输出,默认不会写入数据库

三、参数设置

DDLoggerSwift提供了多个参数可供配置,在日常开发使用中,大部分情况下使用默认配置即可满足需求。

1、输出格式

//默认为true
DDLoggerSwift.isFullLogOut = true

完整输出log包含了调用的文件、调用的行数、和调用的函数

✅ [2025-03-19T03:11:59Z] [INFO] File: TalkViewModel.swift | Line: 730 | Function: _bindRequest() |
---------------------------------
Log日志

设置为false仅输出日志和时间

✅ [2025-03-19T03:11:59Z] [INFO]
---------------------------------
Log日志

2、在xcode调试栏输出内容

DDLoggerSwift.isSyncConsole = true

默认为true,设置为false时,仅写入数据库,在xcode开发时不在底部调试栏显示日志内容

3、不同用户设置独立日志文件夹

DDLoggerSwift.userID = "0"

通过不同的用户ID,可以独立保存不同的日志文件夹。默认用户id为0

4、清空窗口显示的log日志,不会删除日志数据库文件

DDLoggerSwift.cleanLog()

5、关闭log日志显示窗口

DDLoggerSwift.hide()

6、完全关闭整个log窗口

DDLoggerSwift.close()

7、log文件有效期,0为不限制, 默认为30天

DDLoggerSwift.logExpiryDay = 30

log日志的数据库文件根据日期保存,每日会有独立的文件。超出有效期的数据库文件会被删除。

8、 删除日志的数据库文件

DDLoggerSwift.deleteLogFile()

可指定日期删除日志的数据库文件,如不指定日期,则删除当前用户的全部日志文件

9、存储日志的级别

包含在内的日志级别会被存储到数据库,默认debug级别不存储


DDLoggerSwift.storageLevels = [.info, .warn, .error, .privacy]

10、日志文件存储的文件夹

DDLoggerSwift.DBParentFolder = DDUtils.shared.getFileDirectory(type: .documents)

默认存储在documents,如果想修改为其他文件夹,例如caches文件夹,可以设置

DDLoggerSwift.DBParentFolder = DDUtils.shared.getFileDirectory(type: .caches)

11、获取数据库存储的日志信息数组

DDLoggerSwift.getAllLog()

可以指定日期、关键词、日志类型、分页拉取等。

12、分享日志Log

DDLoggerSwift.showShare()

分享日志会自动将选择日期的日志写入到一个DDLoggerSwift.log文件中,并弹出系统分享,可以快捷的分享到twitter、微信等工具。

13、上传日志数据库文件

1、用户选择上传

如果你想让用户上传db文件,我们提供了快捷方案,和分享一样,调用

DDLoggerSwift.showUpload()

即可出现上传的选项,用户点击确定的回调在uploadComplete,你实现该回调即可处理上传功能,例如

DDLoggerSwift.uploadComplete = { file in
     print(file)
     //处理上传
}

2、自定义获取文件

1、获取指定日期的数据库文件

///获取log日志的数据库文件
DDLoggerSwift.getDBFile(date: Date)

该功能可以获取指定日期的数据库文件,然后自定义上传即可。

2、获取全部日志文件

如果你想获取所有日志文件,可以获取日志存储的文件夹,所有日期的数据库文件在该文件夹中。

DDLoggerSwift.getDBFolder()

文件排序可以参考以下代码

let dbFolder = DDLoggerSwift.getDBFolder()
        
if let enumer = FileManager.default.enumerator(atPath: dbFolder.path) {
    while let file = enumer.nextObject() {
         if let file: String = file as? String {
            if file.hasSuffix(".db") {
                //获取到具体的log文件日志
                let logFilePath = dbFolder.appendingPathComponent(file, isDirectory: false)
             }
         }
    }
}

14、节流

SQLite数据库已支持并发的大量读写,无需特殊设置,但是如果您的日志每秒上百万,如果可以采取节流的方式,单位秒,默认为0。节流方式会存储后批量写入,更加高效,但是具有滞后性。

DDLoggerSwift.throttleTime = 2

15、日志展示窗口的日志分页

DDLoggerSwift.maxPageSize = 10000

0为不分页,默认10000。DDLoggerSwift自带的有日志显示窗口,方便在手机上直接查看当前日志。如果当天日志数量太多,例如上百万条数据,一次性读取展示的时候会有加载延迟,所以可以采取分页加载,往下滚动时去拉取剩下的日志。默认每次加载1万条数据。

16、日志展示窗口的cell字段截取

DDLoggerSwift.cellDisplayCount = 600

DDLoggerSwift自带的有日志显示窗口,方便在手机上直接查看当前日志。采用cell自动布局的方式,经过日常测试发现,如果json数据太大,cell自动布局可能会出现卡顿的现象,所以设置该项可以避免该现象。超过该设置会有展示更多的显示按钮。

四、自定义解析日志输出格式

如果你想自定义输出的内容,可以集成并该类型的LogContent协议,例如设置打印URL类型只输出它的path,可以直接设置返回的logStringValue即可。

extension URL: LogContent {
    public var logStringValue: String {
        return self.path
    }
}

DDLoggerSwift默认将DictionaryArray解析为JSON格式,其他类型如需自定义输出,实现上述协议即可

五、 敏感信息输出加密和解密

如果存在敏感信息,不希望用户或者手机调试时看到,简单两步就可以设置加密

//1、设置加密密码,32个字符数字。默认为12345678901234561234567890123456
DDLoggerSwift.privacyLogPassword = "12345678901234561234567890123456"

//2、输出加密内容
printPrivacy("这个是加密数据的测试数据222")

5.2、显示窗内容解密

设置之后,在显示窗中的显示为该内容已加密,请解密后查看,输入设置的加密密码然后点击解密之后即可显示正常的加密内容。

5.1、 分享文件解密

  • 如果已经在显示窗解密了数据,此时分享的文件内容不会加密,会显示所有内容。
  • 如果在显示窗中未解密,此时分享出的文件内容为AES加密内容,可以搜索AES在线解密的网站去解密内容,设置参照下图:

  • 模式: CBC
  • 填充: Pkcs7
  • 数据块: 128位
  • 偏移量: abcdefghijklmnop
  • 编码: Base64
  • 字符集: UTF8
  • 密码: 你自己在sdk中设置的密码

然后点击解密即可。

这里推荐几个在线的网站,你也可以自己百度

六、日志查看客户端

该库使用SQLite存储日志信息,可以使用通用的SQLite查看工具,也可以可以使用DDLoggerClient的客户端配合查看DDLoggerSwift导出的SQLite文件。

该工具使用swiftUI开发,解析格式只适配DDLoggerSwift,配合显示更加方便。

局域网实时日志(beta)

3.0.0 版本之后,实现了局域网实时日志查看,简单配置接口使用。

1、项目pod增加局域网功能

pod 'DDLoggerSwift/socket'

2、在项目info.plist增加局域网描述,和Bonjour的服务字段。

<key>NSBonjourServices</key>
    <array>
        <string>_DDLoggerSwift._tcp</string>
    </array>
<key>NSLocalNetworkUsageDescription</key>
<string>查找本地网络以便使用Bonjour功能</string>

注意:NSBonjourServices的type值和DDLoggerSwift.socketType保持一致,DDLoggerSwift代码中的socketType可以自定义,修改之后info.plist也做对应的修改即可

无需其他配置,即可在通过DDLoggerClient查看同一局域网下的设备日志。

License

该项目基于MIT协议,您可以自由修改使用


☟☟可点击下方广告支持一下☟☟

最后修改:2025 年 03 月 20 日
请我喝杯可乐,请随意打赏: ☞已打赏列表