Próbuję zapisywać dzienniki w niestandardowym pliku Log.txt w pliku systemu Android przy użyciu tego mojego kodu, ale ta metoda tworzy plik, ale nic nie zawiera. Zasadniczo chcę przeczytać poprzednią zawartość pliku, a następnie dołączyć moje dane do istniejącej zawartości.
Kodeks wygląda następująco:
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()
wewnątrzfinally
bloku.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
było oczywiście tym, co oznaczało @ virusss8.Dla tych, którzy są nowicjuszami w logowaniu w Javie i rejestrowaniu w systemie Android
Poniżej przedstawiono niektóre opcje logowania do txt w systemie Android
logcat -f
jak w tej odpowiedzi, aby zalogować się do pliku. Zauważ, że od Androida 4.2 uprawnienie READ_LOGS nie ma żadnego wpływu i każda aplikacja (chyba że telefon jest zrootowana) może odczytywać tylko własne dzienniki. Wadą jest to, że bufor logcat jest cykliczny i ma limit rozmiaru. Możesz nie otrzymać wcześniejszych dzienników.Użyj Log4j z android-logging-log4j . Co robi android-logging-log4j? Ułatwia korzystanie z Log4j w systemie Android, zapewniając dwie funkcje.
Prosty przykład poniżej. Zauważ, że
logger
obiekt w poniższym przykładzie jest zwrócony obiektem Log4j, a nie klasą android-logging-log4j. Dlatego android-logging-log4j jest używany tylko do konfigurowania Log4j.Kroki korzystania z Log4j w systemie Android.
Dodaj zarówno log4j-1.2.x.jar, jak i android-logging-log4j-1.0.3.jar do folderu libs.
Dodawaj uprawnienia tylko w przypadku korzystania z pamięci zewnętrznej
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Napisz
Log4j
klasę pomocnicząW klasie Activity
Przykładowe źródło . Zauważ, że log4j 2.x (ulepszone funkcje) przepisane od nowa nie jest wstecznie kompatybilne z log4j 1.x. Więc musisz użyć log4j 1.2.x jar z android-logging-log4j jar. Udało mi się zalogować do wewnętrznego pliku aplikacji, a później wysłać go e-mailem
setReadable(true, false)
źródło
microlog4android działa dla mnie, ale dokumentacja jest dość uboga. Wszystko, co muszą dodać, to samouczek szybkiego startu .
Oto krótki samouczek, który znalazłem.
Dodaj następującą zmienną statyczną do swojej głównej aktywności:
Dodaj następujące elementy do swojej
onCreate()
metody:Utwórz plik o nazwie
microlog.properties
i zapisz go wassets
kataloguEdytuj
microlog.properties
plik w następujący sposób:Dodaj takie instrukcje logowania:
Dla każdej klasy tworzysz obiekt rejestrujący, jak określono w 1)
6. Możesz dodać następujące uprawnienia:
Oto źródło samouczka
źródło
Ostrzeżenie: Mogę cię całkowicie nie rozumieć, ale jeśli chcesz tylko pliku dziennika, po co się przejmować?
Umieść to w pliku bat (zmień ścieżkę do katalogu narzędzi, a twoja nazwa aplikacji to oczywiście nazwa twojej aplikacji):
Następnie w swoim kodzie zrób coś podobnego do tego:
Aby utworzyć dziennik, podłącz kabel USB i uruchom plik bat.
pozdrowienia
źródło
Użyj slf4android lib.
Jest to prosta implementacja interfejsu API slf4j przy użyciu java.util.logging systemu Android. *.
Cechy:
LoggerConfiguration.configuration().addHandlerToLogger
slf4android jest utrzymywany głównie przez @miensol .
Przeczytaj więcej o slf4android na naszym blogu:
źródło
Powinieneś rzucić okiem na microlog4android. Mają rozwiązanie gotowe do zalogowania się do pliku.
http://code.google.com/p/microlog4android/
źródło
To może być późno, ale mam nadzieję, że to pomoże. Spróbuj tego ....
tutaj
bfwritter.newline
zapisuje twój tekst do pliku. I dodaj pozwoleniew pliku manifestu bezbłędnie.
źródło
Rozwiązałem ten problem za pomocą następującego fragmentu kodu w linii poleceń:
Gdzie opcja „czas” dodaje szczegóły pola metadanych dla daty, czasu wywołania, priorytetu / tagu i PID procesu wysyłającego komunikat.
Następnie w swoim kodzie zrób coś podobnego do tego (używając android.util.Log):
źródło
adb
jest podłączony, ale nie działa, gdy urządzenie jest w trybie autonomicznym. Nie użyłbym go w produkcji, ale jest to proste rozwiązanie w trybie debugowania.Ogólnie rzecz biorąc, musisz mieć uchwyt pliku przed otwarciem strumienia. Masz uchwyt fileOutputStream przed createNewFile () w bloku else. Strumień nie tworzy pliku, jeśli nie istnieje.
Niezbyt specyficzne dla Androida, ale to dużo IO w tym celu. Co się stanie, jeśli wykonasz wiele operacji „zapisywania” jedna po drugiej? Będziesz czytać całą zawartość i pisać całą zawartość, zajmując trochę czasu, a co ważniejsze, żywotność baterii.
Sugeruję użycie java.io.RandomAccessFile, szukanie () 'do końca, a następnie writeChars (), aby dołączyć. Będzie to znacznie czystszy kod i prawdopodobnie znacznie szybszy.
źródło
Stworzyłem prostą, lekką klasę (około 260 LoC), która rozszerza standardową implementację android.util.Log z logowaniem opartym na plikach:
Każda wiadomość dziennika jest rejestrowana przez android.util.Log, a także zapisywana w pliku tekstowym na urządzeniu.
Możesz go znaleźć na github:
https://github.com/volkerv/FileLog
źródło
Po długich badaniach stwierdziłem, że:
android.util.Log
domyślne użyciejava.util.logging.Logger
logger
z nazwą""
, aby uzyskać wystąpienie jego użyciaLogManager.getLogManager().getLogger("")
logger
wystąpienia LogCatcom.android.internal.logging.AndroidHandler
po uruchomieniu aplikacji do debugowaniacom.android.internal.logging.AndroidHandler
wypisuje komunikaty do logcat tylko z poziomami wyższymijava.util.logging.Level.INFO
niż (Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF
)Aby zapisywać logi do pliku, wystarczy
rootLogger
""
dodaćjava.util.logging.FileHandler
:Aby wydrukować wszystkie rejestratory w swojej aplikacji, użyj:
źródło
Ten wariant jest znacznie krótszy
źródło
Możesz skorzystać z biblioteki, którą napisałem. Jest bardzo łatwy w użyciu:
Dodaj tę zależność do swojego pliku gradle:
Zainicjuj bibliotekę w klasie Application:
Oto jak korzystasz z biblioteki:
A oto jak odzyskać logi:
Oto link do strony github z dodatkowymi informacjami: https://github.com/danylovolokh/AndroidLogger
Mam nadzieję, że to pomoże.
źródło
Wiele poprzednich wersji log4j nie działa teraz (05/2019). Ale możesz użyć Hyperlog - mogę potwierdzić, że działa.
Dodaj tę linię do swojego projektu zależności i synchronizacji
Utwórz nową klasę aplikacji (utwórz nową klasę Java i rozszerz aplikację). Następnie w metodzie onCreate dodaj te linie:
Zmień plik manifestu, aby zdefiniować plik aplikacji.
Różne sposoby logowania:
Znajdź swoje pliki dziennika. Nawigować do
źródło