You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤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」选项
  • 保存配置后,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:18:03