我想在我的cordova应用程序中添加一些简单的日志记录功能。
所以我添加了文件插件,实现了一个超级简单的日志方法并进行了测试。
我的配置:
$ cordova --version
3.5.0-0.2.7
$ cordova plugins
org.apache.cordova.file 1.3.0 "File"
测试设备是华为u8850,运行Android 2.3.5
记录器:
window.MyLog = {
log: function(line){
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(FS) {
FS.root.getFile('the_log1.txt', {"create":true, "exclusive":false},
function(fileEntry) {
fileEntry.createWriter(
function(writer) {
console.log(line);
writer.seek(writer.length); // append to eof
writer.write(line + '\n'); // write the line
}, fail);
}, fail);
}, fail);
}
};
测试:
MyLog.log(new Date().toLocaleTimeString());
一切似乎都很好:
然后: 我试着写一些额外的字符:
window.MyLog = {
log: function(line){
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(FS) {
FS.root.getFile('the_log2.txt', {"create":true, "exclusive":false},
function(fileEntry) {
fileEntry.createWriter(
function(writer) {
console.log(line);
writer.seek(writer.length); // append to eof
writer.write(line + '\n'); // write the line
writer.write('----' + '\n'); // extra write
}, fail);
}, fail);
}, fail);
}
};
我发现了这个日志猫输出:
16:00:00
processMessage failed: Error: [object Object]
processMessage failed: Stack: undefined
processMessage failed: Message: S01 File218896726 {"lastModifiedDate":1409839200000,"fullPath":"\/the_log2.txt","type":"text\/plain","name":"the_log2.txt","size":0}
- >似乎不可能多次使用writer.write命令
问:
答案 0 :(得分:0)
我认为您必须实现并等待onwriteend()
事件在将任何内容写入文件后触发。
onwriteend()
被解雇后,您可以再次写入该文件。
当我创建日志记录功能时,我正在做的事情是这样的(您可以将其用作指南,我只是从脑海中输入):
function fileItemSuccessWrite(writer){
writer.seek(writer.length);
writer.onwriteend = function(e) {
// TODO WRITE AGAIN
};
writer.onerror = function(e) {
// HANDLE ERROR
};
writer.write(YOUR_LOG_TO_WRITE);
}
fileEntry.createWriter(fileItemSuccessWrite, fileItemFailWrite);
我创建的内容还有一个cache
(一个tmp_variable
),用于我想在日志文件中写入的内容。一旦此tmp_variable
达到特定大小,我就将其转储到日志文件中。因此fileSystem
访问权限较轻。
您可以阅读W3.org
上的writer
和write