首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何监控或覆盖android.util.log?

如何监控或覆盖android.util.log?
EN

Stack Overflow用户
提问于 2019-04-10 06:30:24
回答 2查看 849关注 0票数 2

我在项目中的所有地方都使用log.d/v/w/e。

现在,我希望将所有日志保存到设备本地文件中。

但是,最后一个类中的android.util.Log类。

这意味着我不能从它延伸。

有没有办法接管android.util.Log的控制权,这样我就不需要在项目中到处更改log.d/v/w/e?

我正在寻找一种简单的方法来知道log.d/v/w/e是否被调用,这样我就可以将信息写入本地文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 10:09:38

当您需要添加到最终类的功能时,一种常见的选择是使用装饰器(包装器)模式:

代码语言:javascript
运行
复制
public class LogUtils {

  public static void LOGE(String tag, String message) {
     Log.e(tag, message);
     doSomethingElse();
  }

  ...
}

这种日志记录的实现非常流行。

但是,还有另一种选择来编写您自己的包装器。Java的库Timber已经处理了所有的实用程序,并添加了一些其他的功能,比如自动标记和String.format for Java的使用。

您可以添加自己的功能来处理自己的诊断逻辑,如下所示:

代码语言:javascript
运行
复制
public class MyLoggingClass extends DebugTree {

  @Override
  public void log(int priority, String tag, String message, Throwable t) {

    if (BuildConfig.DEBUG) {
       super.log(priority, tag, message, t);
    }

    doSomethingElse();

  }
}
票数 3
EN

Stack Overflow用户

发布于 2021-01-13 06:22:40

从文件中删除任何‘导入android.util.Log’,您可以包含您自己的日志类:

代码语言:javascript
运行
复制
// log.java
package com.my.package;

public class Log {
    public static int v(String tag, String msg) { return println(android.util.Log.VERBOSE, tag, msg); }
    public static int d(String tag, String msg) { return println(android.util.Log.DEBUG,   tag, msg); }
    public static int i(String tag, String msg) { return println(android.util.Log.INFO,    tag, msg); }
    public static int w(String tag, String msg) { return println(android.util.Log.WARN,    tag, msg); }
    public static int e(String tag, String msg) { return println(android.util.Log.ERROR,   tag, msg); }

    public static int println(int priority, String tag, String msg)  {
        // Do another thing
        return android.util.Log.println(priority, tag, msg);
    }
}

然后,您可以保持所有的“log.e”行不受干扰,但仍然可以拦截日志记录行。

这并不是android.util.Log类的完全替换/实现,但它包含了我使用的所有函数,如果需要的话,它很容易扩展。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55602218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档