Closed mml237 closed 1 year ago
补充:mxLogger?.removeAllData()之后,继续写入日志,沙盒文件中始终没有创建新的日志文件
当前写入文件被删除,日志无法写入。正常情况是不能删除当前正在写入的文件的,如果删了 需要重新初始化mxlogger对象
当前写入文件被删除,日志无法写入。正常情况是不能删除当前正在写入的文件的,如果删了 需要重新初始化mxlogger对象
如何实现?以下写法会崩溃:
你的需求要把本地所有的日志文件都删掉么? 正常的逻辑是:
我提供了释放对象的方法 是对于非单利的业务情况 比如 你们的app 是一个大工程,其中某一个模块是其他团队在维护。你的app中集成了这个模块 当进入这个模块的时候创建logger对象 离开这个模块的时候调用销毁的方法(我的demo logger就是在一个二级页面创建的 当前controller 出栈的时候 logger销毁)
如果你不属于上面的情况,正常来说 日志对象在业务层的单利里面不会释放 ,应该不会调用销毁的方法。
你的需求要把本地所有的日志文件都删掉么? 正常的逻辑是:
- 创建logger对象(如果业务层封装的是单利的话 则logger对象不释放)
- 只删除过期文件
我提供了释放对象的方法 是对于非单利的业务情况 比如 你们的app 是一个大工程,其中某一个模块是其他团队在维护。你的app中集成了这个模块 当进入这个模块的时候创建logger对象 离开这个模块的时候调用销毁的方法(我的demo logger就是在一个二级页面创建的 当前controller 出栈的时候 logger销毁)
如果你不属于上面的情况,正常来说 日志对象在业务层的单利里面不会释放 ,应该不会调用销毁的方法。
没有那么复杂,就是日常开发时,日志太多不方便看。 如何将已有日志全部清除(包括尚未写入磁盘的),然后重新开始记录?期待增加此功能
能不能写一个demo 复现一下你上面的崩溃,发上来。 我从你的截图来看 没看出问题来。
能不能写一个demo 复现一下你上面的崩溃,发上来。 我从你的截图来看 没看出问题来。
MXDemo 里面ViewController 持有MXLogger对象(m1),当第二次创建MXLogger对象(m2)的时候 ,会触发m1对象的delloc方法,这个delloc方法 里面有这样一行代码mx_logger::delete_namespace(_nameSpace.UTF8String, _directory.UTF8String);
意思就是通过namespace和directory 去释放对应的C++对象.所以m2调用对应的c++对象就野指针了。
从你代码逻辑来看,不符合我设计这个框架的初衷。实际的开发情况日志本身就很多,很杂,不太容易查看,这种情况应该从日志解析端入手解决 而不是清理原始数据。Demo中调用释放的方法,更多原因是希望告诉开发者这是一个多例的设计,允许在一些复杂 特殊的业务场景里面 创建多个logger对象。正常情况下logger 在业务层应该是一个单例的设计 不应该被释放。
清理所有日志后,再次写入日志,并查找日志文件,发现找不到 复现步骤:
mxLogger?.removeAllData()
mxLogger?.logFiles()
,结果为空数组下图是我的mxLogger的创建方式: