在Android中如何将输出写入日志?

160

我希望将一些调试输出写入日志中,以便使用logcat进行查看。

如果我将一些内容写入System.out,则已经在logcat中显示了。

如何干净地写入日志并添加级别和标签到我的输出?

8个回答

222

查看android.util.Log。它允许您使用不同的日志级别写入日志,并且您可以指定不同的标签来分组输出。例如:

Log.w("myApp", "no network");

将输出一个带有标签 myApp 和消息 no network 的警告。


使用 log.d 会有什么不同? - Maduro
6
Log.w(...) 中的 w 代表警告。还有其他版本:d - 调试,e - 错误,i - 信息,v - 冗长,wtf - 大错特错。;-) - patryk.beza

21

这个标签只是用来方便查找你的输出结果,因为LogCat的输出有时会非常长。你可以在类中的某处定义:

private static final String TAG = "myApp";

在调试时使用它:

Log.v(TAG, "做了某事");

输入图片描述

你还可以应用过滤器来仅搜索标记。


17

使用android.util.Log及其定义的静态方法(例如e()w())。


10
import android.util.Log;

然后

Log.i("the your message will go here"); 

7
请按以下方式查看日志:
Log.e("ApiUrl = ", "MyApiUrl") (error)
Log.w("ApiUrl = ", "MyApiUrl") (warning)
Log.i("ApiUrl = ", "MyApiUrl") (information)
Log.d("ApiUrl = ", "MyApiUrl") (debug)
Log.v("ApiUrl = ", "MyApiUrl") (verbose)

1
你可以使用我的名为RDALogger的库。这是Github链接link
使用此库,您可以记录带有方法名称/类名称/行号和锚链接的消息。使用此链接,当您单击日志时,屏幕会跳转到代码的这一行。
要使用库,必须执行以下实现。
在根级gradle中。
allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

在应用级别的gradle中。
dependencies {
            implementation 'com.github.ardakaplan:RDALogger:1.0.0'
    }

对于初始化库,您应该像这样开始(在Application.class或第一次使用之前)

RDALogger.start("TAG NAME").enableLogging(true);

然后你可以记录任何你想要的内容;
    RDALogger.info("info");
    RDALogger.debug("debug");
    RDALogger.verbose("verbose");
    RDALogger.warn("warn");
    RDALogger.error("error");
    RDALogger.error(new Throwable());
    RDALogger.error("error", new Throwable());

最后的输出会展示你所需的所有信息(类名、方法名、锚链接、消息)。
08-09 11:13:06.023 20025-20025/com.ardakaplan.application I/Application: IN CLASS : (ENApplication.java:29)   ///   IN METHOD : onCreate
    info

0

最近我发现了一种在安卓中编写日志的方法,我觉得超级棒。

public static final boolean FORCED_LOGGING = true;
private static final int CALLER_STACK_INDEX = 3;

public static void showLogs(String message) {
        if (FORCED_LOGGING) {
            StackTraceElement caller = Thread.currentThread().getStackTrace()[CALLER_STACK_INDEX];

            String fullClassName = caller.getClassName();
            String className = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);
            String methodName = caller.getMethodName();
            int lineNumber = caller.getLineNumber();

            Log.i("*** " + className + "." + methodName + "():" + lineNumber + "\n" , message);
        }
    }

0
String one = object.getdata();
Log.d(one,"");

2
通常最好的方式是解释一个解决方案,而不仅仅发布几行匿名代码。您可以阅读《如何撰写良好答案》和《解释完全基于代码的答案》。 - Anh Pham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接