我正在尝试使用Mine的代码将日志写入Android文件上的自定义Log.txt文件,但此方法创建文件但不包含任何内容.基本上我想读取文件的先前内容,然后用现有内容附加我的数据.
守则如下:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
out*_*ast 241
希望这可以帮助......
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Kir*_*ran 27
对于那些刚接触Java日志记录和Android日志记录的人
在Android中记录到txt的一些选项如下
logcat -f在本作回答,以日志记录文件.请注意,从Android 4.2开始,READ_LOGS权限不会产生任何影响,并且每个应用程序(除非手机已植根)只能读取自己的日志.这里的缺点是logcat缓冲区是循环的并且具有大小限制.您可能无法获得更早的日志.将Log4j与android-logging-log4j一起使用.android-logging-log4j有什么作用?它通过提供两个函数使Log4j更容易在Android中使用.
简单的例子如下.请注意,logger下面示例中的对象是返回的Log4j对象,而不是android-logging-log4j类.所以android-logging-log4j仅用于配置Log4j.
在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;
}
}
Run Code Online (Sandbox Code Playgroud)在Activity类中
org.apache.log4j.Logger log= Log4jHelper.getLogger( "YourActivity" );
log.error("Error");
log.info("Info");
log.warn("Warn");
Run Code Online (Sandbox Code Playgroud)示例来源.请注意,从头开始重写的log4j 2.x(改进的功能)与log4j 1.x无法向后兼容.所以你必须使用log4j 1.2.x jar和android-logging-log4j jar.我能够登录到应用程序内部文件,然后通过电子邮件发送文件setReadable(true, false)
Hen*_*ett 24
microlog4android适合我,但文档很差.他们需要添加的是这是一个快速入门教程.
这是我发现的快速教程.
在主Activity中添加以下静态变量:
private static final Logger logger = LoggerFactory.getLogger();
Run Code Online (Sandbox Code Playgroud)将以下内容添加到您的onCreate()方法:
PropertyConfigurator.getConfigurator(this).configure();
Run Code Online (Sandbox Code Playgroud)创建一个名为的文件microlog.properties并将其存储在assets目录中
编辑microlog.properties文件如下:
microlog.level=DEBUG
microlog.appender=LogCatAppender;FileAppender
microlog.formatter=PatternFormatter
microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T
Run Code Online (Sandbox Code Playgroud)像这样添加日志记录语句:
logger.debug("M4A");
Run Code Online (Sandbox Code Playgroud)对于每个类,您将创建1)中指定的记录器对象
6.您可以添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
这是教程的来源
BeM*_*ive 10
警告:我可能完全误解了你,但如果你想要的只是一个日志文件,为什么会出汗呢?
把它放在一个bat文件中(更改工具目录的路径,yourappname当然是你的app的名字):
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"
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中做一些类似的事情:
Log.d("yourappname", "Your message");
Run Code Online (Sandbox Code Playgroud)
要创建日志,请连接USB电缆并运行bat文件.
问候
使用slf4android lib.使用android java.util.logging.*
实现slf4j api的简单实现.
特征:
LoggerConfiguration.configuration().addHandlerToLoggerslf4android主要由@miensol维护.
在我们的博客上阅读有关slf4android的更多信息:
经过长时间的调查我发现:
\n\nandroid.util.Log默认使用java.util.logging.Loggerloggername""来获取它的实例LogManager.getLogManager().getLogger("")logger实例com.android.internal.logging.AndroidHandlercom.android.internal.logging.AndroidHandler仅将级别以上的消息打印到 logcat,java.util.logging.Level.INFO例如 ( Level.INFO, Level.WARNING, Level.SEVERE, Level.OFF) 因此,要将日志写入文件只需添加rootLogger "" 一个java.util.logging.FileHandler:
class App : Application{\n override fun onCreate() {\n super.onCreate()\n Log.d(TAG, printLoggers("before setup"))\n\n val rootLogger = java.util.logging.LogManager.getLogManager().getLogger("")\n val dirFile = destinationFolder\n val file = File(dirFile,"logFile.txt")\n val handler = java.util.logging.FileHandler(file.absolutePath, 5* 1024 * 1024/*5Mb*/, 1, true)\n handler.formatter = AndroidLogFormatter(filePath = file.absolutePath)\n\n rootLogger?.addHandler(handler)\n\n Log.d(TAG, printLoggers("after setup"))\n }\n }\n\nval destinationFolder: File\n get() {\n val parent = \n Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absoluteFile\n val destinationFolder = File(parent, "MyApp")\n if (!destinationFolder.exists()) {\n destinationFolder.mkdirs()\n destinationFolder.mkdir()\n }\n return destinationFolder\n }\nRun Code Online (Sandbox Code Playgroud)\n\nclass AndroidLogFormatter(val filePath: String = "", var tagPrefix: String = "") : Formatter() {\n\n override fun format(record: LogRecord): String {\n val tag = record.getTag(tagPrefix)\n val date = record.getDate()\n val level = record.getLogCatLevel()\n val message = record.getLogCatMessage()\n return "$date $level$tag: $message\\n"\n }\n}\n\nfun LogRecord.getTag(tagPrefix: String): String {\n val name = loggerName\n val maxLength = 30\n val tag = tagPrefix + (if (name.length > maxLength) name.substring(name.length - maxLength) else name)\n return tag\n}\n\nfun LogRecord.getDate(): String? {\n return Date(millis).formatedBy("yyyy-MM-dd HH:mm:ss.SSS")\n}\n\nfun Date?.formatedBy(dateFormat: String): String? {\n val date = this\n date ?: return null\n val writeFormat = SimpleDateFormat(dateFormat, Locale.getDefault()) //MM \xd0\xb2 HH:mm\n return writeFormat.format(date)\n}\n\nfun LogRecord.getLogCatMessage(): String {\n var message = message\n\n if (thrown != null) {\n message += Log.getStackTraceString(thrown)\n }\n return message\n}\n\nfun Int.getAndroidLevel(): Int {\n return when {\n this >= Level.SEVERE.intValue() -> { // SEVERE\n Log.ERROR\n }\n this >= Level.WARNING.intValue() -> { // WARNING\n Log.WARN\n }\n this >= Level.INFO.intValue() -> { // INFO\n Log.INFO\n }\n else -> {\n Log.DEBUG\n }\n }\n}\n\nfun LogRecord.getLogCatLevel(): String {\n return when (level.intValue().getAndroidLevel()) {\n Log.ERROR -> { // SEVERE\n "E/"\n }\n Log.WARN -> { // WARNING\n "W/"\n }\n Log.INFO -> { // INFO\n "I/"\n }\n Log.DEBUG -> {\n "D/"\n }\n else -> {\n "D/"\n }\n }\n}\n\nfun getLoggerLevel(level: Int): Level {\n return when (level) {\n Log.ERROR -> { // SEVERE\n Level.SEVERE\n }\n Log.WARN -> { // WARNING\n Level.WARNING\n }\n Log.INFO -> { // INFO\n Level.INFO\n }\n Log.DEBUG -> {\n Level.FINE\n }\n else -> {\n Level.FINEST\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n要打印应用程序中的所有记录器,请使用:
\n\nLog.e(TAG, printLoggers("before setup"))\n\n private fun printLoggers(caller: String, printIfEmpty: Boolean = true): String {\n val builder = StringBuilder()\n val loggerNames = LogManager.getLogManager().loggerNames\n builder.appendln("--------------------------------------------------------------")\n builder.appendln("printLoggers: $caller")\n while (loggerNames.hasMoreElements()) {\n val element = loggerNames.nextElement()\n val logger = LogManager.getLogManager().getLogger(element)\n val parentLogger: Logger? = logger.parent\n val handlers = logger.handlers\n val level = logger?.level\n if (!printIfEmpty && handlers.isEmpty()) {\n continue\n }\n val handlersNames = handlers.map {\n val handlerName = it.javaClass.simpleName\n val formatter: Formatter? = it.formatter\n val formatterName = if (formatter is AndroidLogFormatter) {\n "${formatter.javaClass.simpleName}(${formatter.filePath})"\n } else {\n formatter?.javaClass?.simpleName\n }\n "$handlerName($formatterName)"\n }\n builder.appendln("level: $level logger: \\"$element\\" handlers: $handlersNames parentLogger: ${parentLogger?.name}")\n }\n builder.appendln("--------------------------------------------------------------")\n return builder.toString()\n }\nRun Code Online (Sandbox Code Playgroud)\n
你应该看看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();
}
}
Run Code Online (Sandbox Code Playgroud)
这里bfwritter.newline将您的文本写入文件.并添加权限
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
在你的清单文件中没有失败.
我用命令行方式用下面的代码解决了这个问题:
File outputFile = new File("pathToFile");
Runtime.getRuntime().exec("logcat -c");
Runtime.getRuntime().exec("logcat -v time -f " + outputFile.getAbsolutePath())
Run Code Online (Sandbox Code Playgroud)
其中"time"选项为发布消息的进程的日期,调用时间,优先级/标记和PID添加元数据字段详细信息.
然后在你的代码中做一些类似的事情(使用android.util.Log):
Log.d("yourappname", "Your message");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178372 次 |
| 最近记录: |