Android пишет логи в файл - PullRequest
5 голосов
/ 09 декабря 2011

По умолчанию, класс Log в Android записывает журналы в консоль (logcat).Есть ли простой способ записи логов, например, в какой-нибудь файл?

Ответы [ 4 ]

4 голосов
/ 26 ноября 2014

Простой Log класс (только для целей разработки / тестирования) похож на android.util.Log, но регистрирует на SDCard. Только изменение существующего кода будет означать изменение import android.util.Log на import com.example.Log. Также добавьте разрешение как

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

package com.example.logger;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;  

import android.os.Environment;

public class Log {
    private static final String NEW_LINE =  System.getProperty("line.separator") ; 
    public static boolean mLogcatAppender = true;
    final static File mLogFile;

    static {
        mLogFile = new File( Environment.getExternalStorageDirectory(),  "logs.log" ); 
        if ( !mLogFile.exists() ) {
            try {
                mLogFile.createNewFile();
            }
            catch (final IOException e) {
                e.printStackTrace();
            }
        }
        logDeviceInfo();
    }

    public static void i( String TAG, String message ){
        appendLog( TAG + " : " + message );
        if ( mLogcatAppender ) {
            android.util.Log.i( TAG, message );
        }
    }

    public static void d( String TAG, String message ){
        appendLog( TAG + " : " + message );
        if ( mLogcatAppender ) {
            android.util.Log.d( TAG, message );
        }
    }

    public static void e( String TAG, String message ){
        appendLog( TAG + " : " + message );
        if ( mLogcatAppender ) {
            android.util.Log.e( TAG, message );
        }
    }

    public static void v(String TAG, String message ){
        appendLog(TAG + " : " + message);
        if ( mLogcatAppender ) {
            android.util.Log.v( TAG, message );
        }
    }

    public static void w( String TAG, String message ) {
        appendLog( TAG + " : " + message );
        if ( mLogcatAppender ) {
            android.util.Log.w( TAG, message ); 
        }
    }

    private static synchronized void appendLog( String text ) {
        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

        try {
            final FileWriter fileOut = new FileWriter( mLogFile, true );
            fileOut.append( sdf.format(new Date()) + " : " + text + NEW_LINE ); 
            fileOut.close();
        }
        catch ( final IOException e ) {
            e.printStackTrace();
        }
    }

    private static void logDeviceInfo() {
        appendLog("Model : " + android.os.Build.MODEL);
        appendLog("Brand : " + android.os.Build.BRAND);
        appendLog("Product : " + android.os.Build.PRODUCT);
        appendLog("Device : " + android.os.Build.DEVICE);
        appendLog("Codename : " + android.os.Build.VERSION.CODENAME);
        appendLog("Release : " + android.os.Build.VERSION.RELEASE);
    }

}
1 голос
/ 09 декабря 2011

Если это только для целей разработки, вы можете вызвать logcat на устройстве и перенаправить его вывод в файл. Например: adb shell logcat > log.txt.

В качестве альтернативы, вы можете попробовать перенаправить stdout и stderr в файл, но это будет работать, но у меня нет телефона, чтобы проверить его.

Однако было бы проще создать собственный базовый класс ведения журналов, который выполняет те же функции, что и встроенный, но также сохраняет в файл.

0 голосов
/ 08 мая 2012

В Eclipse ddms есть возможность сохранять логи в файл.

0 голосов
/ 09 декабря 2011

Перенаправить все сообщения об ошибках в файл, используя FileInputStream

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