Как распечатать трассировку стека для исключения Android во внешнем файле?

Я хочу распечатать стек (после ошибки в блоке исключений, try catch), но я хочу распечатать все во внешнем файле (.txt), файле, который я могу взять где-нибудь в папках Android.

заранее спасибо


person Umberto Di Canito    schedule 08.05.2017    source источник
comment
Рекомендуется: используйте библиотеку регистратора (например, SL4FJ). В качестве альтернативы вы можете записать трассировку стека в файл самостоятельно, как и любую другую строку.   -  person m0skit0    schedule 08.05.2017
comment
Что не так с логкатом?   -  person PM 77-1    schedule 08.05.2017
comment
Кроме того, возможно, посмотрите на этот ответ   -  person manman    schedule 08.05.2017


Ответы (4)


Откройте/объявите PrintWriter для записи в ваш файл и измените блок catch на:

catch(Exception e) {
    e.printStackTrace(your_print_writer);
}
person Deepesh Choudhary    schedule 08.05.2017

Ну, это может быть проблемой, но это вполне выполнимо:

try {
    badMethod();
} catch(SomeException e) {
    try (FileWriter writer = new FileWriter("file.txt")) {
        e.printStackTrace(writer);
    } catch(IOException ioexception) {
        // do something here
    }
}
person Rafael Guerreiro    schedule 08.05.2017

Есть много способов сделать это, но, возможно, самый простой — перенаправить System.err в нужный файл, а затем просто вызвать Exception.printStackTrace();

Чтобы перенаправить стандартный вывод ошибок:

PrintStream ps = new PrintStream("./errors.txt");
System.setErr(ps);

а потом...

catch(Exception e) {
    e.printStackTrace();
}
person LuisGP    schedule 08.05.2017
comment
Вы можете указать любой путь к файлу. В этом случае файл будет находиться в текущем каталоге, обычно это тот, из которого запущено ваше приложение. Его можно посмотреть в любом текстовом редакторе. В Android я использую пакет ES File Explorer. - person LuisGP; 08.05.2017
comment
Я решил ваш вопрос? Если да, то считайте ответом пометку. - person LuisGP; 19.05.2017

Вы можете сделать это следующим образом:

try{
    // action
} catch (IOException e) {
    PrintWriter writer = new PrintWriter("stacktrace.txt");
    e.printStackTrace(writer);
    writer.close();
}
person Omar Aflak    schedule 08.05.2017
comment
хорошо, и как я могу взять файл stacktrace.txt (чтобы увидеть его)? - person Umberto Di Canito; 08.05.2017
comment
@UmbertoDiCanito Файловый менеджер? - person m0skit0; 08.05.2017