在 Win 8.1/WinJS 上使用 Cordova-WebApp 不断地记录到一个文件
Constantly logging to a file with Cordova-WebApp on Win 8.1/WinJS
在不使用内部日志系统 (LoggingSession) 的情况下不断写入日志文件的最佳方法是什么?我做了类似的事情:
function raisedWhenNewLogMessageArrived(message) {
var fileName = getcurrentDate() + ".log";
var appDataDir = WinJS.Application.local.folder;
appDataDir.getFolderAsync("log", Windows.Storage.CreationCollisionOption.openIfExists).then(
function (folder) {
folder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.openIfExists).then(
function (file) {
Windows.Storage.FileIO.appendTextAsync(file,message + "\n").then(
function () {
win("OK");
},
function (e) {
fail(e);
});
},
function (e) {
fail(e);
})
},
function (e) {
fail(e);
}
);
}
但是,如果有大量传入的日志消息(启动时大约 800 条),这当然会崩溃。我还尝试让文件不断打开并写入,但这也会崩溃。像 FileOutputStream 这样的东西会是更好的选择吗?我将如何使用它?
在此先感谢任何帮助!
我建议将所有代码分离到 FileIO.appendTextAsync,以便缓存 StorageFile 对象。 StorageFile 实际上只是路径名的抽象,以允许文件系统实际上不支持的文件。那么,将 StorageFile 放在手头并不意味着您将文件打开。 FileIO.appendTextAsync 将负责打开流、写入流和关闭流。
因此,您可以执行一次 getFolderAsync 和 createFileAsync,而不是对每封邮件都执行一次。然后我怀疑 appendTextAsync 将能够跟上您的日志记录流量。鉴于 WinRT 被编写为线程安全的,appendTextAsync 的实现应该可以很好地处理并发问题。那么,您的日志记录方法只是使用缓存的 StorageFile 对象围绕 appendTextAsync 的简单包装器。
作为替代方案,请查看 Windows.Foundation.Diagnostics 中的 FileLoggingSession class,它专门用于进行基于文件的连续日志记录,并且还生成可以带入 Windows Windows SDK 中的性能分析器和跟踪报告器工具。有关详细信息,请参阅 FileLoggingSession sample and the Windows Performance Analyzer documentation.
在不使用内部日志系统 (LoggingSession) 的情况下不断写入日志文件的最佳方法是什么?我做了类似的事情:
function raisedWhenNewLogMessageArrived(message) {
var fileName = getcurrentDate() + ".log";
var appDataDir = WinJS.Application.local.folder;
appDataDir.getFolderAsync("log", Windows.Storage.CreationCollisionOption.openIfExists).then(
function (folder) {
folder.createFileAsync(fileName, Windows.Storage.CreationCollisionOption.openIfExists).then(
function (file) {
Windows.Storage.FileIO.appendTextAsync(file,message + "\n").then(
function () {
win("OK");
},
function (e) {
fail(e);
});
},
function (e) {
fail(e);
})
},
function (e) {
fail(e);
}
);
}
但是,如果有大量传入的日志消息(启动时大约 800 条),这当然会崩溃。我还尝试让文件不断打开并写入,但这也会崩溃。像 FileOutputStream 这样的东西会是更好的选择吗?我将如何使用它?
在此先感谢任何帮助!
我建议将所有代码分离到 FileIO.appendTextAsync,以便缓存 StorageFile 对象。 StorageFile 实际上只是路径名的抽象,以允许文件系统实际上不支持的文件。那么,将 StorageFile 放在手头并不意味着您将文件打开。 FileIO.appendTextAsync 将负责打开流、写入流和关闭流。
因此,您可以执行一次 getFolderAsync 和 createFileAsync,而不是对每封邮件都执行一次。然后我怀疑 appendTextAsync 将能够跟上您的日志记录流量。鉴于 WinRT 被编写为线程安全的,appendTextAsync 的实现应该可以很好地处理并发问题。那么,您的日志记录方法只是使用缓存的 StorageFile 对象围绕 appendTextAsync 的简单包装器。
作为替代方案,请查看 Windows.Foundation.Diagnostics 中的 FileLoggingSession class,它专门用于进行基于文件的连续日志记录,并且还生成可以带入 Windows Windows SDK 中的性能分析器和跟踪报告器工具。有关详细信息,请参阅 FileLoggingSession sample and the Windows Performance Analyzer documentation.