24

Android Open Source Project 的代码风格中,它声明我们不应该使用System.out.println(),但我不明白为什么。谁能解释一下?我应该使用什么来跟踪我的应用程序的日志?

这是供参考的行:

System.out.println()(或printf()用于本机代码)永远不应使用。System.out并被System.err重定向到/dev/null,因此您的打印语句将没有可见的效果。但是,为这些调用发生的所有字符串构建仍然会被执行。

4

7 回答 7

35

你应该使用这个android.util.Log类。

以下是Log该类的作用的描述:

用于发送日志输出的 API。

一般情况下,应该使用Log.v(), Log.d(), Log.i(), Log.w(), 和Log.e()方法来写日志。然后您可以在 logcat 中查看日志

详细程度从少到多的顺序是 ERROR、WARN、INFO、DEBUG、VERBOSE。除非在开发期间,否则永远不应将详细信息编译到应用程序中。调试日志被编译,但在运行时被剥离。始终保留错误、警告和信息日志。

这些是Log该类的可用方法:

  1. Log.d()- 发送DEBUG日志消息。
  2. Log.e()- 发送ERROR日志消息。
  3. Log.i()- 发送INFO日志消息。
  4. Log.v()- 发送VERBOSE日志消息。
  5. Log.w()- 发送WARN日志消息。
  6. Log.wtf()- 多么可怕的失败:报告不应该发生的异常。

上述方法(具有 3 种可能Log.wLog.wtf参数模式除外)需要以下参数:

  1. String tag, String msg

    tag:用于标识日志消息的来源。这个值可能是null

    msg:您想要记录的消息。这个值可能是null

  2. String tag, String msg, Throwable tr- 类似于第一个模式,但允许指定异常。如果要将异常记录到日志输出中,则应使用此模式。

  3. (For Log.wand Log.wtf)String tag, Throwable tr类似于第三种模式,但不允许指定消息。请注意,您仍然可以传递消息,但它应该在第二个参数排列中。


编辑:直接回答您的问题:println()ofSystem.out并且System.err仍将显示在 logcat 中,但有限制。

  • 您不能记录VERBOSE,ERRORDEBUG使用System.outSystem.err
  • 您不能定义自己的标签,它会显示System.errSystem.out与您的文本一起显示。例如:

    • System.out.println("Hello!")相当于Log.i("System.out","Hello!")
    • System.err.println("Hello!")相当于Log.w("System.err","Hello!")
于 2013-08-23T03:05:54.237 回答
3

System.out.println("")在 android 中将无法正常运行,因为没有将应用程序更正到的终端。

最好使用Log.(d)(v)(e)(i)(w),因为有一些东西在主动监控 LogCat。

System.out.println()将打印到 LogCat,但仅在一组额外的系统指令之后,使其效率不高,但是,正如我所说,它仍然有效。

于 2013-08-23T02:53:31.137 回答
2

如果我们想跟踪 android 项目
,我们可以使用 Log 类来实现,
例如
Log.e(TAG,MESSAGE)
Log.v(TAG,MESSAGE)
Log.w(TAG,MESSAGE)
Log.d(TAG, MESSAGE)
Log.i(TAG,MESSAGE)
它是 Utils 包的一个静态方法。逐行放置,您可以在 LogCat 中观看它。
这就是在 android 上的享受

于 2014-02-09T12:20:37.820 回答
1

从您自己的链接:

System.out.println() (或本机代码的 printf() )不应该被使用。System.out 和 System.err 被重定向到 /dev/null,因此您的打印语句将没有可见的效果。但是,为这些调用发生的所有字符串构建仍然会执行。

此外,在该页面的开头,它说:

以下规则不是指南或建议,而是严格的规则。如果不遵守这些规则,通常不会接受对 Android 的贡献。

所以要这样做!

于 2013-08-23T02:54:50.663 回答
1

日志是跟踪我们的 android 项目的最佳方式,
如以下代码......
它将帮助你......
只需在 DDMS logCat 中查看项目的构建方式......
要求...... android.utils.Log; 使用包..

@Override 
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i=0;i {
Log.e("i = ",""+i);
Log.v("i = ",""+i);
Log.i("i = ",""+i);
Log.w("i = ",""+i);
Log.d("i = ",""+i);
}
}

我希望它会帮助你

于 2014-01-21T09:43:12.633 回答
1

您可以使用内置的Log 实用程序,该实用程序将直接打印到 LogCat。

您可以使用Log.e(String, String)以红色显示的错误。还有v, d, i, 和w分别表示详细、调试、信息和警告。

于 2013-08-23T02:56:43.203 回答
1

以下应该可以打印异常

1. Log.d("myapp", Log.getStackTraceString(new Exception()));

或者

2.通过深入挖掘可以获得更长的堆栈跟踪。例如:

Log.getStackTraceString(e.getCause().getCause());

于 2013-08-23T03:12:20.600 回答