我正在使用一种日志记录功能,在该功能中,我会将日志文本添加到队列中,然后将日志从该日志写入文件中。这是写方法:
private void writeLogs(File logFile, String logText) {
try {
if (logFile == null || !logFile.exists() || logText == null || logText.isEmpty()) {
return;
}
synchronized (lock) {
BufferedWriter buf = null;
FileOutputStream fos = null;
if (megabytesAvailable(logFile) > 5) {
try {
buf = new BufferedWriter(new FileWriter(logFile, true));
buf.append(logText);
Log.e("writeLogs", logText);
buf.append("\r\n");
//buf.newLine();
} catch (Exception e) {
Log.e("writeLog", "e", e);
} finally {
buf.flush();
buf.close();
}
}
}
} catch (Exception ex) {
Log.e("writeLogs1","E",ex);
}
}
它可以正常工作一段时间,然后突然停止写入文件。 最后打印的日志始终是发送的原始文本的一半。 SO中的所有问题都指向“ flush”,但是如您所见,我已经刷新了writer。我想念什么?同步添加文本到队列的方法和writeLogs
的调用方法。最初,我认为这与线程死锁有关,但是系统每次都会输出log.e
,这意味着缓冲写入会获得文本但无法写入。有帮助吗?
这是打印文件内容的方法:
public void printLogFileContent(){ /** Only for testing purpose **/
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(logFile.getAbsolutePath()));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
line = br.readLine();
}
Log.e("printLogFileContent",sb.toString());
} catch (FileNotFoundException e) {
Log.e("FileNoF","E",e);
} catch (IOException e) {
Log.e("IOE","E",e);
} finally {
try {
br.close();
} catch (IOException e) {
Log.e("IOE2","E",e);
}
}
}
答案 0 :(得分:0)
这真是愚蠢的事情。实际上,“ Log.e”具有一次可以打印的字符数限制。那太累了。这就是为什么我只看到一半的日志。