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的一个快速教程。
-
在主Activity中添加以下静态variables:
private static final Logger logger = LoggerFactory.getLogger();
-
将以下内容添加到您的
onCreate()
方法中:PropertyConfigurator.getConfigurator(this).configure();
-
创build一个名为
microlog.properties
的文件并将microlog.properties
存储在assets
目录中 -
编辑
microlog.properties
文件,如下所示:microlog.level=DEBUG microlog.appender=LogCatAppender;FileAppender microlog.formatter=PatternFormatter microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T
-
添加这样的日志语句:
logger.debug("M4A");
为每个类创build一个logging器对象,如1)
您可以添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这里是教程的来源
对于那些一般的Java日志logging和Android日志logging
- Log4j是通用的Java日志实现,现在是Apache软件基础的一个项目。 这不是Android的具体情况,所以有一些与Android不兼容。
- SL4J不是日志logging实现,它是一个抽象层。 它有助于避免类似于每个第三方库依赖项的情况,尝试使用自己的日志logging实现(如Log4j)。 来源 。
在Android中logging到txt的一些选项如下
- 在这个答案中使用
logcat -f
来logging文件。 请注意,从Android 4.2开始,READ_LOGS权限不会有任何影响,每个应用程序(除非是电话根源)只能读取自己的日志。 这里的缺点是logcat缓冲区是循环的,并且有一个大小限制。 您可能无法获得较早的日志。 - 使用microlog4android (针对像Android这样的移动设备编写)就像之前的答案一样 。 可能有一种方法,但我无法想象,如何使用microlog4Androidlogin到应用程序的内部存储。 只有日志path选项是外部存储,如SD卡,所以我不能使用它。
-
在android-logging-log4j中使用Log4j 。 android-logging-log4j是做什么的? 通过赋予两个函数使得Log4j更易于在Android中使用。
- 除logging文件外,还可以select将日志发送到logcat
- 通过提供LogConfigurator类来设置Log4jconfiguration选项(如文件path,最大文件大小,备份数量等)的简单方法。
下面的简单例子。 注意下面例子中的
logger
对象是返回的Log4j对象,而不是android-logging-log4j类。 所以android-logging-log4j只用于configurationLog4j。 - 但是要尝试LogBack 。 LogBack由与Log4J 1.x和SL4J库相同的人开发。 虽然与Log4j 2.x没有关系。
在Android中使用Log4j的步骤
-
将log4j-1.2.x.jar和android-logging-log4j-1.0.3.jar添加到libs文件夹。
-
仅在使用外部存储时添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
编写
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; } }
-
在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。
这可能会晚,但希望这可能有所帮助..试试这个….
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().addHandlerToLogger
logging到任何其他目的地 - 摇动你的设备,通过电子邮件发送带截图的日志
- 真的很小,只花了〜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(); }