如何过滤LogCat中com.jaredrummler库输出的指定重复异常日志
屏蔽DeviceName库异常日志的实现方案
方案1:本地调试LogCat过滤(无需修改代码)
该方案仅适用于本地开发调试阶段,不会影响打包后的日志输出:
- 打开Android Studio底部的LogCat面板,点击过滤栏右侧的下拉箭头,选择「Edit Filter Configuration」
- 新建自定义过滤规则,在排除规则区域做如下配置:
- 若要屏蔽所有该库产生的System.err警告,在
Log Message输入框填写com.jaredrummler.android.device.DeviceName,勾选右侧的「Negative」(反向匹配)选项 - 若仅要屏蔽当前报错的
No value for manufacturer异常,在Log Message输入框填写该关键词,同样勾选「Negative」选项
- 若要屏蔽所有该库产生的System.err警告,在
- 保存配置后,LogCat会自动隐藏匹配到的目标日志,其余日志正常展示。
方案2:代码层面全局屏蔽(线上环境生效)
该方案从根源阻止该日志输出,打包上线后也会生效:
方法A:调用处主动捕获异常
该日志是库内部读取设备配置JSON时缺少manufacturer字段抛出的未捕获异常,你可以在调用库方法的位置用try-catch包裹,避免异常打印到System.err:
val deviceName = try { DeviceName.getDeviceName() } catch (e: JSONException) { // 异常兜底,直接用系统自带的设备型号即可 Build.MODEL } // 后续正常使用deviceName
方法B:临时重定向System.err输出
如果捕获异常后日志仍打印,说明是库内部自行打印了异常栈,你可以在调用库方法前后临时替换System.err的输出流,调用结束后恢复:
// 先保存原有的System.err流 PrintStream defaultErr = System.err; // 替换为无输出的流,也可以自定义逻辑只过滤目标日志 System.setErr(new PrintStream(new OutputStream() { @Override public void write(int b) { // 无操作,丢弃输出内容 } })); // 执行库方法调用 String deviceName = DeviceName.getDeviceName(); // 调用完成后恢复原有System.err流,避免影响其他日志打印 System.setErr(defaultErr);
内容的提问来源于stack exchange,提问作者Gavin Wright
相关产品推荐
相关产品推荐

