DDLoggerSwift是一个iOS端将输出日志log悬浮显示在屏幕上的库,可以方便的写入日志并支持日志文件分享、上传,便于在真机没有连接xcode的情况下调试信息。可以分享、筛选log等操作。
该项目使用SQLite
高效存储,并保证日志插入时的顺序。不会影响界面性能和操作,运行效率高。自动解析Array、Dictionary为JSON字符串显示。
预览gif图 | Xcode对比gif图 |
---|---|
一、安装
你可以选择使用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默认将Dictionary
和Array
解析为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协议,您可以自由修改使用
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/1305.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!