From 0f2865d822c31a6fedd13ad13385626108b4342e Mon Sep 17 00:00:00 2001 From: William Ferguson Date: Tue, 2 Jun 2015 20:54:31 +1000 Subject: [PATCH] Handling poorly configured application log file. --- .../org/acra/collector/LogFileCollector.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/acra/collector/LogFileCollector.java b/src/main/java/org/acra/collector/LogFileCollector.java index c3311365c..ca9679e41 100644 --- a/src/main/java/org/acra/collector/LogFileCollector.java +++ b/src/main/java/org/acra/collector/LogFileCollector.java @@ -17,15 +17,20 @@ package org.acra.collector; import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; +import org.acra.ACRA; import org.acra.util.BoundedLinkedList; import android.app.Application; import android.content.Context; +import static org.acra.ACRA.LOG_TAG; + /** * Collects the N last lines of a text stream. Use this collector if your * application handles its own logging system. @@ -54,12 +59,7 @@ private LogFileCollector() { */ public static String collectLogFile(Context context, String fileName, int numberOfLines) throws IOException { final BoundedLinkedList resultBuffer = new BoundedLinkedList(numberOfLines); - final BufferedReader reader; - if (fileName.contains("/")) { - reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)), 1024); - } else { - reader = new BufferedReader(new InputStreamReader(context.openFileInput(fileName)), 1024); - } + final BufferedReader reader = getReader(context, fileName); try { String line = reader.readLine(); while (line != null) { @@ -71,4 +71,17 @@ public static String collectLogFile(Context context, String fileName, int number } return resultBuffer.toString(); } + + private static BufferedReader getReader(Context context, String fileName) { + try { + if (fileName.contains("/")) { + return new BufferedReader(new InputStreamReader(new FileInputStream(fileName)), 1024); + } else { + return new BufferedReader(new InputStreamReader(context.openFileInput(fileName)), 1024); + } + } catch (FileNotFoundException e) { + ACRA.log.e(LOG_TAG, "Cannot find application log file : '" + ACRA.getConfig().applicationLogFile() + "'"); + return new BufferedReader(new InputStreamReader(new ByteArrayInputStream(new byte[0]))); + } + } }