Intereting Posts
Основы Android, libgdx и box2d Предупреждение JavaScript не работает в Android WebView Причины переноса приложения Cordova на приложение Mobile Chrome? Android Keystore getEntry () и generateKeyPair () throw Исключения иногда Android: java.lang.SecurityException: для ввода в другое приложение требуется разрешение INJECT_EVENTS Мое приложение Android Android теряет значения, хранящиеся в localStorage, когда он отключается. Кто-нибудь еще видит эту проблему? Как получилось, что предварительный просмотр камеры в текстурном представлении гораздо более нечеткий, чем в плане поверхности? Чтение активов или файлов raw или ресурсов в качестве объекта File в Android Скрыть строку в GridLayout Как я могу найти ориентацию изображения, сделанного с помощью Intent MediaStore.ACTION_IMAGE_CAPTURE? Внедрить двойной клик для кнопки на Android Сборщик даты в приложении для Android Как выровнять LinearLayout в центре своего родителя? Создайте подписанную студию андроида apk Как поместить несколько элементов в одну строку в ListView?

Android Writing Logs в текстовый файл

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

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

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(); } } 

Solutions Collecting From Web of "Android Writing Logs в текстовый файл"

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

 public void appendLog(String text) { File logFile = new File("sdcard/log.file"); if (!logFile.exists()) { try { logFile.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { //BufferedWriter for performance, true to set append to file flag BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true)); buf.append(text); buf.newLine(); buf.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

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

Вот быстрый учебник, который я нашел.

  1. Добавьте в свою основную активность следующую статическую переменную:

     private static final Logger logger = LoggerFactory.getLogger(); 
  2. Добавьте в свой onCreate() :

     PropertyConfigurator.getConfigurator(this).configure(); 
  3. Создайте файл с именем microlog.properties и сохраните его в каталоге assets

  4. Отредактируйте файл microlog.properties следующим образом:

     microlog.level=DEBUG microlog.appender=LogCatAppender;FileAppender microlog.formatter=PatternFormatter microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T 
  5. Добавляйте такие заявления:

     logger.debug("M4A"); 

Для каждого класса вы создаете объект журнала, как указано в 1)

6.Вы можете добавить следующее разрешение:

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

Вот источник учебника

Для тех, кто новичок в регистрации Java в целом и регистрации на Android

  1. Log4j является общей реализацией Java-журнала и теперь является проектом основы программного обеспечения Apache. Это не Android специфический, и поэтому имеет некоторые несовместимости с Android.
  2. SL4J не является логической реализацией, это уровень абстракции. Это помогает избежать ситуаций, подобных зависимостям каждой сторонней библиотеки, от проекта, пытаясь использовать собственную реализацию ведения журнала, такую ​​как Log4j. Источник .

Некоторые параметры для входа в txt в Android ниже

  1. Используйте logcat -f как в этом ответе, для входа в файл. Обратите внимание, что с Android 4.2 разрешение READ_LOGS не имеет никакого влияния, и каждое приложение (если только телефон не укоренен) мог читать только свои собственные журналы. Недостатком здесь является то, что буфер logcat является круглым и имеет ограничение по размеру. Возможно, вы не получите более ранние журналы.
  2. Используйте microlog4android (написанный для мобильных устройств, таких как Android), как в предыдущем ответе . Возможно, есть способ, но я не мог понять, как использовать microlog4Android для входа в внутреннее хранилище приложения. Единственный вариант для пути к журналам – это внешнее хранилище, такое как sdcard, и поэтому я не мог его использовать.
  3. Используйте Log4j с android-logging-log4j . Что делает андроид-logging-log4j? Это упрощает использование Log4j в Android, предоставляя две функции.

    • Возможность отправки журналов в logcat в дополнение к протоколированию файла
    • Простой способ установить параметры конфигурации Log4j, такие как путь к файлу, максимальный размер файла, количество резервных копий и т. Д., Предоставляя класс LogConfigurator.

    Простой пример ниже. Обратите внимание, что в приведенном ниже примере объект logger – это возвращаемый объект Log4j, а не класс android-logging-log4j. Таким образом, android-logging-log4j используется только для настройки Log4j.

  4. Но попробовать LogBack . LogBack разработан тем же человеком, который придумал библиотеки Log4J 1.x и SL4J. Однако не связано с Log4j 2.x.

Шаги для использования Log4j в Android.

  1. Добавьте оба файла log4j-1.2.x.jar и android-logging-log4j-1.0.3.jar в папку libs.

  2. Добавить разрешения только при использовании внешнего хранилища
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  3. Запись вспомогательного класса Log4j

     package com.example.logger; import android.os.Environment; import de.mindpipe.android.logging.log4j.LogConfigurator; public class Log4jHelper { private final static LogConfigurator mLogConfigrator = new LogConfigurator(); static { configureLog4j(); } private static void configureLog4j() { String fileName = Environment.getExternalStorageDirectory() + "/" + "log4j.log"; String filePattern = "%d - [%c] - %p : %m%n"; int maxBackupSize = 10; long maxFileSize = 1024 * 1024; configure( fileName, filePattern, maxBackupSize, maxFileSize ); } private static void configure( String fileName, String filePattern, int maxBackupSize, long maxFileSize ) { mLogConfigrator.setFileName( fileName ); mLogConfigrator.setMaxFileSize( maxFileSize ); mLogConfigrator.setFilePattern(filePattern); mLogConfigrator.setMaxBackupSize(maxBackupSize); mLogConfigrator.setUseLogCatAppender(true); mLogConfigrator.configure(); } public static org.apache.log4j.Logger getLogger( String name ) { org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger( name ); return logger; } } 
  4. В классе Activity

     org.apache.log4j.Logger log= Log4jHelper.getLogger( "YourActivity" ); log.error("Error"); log.info("Info"); log.warn("Warn"); 

Пример источника . Обратите внимание, что log4j 2.x (улучшенные функциональные возможности), переписанные с нуля, не обратно сопоставимы с log4j 1.x. Таким образом, вы должны использовать банку log4j 1.2.x с банком android-logging-log4j. Я смог войти в внутренний файл приложения и позже отправить файл с помощью setReadable(true, false)

Предупреждение: Возможно, я полностью вас не понимаю, но если все, что вы хотите, это файл журнала, зачем потеть?

Поместите это в файл bat (измените путь к вашему каталогу инструментов, а yourappname – это, конечно, имя вашего приложения):

 cd "C:\devAndroid\Software\android-sdk-windows-1.6_r1\android-sdk-windows-1.6_r1\tools" adb logcat -v time ActivityManager:W yourappname:D *:W >"C:\devAndroid\log\yourappname.log" 

Тогда в вашем коде просто сделайте что-то похожее на это:

 Log.d("yourappname", "Your message"); 

Чтобы создать журнал, подключите USB-кабель и запустите файл bat.

С уважением

Вы должны взглянуть на microlog4android. У них есть решение, готовое к регистрации в файл.

http://code.google.com/p/microlog4android/

Это может быть поздно, но надеюсь, что это может помочь. Попробуйте это ….

 public void writefile() { File externalStorageDir = Environment.getExternalStorageDirectory(); File myFile = new File(externalStorageDir , "yourfilename.txt"); if(myFile.exists()) { try { FileOutputStream fostream = new FileOutputStream(myFile); OutputStreamWriter oswriter = new OutputStreamWriter(fostream); BufferedWriter bwriter = new BufferedWriter(oswriter); bwriter.write("Hi welcome "); bwriter.newLine(); bwriter.close(); oswriter.close(); fostream.close(); } catch (IOException e) { e.printStackTrace(); } } else { try { myFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } 

Здесь bfwritter.newline записывает ваш текст в файл. И добавьте разрешение

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

В вашем файле манифеста обязательно.

Я решил эту проблему с помощью следующего фрагмента кода в командной строке:

 File outputFile = new File("pathToFile"); Runtime.getRuntime().exec("logcat -c"); Runtime.getRuntime().exec("logcat -v time -f " + file.getAbsolutePath()) 

Где опция «время» добавляет детали поля метаданных для даты, времени вызова, приоритета / тега и PID процесса, выдающего сообщение.

Используйте slf4android lib.
Это простая реализация slf4j api с использованием android java.util.logging. *.

Особенности:

  • Запись в файл из коробки
  • LoggerConfiguration.configuration().addHandlerToLogger в любом другом месте с помощью LoggerConfiguration.configuration().addHandlerToLogger
  • Встряхните устройство, чтобы отправлять журналы со снимком экрана по электронной почте
  • Действительно маленький, это заняло всего ~ 55 КБ

Slf4android поддерживается главным образом @miensol .

Узнайте больше о slf4android в нашем блоге:

  • Представляем slf4android
  • Интеграция slf4android с Crashlytics

В общем, перед открытием потока необходимо иметь дескриптор файла. У вас есть дескриптор fileOutputStream перед createNewFile () в блоке else. Поток не создает файл, если он не существует.

На самом деле это не андроид, но для этой цели это много. Что делать, если вы выполняете много операций «писать» один за другим? Вы будете читать все содержимое и записывать все содержимое, принимая во внимание время и, что более важно, время автономной работы.

Я предлагаю использовать java.io.RandomAccessFile, seek () 'до конца, а затем writeChars () для добавления. Это будет намного более чистый код и, вероятно, намного быстрее.

Я создал простой, легкий класс (около 260 LoC), который расширяет стандартную реализацию android.util.Log с протоколированием на основе файлов:
Каждое сообщение журнала регистрируется через android.util.Log, а также записывается в текстовый файл на устройстве.

Вы можете найти его на github:
https://github.com/volkerv/FileLog

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

 пытаться {
     Final Путь к файлу = новый файл (
             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 ();
 }