Logcat перенаправляется в файл более одного раза - PullRequest
0 голосов
/ 19 июня 2011

Я перенаправил logcat в файл в моем коде при запуске моего приложения. Но когда мое приложение перезапускается, код перенаправления запускается снова, и в результате каждая строка в журнале записывается дважды.

Как выполнить команду и убедиться, что дочерний процесс умирает после смерти родителя?

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

Как я могу убедиться, что logcat моего приложения перенаправлен только один раз? (Что произойдет, если другое приложение вызовет logcat и перенаправит его в свой собственный файл, проверка все равно будет работать?)

спасибо!

Ответы [ 3 ]

1 голос
/ 19 июня 2011

Два варианта:
a) Создайте статическую глобальную переменную, которая будет содержать информацию о том, был ли Logcat уже перенаправлен или нет.
б) Создайте файл на SD-карте или в каталоге приложения (XML или файл свойств), содержащий информацию о том, что LogCat уже был перенаправлен.

1 голос
/ 19 июня 2011

Если вы используете LogCat только для целей отладки, вы можете прочитать this .

После активации LogCat вы можете открыть LogCat-View в Eclipse, который затем покажет вамвсе LogCat-Output, поэтому вам не нужно сначала записывать его в файл.

0 голосов
/ 20 июля 2011
/** 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;
    }
}
...