Ich versuche, Protokolle mit diesem Code von mir in eine benutzerdefinierte Log.txt-Datei auf einer Android-Datei zu schreiben, aber dann erstellt diese Methode eine Datei, enthält aber nichts. Grundsätzlich möchte ich den vorherigen Inhalt der Datei lesen und dann meine Daten an den vorhandenen Inhalt anhängen.
Der Kodex lautet wie folgt:
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();
}
}
buf.close()
sich in einemfinally
Block befindet.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
war das, was @ virusss8 natürlich bedeutete.Für diejenigen, die noch keine Erfahrung mit Java-Protokollierung im Allgemeinen und Android-Protokollierung haben
Einige Optionen für die Protokollierung bei txt in Android sind unten aufgeführt
logcat -f
wie in dieser Antwort, um sich in einer Datei anzumelden. Beachten Sie, dass die READ_LOGS-Berechtigung ab Android 4.2 keine Auswirkungen hat und jede Anwendung (sofern das Telefon nicht gerootet ist) nur ihre eigenen Protokolle lesen konnte. Der Nachteil hierbei ist, dass der Logcat-Puffer kreisförmig ist und eine Größenbeschränkung aufweist. Möglicherweise erhalten Sie keine früheren Protokolle.Verwenden Sie Log4j mit android-logging-log4j . Was macht android-logging-log4j? Es erleichtert die Verwendung von Log4j in Android, indem es zwei Funktionen bietet.
Einfaches Beispiel unten. Beachten Sie, dass das
logger
Objekt im folgenden Beispiel ein zurückgegebenes Log4j-Objekt und keine android-logging-log4j-Klasse ist. Daher wird android-logging-log4j nur zum Konfigurieren von Log4j verwendet.Schritte zur Verwendung von Log4j in Android.
Fügen Sie dem Ordner libs sowohl log4j-1.2.x.jar als auch android-logging-log4j-1.0.3.jar hinzu.
Fügen Sie Berechtigungen nur hinzu, wenn Sie externen Speicher verwenden
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Schreibe eine
Log4j
HilfsklasseIn der Aktivitätsklasse
Beispielquelle . Beachten Sie, dass log4j 2.x (verbesserte Funktionen), das von Grund auf neu geschrieben wurde, mit log4j 1.x nicht abwärtskompatibel ist. Sie müssen also log4j 1.2.x jar mit android-logging-log4j jar verwenden. Ich konnte mich in der anwendungsinternen Datei anmelden und die Datei später per E-Mail senden
setReadable(true, false)
quelle
microlog4android funktioniert bei mir, aber die Dokumentation ist ziemlich schlecht. Alles, was sie hinzufügen müssen, ist ein Schnellstart- Tutorial .
Hier ist ein kurzes Tutorial, das ich gefunden habe.
Fügen Sie Ihrer Hauptaktivität die folgende statische Variable hinzu:
Fügen Sie Ihrer
onCreate()
Methode Folgendes hinzu :Erstellen Sie eine Datei mit dem Namen
microlog.properties
und speichern Sie sie imassets
VerzeichnisBearbeiten Sie die
microlog.properties
Datei wie folgt:Fügen Sie folgende Protokollierungsanweisungen hinzu:
Für jede Klasse erstellen Sie ein Logger-Objekt wie in 1) angegeben.
6.Sie können die folgende Berechtigung hinzufügen:
Hier ist die Quelle für das Tutorial
quelle
Warnung: Ich verstehe Sie vielleicht völlig falsch, aber wenn Sie nur eine Protokolldatei wollen, warum dann schwitzen?
Fügen Sie dies in eine Bat-Datei ein (ändern Sie den Pfad zu Ihrem Tools-Verzeichnis, und Ihr App-Name ist natürlich der Name Ihrer App):
Dann machen Sie in Ihrem Code einfach etwas Ähnliches:
Um das Protokoll zu erstellen, schließen Sie das USB-Kabel an und führen Sie Ihre Bat-Datei aus.
Grüße
quelle
Verwenden Sie slf4android lib.
Es ist eine einfache Implementierung der slf4j-API mit android java.util.logging. *.
Eigenschaften:
LoggerConfiguration.configuration().addHandlerToLogger
slf4android wird hauptsächlich von @miensol gepflegt .
Lesen Sie mehr über slf4android in unserem Blog:
quelle
Sie sollten einen Blick auf microlog4android werfen. Sie haben eine Lösung bereit, um sich in einer Datei anzumelden.
http://code.google.com/p/microlog4android/
quelle
Dies kann spät sein, aber ich hoffe, dies kann helfen. Versuchen Sie dies ...
Hier
bfwritter.newline
schreibt Ihr Text in die Datei. Und fügen Sie die Erlaubnis hinzuin Ihrer Manifest-Datei ohne Fehler.
quelle
Ich habe dieses Problem mit folgendem Code in der Befehlszeile gelöst:
Wobei die Option "Uhrzeit" Metadatenfelddetails für Datum, Aufrufzeit, Priorität / Tag und PID des Prozesses, der die Nachricht ausgibt, hinzufügt.
Dann machen Sie in Ihrem Code einfach etwas Ähnliches (mit android.util.Log):
quelle
adb
eine Verbindung besteht, funktioniert jedoch nicht, wenn sich das Gerät im Standalone-Modus befindet. Ich würde es nicht in der Produktion verwenden, aber es ist eine einfache Lösung im Debug-Modus.Im Allgemeinen müssen Sie über ein Dateihandle verfügen, bevor Sie den Stream öffnen. Sie haben ein fileOutputStream-Handle vor createNewFile () im else-Block. Der Stream erstellt die Datei nicht, wenn sie nicht vorhanden ist.
Nicht wirklich androidspezifisch, aber das ist viel IO für diesen Zweck. Was ist, wenn Sie viele "Schreib" -Operationen nacheinander ausführen? Sie lesen den gesamten Inhalt und schreiben den gesamten Inhalt, nehmen sich Zeit und vor allem die Akkulaufzeit.
Ich schlage vor, java.io.RandomAccessFile zu verwenden, bis zum Ende zu suchen () und dann zum Anhängen writeChars () zu schreiben. Es wird viel sauberer Code sein und wahrscheinlich viel schneller.
quelle
Ich habe eine einfache, leichtgewichtige Klasse (ca. 260 LoC) erstellt, die die Standardimplementierung von android.util.Log um dateibasierte Protokollierung erweitert:
Jede Protokollnachricht wird über android.util.Log protokolliert und auch in eine Textdatei auf dem Gerät geschrieben.
Sie finden es auf github:
https://github.com/volkerv/FileLog
quelle
Nach langer Zeit der Untersuchung stellte ich fest, dass:
android.util.Log
Standardmäßig verwendenjava.util.logging.Logger
logger
mit name""
, um die Instanz davon zu verwendenLogManager.getLogManager().getLogger("")
logger
Instanzcom.android.internal.logging.AndroidHandler
nach dem Ausführen von Debug-Appscom.android.internal.logging.AndroidHandler
druckt Nachrichten nur mit höheren Ebenenjava.util.logging.Level.INFO
als (Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF
) an logcatUm also Protokolle in eine Datei zu schreiben,
rootLogger
""
fügen Sie einfach Folgendes hinzujava.util.logging.FileHandler
:Um alle Logger in Ihrer App zu drucken, verwenden Sie:
quelle
Diese Variante ist viel kürzer
quelle
Sie können die Bibliothek verwenden, die ich geschrieben habe. Es ist sehr einfach zu bedienen:
Fügen Sie diese Abhängigkeit Ihrer Gradle-Datei hinzu:
Initialisieren Sie die Bibliothek in der Application-Klasse:
So verwenden Sie die Bibliothek:
Und so rufen Sie die Protokolle ab:
Hier ist der Link zur Github-Seite mit weiteren Informationen: https://github.com/danylovolokh/AndroidLogger
Ich hoffe es hilft.
quelle
Viele der vorherigen Versionen von log4j funktionieren jetzt nicht (05/2019). Aber Sie können Hyperlog verwenden - ich kann bestätigen, dass es funktioniert.
Fügen Sie diese Zeile Ihrem Abhängigkeits- und Synchronisierungsprojekt hinzu
Erstellen Sie eine neue Anwendungsklasse (erstellen Sie eine neue Java-Klasse und erweitern Sie die Anwendung). Fügen Sie dann in der onCreate-Methode die folgenden Zeilen hinzu:
Ändern Sie die Manifestdatei so, dass die Anwendungsdatei definiert ist.
Verschiedene Arten der Protokollierung:
Finden Sie Ihre Protokolldateien. Navigieren Sie zu
quelle