coder-dongjiayi / MXLogger

MXLogger 是基于mmap内存映射机制的跨平台日志库,支持AES CFB 128位加密,支持iOS Android Flutter。核心代码使用C/C++实现, Flutter端通过ffi调用,性能几乎与原生一致。 底层序列化使用Google开源的flat_buffers实现,高效稳定。
Other
142 stars 18 forks source link

setMaxDiskSize设置无效 #22

Closed Geekholt closed 10 months ago

Geekholt commented 10 months ago

setMaxDiskSize后,单个文件依然可以超过指定大小。我想实现单个文件超过10mb自动上传的功能,请问要怎么做?

coder-dongjiayi commented 10 months ago

setMaxDiskSize这个方法的初衷是为了解决日志文件体积过大,占用手机磁盘空间的问题。mxlogger 不会在日志写入的时候 实时检查是否超过最大值。默认情况下,程序在进入后台的时候会检查日志目录下所有的日志文件是否超过了设定的最大值,如果超过了则会优先删除距离现在时间较远的日志文件。如果你当前只有一个日志文件,那么这个文件会被删除。根据你的需求 我建议你这样做。 1、设置日志存储模式为 yyyy_MM_dd。即 每天存储一个日志文件,事实上存储粒度越细越好,最小的粒度是yyyy_MM_dd_HH。 2、设置shouldRemoveExpiredDataWhenEnterBackground 为false,也就是自己处理过期文件应该如何删除。 3、在某一个时刻,可以是启动的时候,或者根据你们的业务情况 调用 mxlogger.logSize 方法 检查是否超过了最大值。 4、如果达到了最大值,通过mxlogger.diskcachePath 获取日志磁盘路径,将该路径下的日志文件打包上传到自己的服务器 5、调用removeBeforeAllData 方法删除文件。注意不是removeAll()方法。因为当前正在写入的日志文件 不能被删除,否则日志会丢失。

Geekholt commented 10 months ago

感谢回复,我之前就是按照你说的这个方法做的,自己维护maxSize,但是由于调用了removeAll()导致日志丢失,所以才来提问的。 如果当前只有一个文件,调用removeBeforeAllData的话,好像也没啥意义,上传完成后文件依然存在。 目前我已经放弃设置maxSize的方案了,改用yyyy_MM_dd_HH。 最后还是非常感谢你在工作之余还能进行回复!