4

アプリケーションのログを外部ファイルに書き込もうとしています。私のログは Log.e("Offset",""+mOffset); のようなものです。私は次のコードを使用しています:

public String writeLogToFile()
{
    try 
        {
            Process process = Runtime.getRuntime().exec("logcat -d");
            BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()));
            StringBuilder log=new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) 
                {
                    log.append(line);
                }
            bufferedReader.close();
            return log.toString();
        } 
    catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
}

システムレベルのすべてのログも出力します。はい、-d を入れているので印刷されますが、-e または -i を入れてもファイルは書き込まれません。と書きたいだけですLog.e("Offset",""+mOffset)。私はどこで間違っていますか?

4

1 に答える 1

1

現在のアプリケーションのログを読み取る方法は次のとおりです。ログをフィルタリングするには、プロセス ID (pid) を取得し、それを logcat 出力のすべての行と比較します。

logcat への引数で、最後の 200 行を読み取り、時間とともにログを表示するように指定しました。

public String writeLogToFile() {
    StringBuilder logs = new StringBuilder();
    int pid = android.os.Process.myPid();
    String pidPattern = String.format("%d):", pid);
    try {
        Process process = new ProcessBuilder()
                .command("logcat", "-t", "200", "-v", "time")
                .redirectErrorStream(true)
                .start();

        InputStream in = null;

        try {
            in = process.getInputStream();

            BufferedReader reader = new BufferedReader(new InputStreamReader(in));

            String line;
            while ((line = reader.readLine()) != null) {
                if (line.contains(pidPattern)) {
                    logs.append(line).append("\n");
                }
            }
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    Log.e(TAG, "Cannot close input stream", e);
                }
            }
        }
    } catch (IOException e) {
        Log.e(TAG, "Cannot read logs", e);
    }

    return log.toString();
}
于 2013-01-01T16:51:32.483 に答える