Android写入日志文本文件

我试图写日志到自定义Log.txt文件在Android文件使用这个我的代码,但然后这个方法创build文件,但不包含任何内容。 基本上我想读取文件的以前的内容,然后附加我的数据与现有的内容。

守则如下:

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

希望这可以帮助…

 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适用于我,但文档相当差。 他们需要添加的是一个快速入门教程 。

这是我find的一个快速教程。

  1. 在主Activity中添加以下静态variables:

     private static final Logger logger = LoggerFactory.getLogger(); 
  2. 将以下内容添加到您的onCreate()方法中:

     PropertyConfigurator.getConfigurator(this).configure(); 
  3. 创build一个名为microlog.properties的文件并将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"); 

为每个类创build一个logging器对象,如1)

您可以添加以下权限:

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

这里是教程的来源

对于那些一般的Java日志logging和Android日志logging

  1. Log4j是通用的Java日志实现,现在是Apache软件基础的一个项目。 这不是Android的具体情况,所以有一些与Android不兼容。
  2. SL4J不是日志logging实现,它是一个抽象层。 它有助于避免类似于每个第三方库依赖项的情况,尝试使用自己的日志logging实现(如Log4j)。 来源 。

在Android中logging到txt的一些选项如下

  1. 在这个答案中使用logcat -f来logging文件。 请注意,从Android 4.2开始,READ_LOGS权限不会有任何影响,每个应用程序(除非是电话根源)只能读取自己的日志。 这里的缺点是logcat缓冲区是循环的,并且有一个大小限制。 您可能无法获得较早的日志。
  2. 使用microlog4android (针对像Android这样的移动设备编写)就像之前的答案一样 。 可能有一种方法,但我无法想象,如何使用microlog4Androidlogin到应用程序的内部存储。 只有日志path选项是外部存储,如SD卡,所以我不能使用它。
  3. 在android-logging-log4j中使用Log4j 。 android-logging-log4j是做什么的? 通过赋予两个函数使得Log4j更易于在Android中使用。

    • 除logging文件外,还可以select将日志发送到logcat
    • 通过提供LogConfigurator类来设置Log4jconfiguration选项(如文件path,最大文件大小,备份数量等)的简单方法。

    下面的简单例子。 注意下面例子中的logger对象是返回的Log4j对象,而不是android-logging-log4j类。 所以android-logging-log4j只用于configurationLog4j。

  4. 但是要尝试LogBack 。 LogBack由与Log4J 1.x和SL4J库相同的人开发。 虽然与Log4j 2.x没有关系。

在Android中使用Log4j的步骤

  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(改进的function)不能与log4j 1.x向后兼容。 所以你必须使用log4j 1.2.x jar和android-logging-log4j jar。 我能够login到应用程序的内部文件,然后用setReadable(true, false)

警告:我可能完全误解了你,但是如果你想要的只是一个日志文件,为什么要冒汗?

把它放在bat文件中(把path改成你的工具目录,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"); 

要创build日志,请连接USB电缆并运行bat文件。

问候

你应该看看microlog4android。 他们有一个准备好login到文件的解决scheme。

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

其中“时间”选项添加发布消息的进程的date,调用时间,优先级/标记和PID的元数据字段详细信息。

使用slf4android库。
这是使用android java.util.logging。*的slf4j api的简单实现。

特征:

  • 日志logging到文件中
  • 通过LoggerConfiguration.configuration().addHandlerToLoggerlogging到任何其他目的地
  • 摇动你的设备,通过电子邮件发送带截图的日志
  • 真的很小,只花了〜55kB

slf4android主要由@miensol维护。

在我们的博客上阅读更多有关slf4android的信息:

  • 介绍slf4android
  • 整合slf4android与Crashlytics

一般来说,在打开stream之前你必须有一个文件句柄。 你在else块的createNewFile() 之前有一个fileOutputStream句柄。 如果文件不存在,该stream不会创build该文件。

不是特定于android的,但是为了这个目的,这是很多的IO。 如果你一个接一个地做许多“写”操作呢? 您将阅读整个内容并写下整个内容,花费更多的时间,更重要的是电池寿命。

我build议使用java.io.RandomAccessFile,seek()结束,然后writeChars()追加。 这将是更清洁的代码,可能要快得多。

我创build了一个简单的,轻量级的类(大约260 LoC),扩展标准的android.util.Log实现与基于文件的日志logging:
每个日志消息都通过android.util.Loglogging,并写入设备上的文本文件。

你可以在github上find它:
https://github.com/volkerv/FileLog

这个变种要短得多

尝试{
    最终文件path=新文件(
             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();
 }