【问题标题】:How to store Android Log entry as a string如何将 Android 日志条目存储为字符串
【发布时间】:2019-01-09 20:02:31
【问题描述】:

我似乎找不到关于此的答案或问题:

如何将 Android 日志条目存储到字符串中:

Log.i(TAG, "onCreate: start: ");

String s = /* get last Log entry */.toString();

这样做的原因是我可以拥有进程 ID 和线程 ID。当我尝试手动存储进程和线程 ID 时,线程 ID 与 Logcat 中打印的不同:

Log.i(TAG, "#checkWifiConnection: start");
String s = Integer.toString(android.os.Process.myPid()) + " " + Integer.toString(android.os.Process.getThreadPriority(android.os.Process.myTid())) + " " + TAG;
System.out.println(s + "#checkWifiConnection: start");

Logcat 显示:

01-09 18:38:02.994 1558-2021 I/*~FETCH DATA: #checkWifiConnection: start

System.out 显示:

I/System.out: 1558 10 *~FETCH DATA#checkWifiConnection: start

【问题讨论】:

  • 我不认为 Log 类应该作为缓存系统来做你想做的事。您可以通过其他方式保存所需的任何内容。
  • 你可以像adb shell logcat这样使用adb读取android日志,但它是一个输出firehose。你想完成什么?

标签: android logcat android-log


【解决方案1】:

如何将 Android 日志条目存储到字符串中

你不能这样做。

来自Log documentation

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

它们仅适用于debug 部分中的Logcat,因此我建议您寻找另一种方式来存储您的愿望。

例如,您可以创建一个类,该类存储您拥有的所有 Log,然后将其存储在您想要的任何位置。

我已经知道如何将一些信息存储到一个单独的类中,但我想要 Log.toString 的原因是为了时间戳、进程 ID 和线程 ID

然后为这个特定的类创建更多属性,并在需要时传递它们。

要存储Process id 使用

int pid = android.os.Process.myPid();

要存储Thread id 使用

int tid = android.os.Process.getThreadPriority(android.os.Process.myTid());

要存储时间戳使用

SimpleDateFormat s = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String format = s.format(new Date());

【讨论】:

  • 我已经知道如何将一些信息存储到单独的类中,但我想要 Log.toString 的原因是时间戳、进程 ID 和线程 ID
  • 然后创建一个具有这些参数的类并发送它
  • 这不会报告正确的线程 ID。至少和logcat不一样。
  • 我已经测试过了,它是同一个数字,你能提供你的代码看看为什么不一样吗?
  • 你可以试试这个Process.myTid()吗?
【解决方案2】:

我认为这样做是不可能的,但是您可以创建自己的对象来处理日志调用并将字符串实例变量设置为最后一条消息。然后您可以从对象中检索此字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多