2013-10-02 45 views
1

我正在使用Android的日志来监督应用程序的使用,所以我将logcat放入手机中,而不是在Eclipse中。那么,如果我只是在日志中写入信息并向我发送信息,那么一切都可以,但是我从以前的执行中收到信息。 我决定每次启动应用程序时清除日志,但现在通常会丢失第一条日志消息。也许logcat需要一些时间才能清除?因为当我尝试去调试所有的东西都没关系。清除logcat(Android)的问题

实施例:

清除日志,消息1,消息2,消息3,...

有时候我不接收消息1,有时没有收到1和2 ...

我检查了我所有的代码可能意外清零,但我没有发现任何东西......

我调用此函数开头(中的onCreate())

public static void clearLog(){ 
      ArrayList<String> commandLine = new ArrayList<String>(); 
      commandLine.add("logcat"); 
      commandLine.add("-c");//CLEAR 

      Runtime process = Runtime.getRuntime(); 
      process.exec(commandLine.toArray(new String[0])); 

      TAG = ""; 
} 

然后,添加日志

log.i(TAG, "message1"); 
.. 
log.i(TAG, "messageN"); 

而且这是我收集日志:

ArrayList<String> commandLine = new ArrayList<String>(); 
commandLine.add("logcat"); 
commandLine.add("-d");//dump and exit 
commandLine.add("-v");//especify verbose mode 
commandLine.add("raw");//raw show only the message, brief for show all 
commandLine.add(TAG + ":V");//show TAG's log 
commandLine.add("*:S");//hide others 

Process process = Runtime.getRuntime().exec(
     commandLine.toArray(new String[0])); 
BufferedReader bufferedReader = new BufferedReader(
     new InputStreamReader(process.getInputStream())); 

String line, log = ""; 
while ((line = bufferedReader.readLine()) != null) { 
    log += line + LINE_SEPARATOR; 
} 
+0

你把你的“清除日志”代码放在哪里?添加一些代码来完成问题。 –

+0

新增我如何清除它,写下并收集,对不起。 – adalPaRi

回答

1

the docsexec()

执行指定的命令和它的论点在独立的本地进程。

因此,它在一个单独的过程中运行。在开始记录之前,没有真正的方法可以判断它是否已完成。

而不是清除日志,您可以更改每次运行的日志TAG。只需使用常规标签附加一个标识运行的数字,即使只是一个随机数字。然后,当你收集你的日志时,你可以按照过滤条件进行过滤,只收集你想要的。

+0

也许你可以通过进程ID筛选?不确定那一个。希望你能解决它。 – Geobits

+0

最后,我使用了一个随机标签,并将我需要的标签添加到消息中。进程id总是相同,因为有时候应用程序根本没有被销毁,所以不起作用。谢谢! – adalPaRi