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

     2023-04-15     204

关键词:

【中文标题】如何监控 android.util.log 或覆盖它?【英文标题】:How can I monitor android.util.log or override it? 【发布时间】:2019-08-31 07:15:20 【问题描述】:

我在项目的任何地方都使用 log.d/v/w/e。

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

然而,android.util.Log类在final类中。

这意味着我无法扩展它。

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

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

【问题讨论】:

【参考方案1】:

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

public class LogUtils 

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

  ...

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

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

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

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();

  

【讨论】:

【参考方案2】:

从文件中删除任何“import android.util.Log”,您可以包含自己的日志类:

// 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 类的完全替代/实现,但它具有我使用的所有功能,并且如果您需要,它很容易扩展。

【讨论】:

如何将输出写入 Android 中的 Log?

】如何将输出写入Android中的Log?【英文标题】:HowdoIwriteoutputstotheLoginAndroid?【发布时间】:2011-01-2219:35:44【问题描述】:我想将一些调试输出写入日志以使用logcat进行查看。如果我向System.out写入内容,这已显示在logcat中。写入... 查看详情

如何查看log日志文件

...Java与C语言中输出日志:1)Java代码在程序中输出日志,使用android.util.Log类的以下5个方法:Log.v()、Log.d()、Log.i()、Log.w()、Log.e()。分对应Verbose、Debug、INFO、Warn、Error的首字母。例如:Log.i("类::函数名","日期_时间_源码文... 查看详情

如何查看log日志文件呢?

...Java与C语言中输出日志:1)Java代码在程序中输出日志,使用android.util.Log类的以下5个方法:Log.v()、Log.d()、Log.i()、Log.w()、Log.e()。分对应Verbose、Debug、INFO、Warn、Error的首字母。例如:Log.i("类::函数名","日期_时间_源码文件名_行号_日... 查看详情

如何使用android中的logcat调试程序

Android开发中,所的有输出都在logcat中包含System.out输出和printStackTrace()输出都在Logcat中,Android开发,建议使用android提供的Log工具类来打印信息。找到Logcat视图的方式:1.Eclipse点击Window。2.ShowView会出来一个对话框。3.点击最下面的other...... 查看详情

如何将 proguard 配置为仅删除 android 日志记录调用

】如何将proguard配置为仅删除android日志记录调用【英文标题】:HowtoconfigureproguardtoONLYremoveandroidloggingcalls【发布时间】:2013-03-1209:06:00【问题描述】:我正在尝试将proguard配置为仅从我的Android应用程序中删除对android.util.Log的调用... 查看详情

idea开发android,调试log打印如何可以和eclipse显示一样?

...那个工程对应显示此工程的log信息只需要打开logcat即可。Android开发中,所的有输出都在logcat中包含System.out输出和printStackTrace()输出都在Logcat中,Android开发,建议使用android提供的Log工具类来打印信息。找到Logcat视图的方式:Eclipse点击W... 查看详情

android----log

android.util.Log常用的方法有以下5个:Log.v()Log.d()Log.i()Log.w()以及Log.e()。根据首字母对应VERBOSE,DEBUG,INFO,WARN,ERROR。1、Log.v的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");2、Log.d的... 查看详情

如何“更新”或“覆盖”python 列表

】如何“更新”或“覆盖”python列表【英文标题】:Howto\'update\'or\'overwrite\'apythonlist【发布时间】:2014-10-1403:39:54【问题描述】:aList=[123,\'xyz\',\'zara\',\'abc\']aList.append(2014)printaList产生o/p[123,\'xyz\',\'zara\',\'abc\',2014]应该如何覆盖/更... 查看详情

我的android进阶之旅------>android关于log的一个简单封装

android.util.Log类,能够方便地用于在编码调试过程中打印日志。可是在公布后的产品中,假设有太多的日志打印。则会严重地影响性能。对android.util.Log类做一个简单的封装。当产品要公布的话,将Debug设为false。代码例如以下。pub... 查看详情

如何“保存”列表或如何避免列表被覆盖? [复制]

】如何“保存”列表或如何避免列表被覆盖?[复制]【英文标题】:Howdoi"save"alistorhowcanIavoidthatalistgetsoverwritten?[duplicate]【发布时间】:2014-07-0516:35:51【问题描述】:我有这个代码:defjaja(lista):lista.append(2)returnlistaa=[2,3]b=jaj... 查看详情

如何在 ActiveScaffold 中覆盖表单标题或标题

】如何在ActiveScaffold中覆盖表单标题或标题【英文标题】:HowtoOverrideFormHeadingorTitleinActiveScaffold【发布时间】:2011-01-0314:17:38【问题描述】:有没有一种简单的方法可以覆盖ActiveScaffold页面上的标题?我知道我可以自定义模型部件... 查看详情

如何仅获取一个数据框或如何覆盖数据框?

】如何仅获取一个数据框或如何覆盖数据框?【英文标题】:howcanIgetonlyonedataframeorhowtooverwritethedataframe?【发布时间】:2021-12-1416:59:34【问题描述】:df1=nameagebranchsubjectdateofjoining1Steve27MechanicalAutocad01-08-20212Adam32Electricalcontrolsys14-08... 查看详情

如何覆盖 jQuery 函数或阻止它执行

】如何覆盖jQuery函数或阻止它执行【英文标题】:HowtooverwriteajQueryfunctionorstopitfromexecuting【发布时间】:2013-04-0423:25:00【问题描述】:我有一个jQuery函数,可以将WordPress菜单转换为浮动菜单,然后再返回。我想在主题中创建一个... 查看详情

如何覆盖edgesIgnoringSafeArea(或任何视图修改器)

】如何覆盖edgesIgnoringSafeArea(或任何视图修改器)【英文标题】:HowtooverrideedgesIgnoringSafeArea(oranyViewmodifier)【发布时间】:2020-12-3106:15:59【问题描述】:我正在尝试覆盖edgesIgnoringSafeArea(_:)的功能,因为我在视图中对垂直安全区域... 查看详情

求教,如何抓取androidtracelog

您好,很高兴为您解答。1,安装SDK(参考androidsdk环境安装)2,使用数据线链接手机,在手机助手的sdcard中建立一个1.log的文件3,程序运行cmd4,输入抓取命令:logcat-s'*:E'>/mmt/sdcard/1.log5,使用手机崩溃一次6,查看日志抓... 查看详情

android日志工具log(代码片段)

Android的日志工具类是Log,属于android.util.Log包,这个类提供了5个方法来供我们打印日志。  ●Log.v()。用于打印最为繁琐的,意义最小的日志信息。对应级别为verbose,是Android日志里级别最低的一种。 (顺便来认识一下单词--... 查看详情

如何防止(覆盖或格式化或克隆其他任何内容)我的 NFC TAG?

】如何防止(覆盖或格式化或克隆其他任何内容)我的NFCTAG?【英文标题】:HowcanIprevent(overwritingorformatorcloninganythingelse)myNFCTAG?【发布时间】:2015-08-2616:42:20【问题描述】:首先,对不起我的英语不好。我创建了一个可以读写NFC... 查看详情

如何以颜色查看 Semantic React 的变量或覆盖?

】如何以颜色查看SemanticReact的变量或覆盖?【英文标题】:HowtoseevariablesoroverridesincolorforSemanticReact?【发布时间】:2020-09-2122:12:54【问题描述】:这些变量或覆盖semantic-ui->sites->...“.less”文件中的文件吗?我看到它们都是白... 查看详情