2011-06-19 8 views
0

私のアプリが起動すると、logcatをファイルにリダイレクトしました。 しかし、アプリケーションを再起動すると、リダイレクトコードが再び実行され、その結果、ログの各行が2回書き込まれます。Logcatは一度より多くのファイルにリダイレクトされます

コマンドを実行して、親プロセスが終了したら子プロセスが終了するようにするにはどうすればよいですか?

String.format("logcat -f %s -r %d", filename.getAbsolutePath(), LOG_FILE_SIZE_KB);  
Runtime.getRuntime().exec(cmd); 

どのように私は私のアプリのlogcatは一度だけリダイレクトされていることを確認することができますか? (他のアプリがlogcatを呼び出してそれを自分のファイルにリダイレクトすると、それでも問題はないのでしょうか?)

ありがとう!

+0

なぜファイルにリダイレクトする必要がありますか?いくつかのコードを表示してください。 –

+0

ファイルをサーバーに送信する必要があります。リダイレクトを行うコードを追加しました。どう思いますか? – Adibe7

+0

LogCatは開発環境でデバッグするためのものです。ユーザーデバイス上でアプリケーションがクラッシュし、Market上にある場合、ユーザーはスタックトレースを送信することができます。とにかく、このコードを使用している方法全体を表示できますか? (私は 'onCreate'だと思います)。 –

答えて

-1
/** Redirects the log output to the SDCard. 
* 
* make sure your app has the WRITE_EXTERNAL_STORAGE and READ_LOGS permissions - 
* or it won't allow it to read logs and write them to the sdcard. 
* If the application doesn't have the permissions, there will be no exception 
* and the program will continue regularly. 
*/ 
public static void redirectOutputToFile() 
{ 
    s_enableLogs = true; 

    if (s_logcatProcess != null) 
    { 
     Logger log = new Logger("Logger"); 

     log.info("redirectOutputToFile() called more then once, perhaps from service onCreate and onStart."); 

     return; 
    } 

    try 
    { 
     String path = Environment.getExternalStorageDirectory() + LOG_FILE_NAME; 
     File filename = new File(path); 

     filename.createNewFile(); 

     //http://www.linuxtopia.org/online_books/android/devguide/guide/developing/tools/android_adb_logcatoptions.html 
     String cmd = String.format("logcat -v time -f %s -r %d -n %d", filename.getAbsolutePath(), LOG_FILE_SIZE_KB, LOG_FILE_ROTATIONS);  

     s_logcatProcess = Runtime.getRuntime().exec(cmd); 
    } 
    catch (IOException e) 
    {  
     Logger log = new Logger("Logger"); 
     log.exception(e); 
    } 
} 

/** Kills the logcat process that was created in the redirectOutputToFile() method. */ 
public static void killLogcatProcess() 
{ 
    // first update the log mode state 
    s_enableLogs = false; 

    if (s_logcatProcess != null) 
    { 
     s_logcatProcess.destroy(); 
     s_logcatProcess = null; 
    } 
} 
+0

-1これは恐ろしいコードとひどい答えです:1) 'Environment.getExternalStorageDirectory()+ LOG_FILE_NAME;' 'File'と' String'を受け入れる 'File'コンストラクタを使います。 2)1.5+では 'ProcessBuilder'を使用します。これにより、さらに簡単に処理が進められます。3)[Runtime.exec()が実行されない場合の推奨事項をすべて実装*(http://www.javaworld .com/javaworld/jw-12-2000/jw-1229-traps.html)。 –

1

LogCatをデバッグ目的でのみ使用する場合は、thisとしてください。

LogCatを有効にした後、EclipseでLogCat-Viewを開くと、すべてのLogCat-Outputが表示されるので、最初にファイルに書き込む必要はありません。

+0

私はそれらをサーバーに送信しているので、ファイルが必要です。私はテストのための実際のデバイスを使用したい、logcatが既にファイルにリダイレクトされているかどうかを確認する通常の方法はありませんか? – Adibe7

+0

ハードウェアデバイスを使用する場合は、[こちら](http://developer.android.com/guide/developing/device.html)をお読みください。 –

1

2つのオプション:
a)天気予報Logcatが既にリダイレクトされているかどうかを示す静的グローバル変数を作成します。
b)情報天気LogCatを含むsdcardまたはappディレクトリ(xmlまたはプロパティファイル)にファイルを作成しました。既にリダイレクトされています。

関連する問題