Android записи логов в текстовый файл - PullRequest
118 голосов
/ 18 ноября 2009

Я пытаюсь записать логи в пользовательский файл Log.txt на Android-файле, используя этот код шахты, но затем этот метод создает файл, но ничего не содержит. В основном я хочу прочитать предыдущее содержимое файла, а затем добавить свои данные к существующему содержимому.

Код выглядит следующим образом:

public static void write(String str) 
    {
        InputStream fileInputStream = null;
        FileOutputStream fileOutpurStream = null;
        try
        { 
            fileInputStream = new FileInputStream(file);
            fileOutpurStream = new FileOutputStream(file);
            if(file.exists())
            {
                int ch = 0;
                int current = 0;
                StringBuffer buffer = new StringBuffer();
                while((ch = fileInputStream.read()) != -1)
                {
                    buffer.append((char) ch);
                    current++;
                }
                byte data[]=new byte[(int)file.length()];
                fileInputStream.read(data);   
                fileOutpurStream.write(data);
                fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
                fileOutpurStream.flush();
            } 
            else
            {   
                file.createNewFile();
                fileOutpurStream.write(str.getBytes(),0,str.getBytes().length);
                fileOutpurStream.flush();
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                fileInputStream.close();
                fileOutpurStream.flush();
                fileOutpurStream.close();
                fileOutpurStream = null;
                fileInputStream = null;
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

Ответы [ 13 ]

1 голос
/ 03 августа 2015

Этот вариант намного короче

try {
    final File path = new File(
            Environment.getExternalStorageDirectory(), "DBO_logs5");
    if (!path.exists()) {
        path.mkdir();
    }
    Runtime.getRuntime().exec(
            "logcat  -d -f " + path + File.separator
                    + "dbo_logcat"
                    + ".txt");
} catch (IOException e) {
    e.printStackTrace();
}
0 голосов
/ 19 мая 2019

Многие из предыдущих версий log4j не работают (05/2019). Но вы можете использовать Hyperlog - я могу подтвердить, что он работает.

  1. Добавьте эту строку в ваш проект зависимостей и синхронизации

    implementation 'com.hypertrack:hyperlog:0.0.10'
    
  2. Создать новый класс приложения (создать новый класс Java и расширить приложение). Затем в методе onCreate добавьте следующие строки:

    HyperLog.initialize(this);
    HyperLog.setLogLevel(Log.VERBOSE);
    
    HyperLog.getDeviceLogsInFile(this);
    
  3. Измените файл манифеста, чтобы определить файл приложения.

    <application
        android:name=".AppClass"
        .....
    
  4. Различные способы входа:

    HyperLog.d(TAG,"debug");
    HyperLog.i(TAG,"information");
    HyperLog.e(TAG,"error");
    HyperLog.v(TAG,"verbose");
    HyperLog.w(TAG,"warning");
    HyperLog.a(TAG,"assert");
    HyperLog.exception(TAG,"exception",throwable);
    
  5. Найдите ваши файлы журнала. Перейдите к

    RootFolder/android/data/"appPackageName/LogFiles/
    
0 голосов
/ 16 февраля 2018

Вы можете использовать библиотеку, которую я написал. Это очень легко использовать:

Добавьте эту зависимость в ваш файл Gradle:

dependencies {
    compile 'com.github.danylovolokh:android-logger:1.0.2'
}

Инициализация библиотеки в классе приложения:

File logsDirectory = AndroidLogger.getDefaultLogFilesDirectory(this);
    int logFileMaxSizeBytes = 2 * 1024 * 1024; // 2Mb
    try {
        AndroidLogger.initialize(
                this,
                logsDirectory,
                "Log_File_Name",
                logFileMaxSizeBytes,
                false
                );
    } catch (IOException e) {
        // Some error happened - most likely there is no free space on the system
    }

Вот как вы используете библиотеку:

AndroidLogger.v("TAG", "Verbose Message");

А вот как получить журналы:

AndroidLogger.processPendingLogsStopAndGetLogFiles(new AndroidLogger.GetFilesCallback() {
        @Override
        public void onFiles(File[] logFiles) {
            // get everything you need from these files
            try {
                AndroidLogger.reinitAndroidLogger();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

Вот ссылка на страницу github с дополнительной информацией: https://github.com/danylovolokh/AndroidLogger

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...