Hem*_*att 2 javascript error-log windows-8 windows-runtime winjs
我需要在使用Html/WinJS开发的Windows 8 Metro应用程序中提供错误日志记录,以便用户可以从位于应用程序本地文件夹中的日志文件中了解出现了什么问题.
我检查了WinJS.log(消息,标签,类型); 它会写入控制台,但无法找到任何可以通过本地文件获取的内容.
在WinJS中开发的城域应用程序中是否有可用于错误记录的第三方库/ j的最佳方法是什么?
提前致谢.
WinJS.log只是一个占位符.如果没有正确的初始化,它什么都不做(事实上,它根本没有设置).如果您只是WinJS.Utilities.startLog()在应用程序启动时调用,则默认为控制台连接记录器.
如果你想要更完整的东西,你需要建立它.我在下面建了一个小样本.
function startFileLog() {
// choose where the file will be stored:
var fileDestination = Windows.Storage.ApplicationData.current.localFolder;
var logger = new WinJS.Promise(function (complete) {
var logfilename = new Date().toISOString().replace(/[:-]/g, "");
logfilename = "log-" + logfilename + ".log";
fileDestination.createFileAsync(logfilename,
Windows.Storage.CreationCollisionOption.generateUniqueName)
.done(function (file) {
complete(file);
});
});
var actionFn = function (message, tag, type) {
logger.then(function (file) {
var m = WinJS.Utilities.formatLog(message, tag, type);
Windows.Storage.FileIO.appendTextAsync(file, m).done();
});
};
WinJS.Utilities.startLog({ action: actionFn });
}
Run Code Online (Sandbox Code Playgroud)
通过调用startFileLog上面的函数,它会在promise中创建一个新的日志文件(通过使用当前日期/时间作为文件名的一部分).然后,将一个被调用actionFn的startLog函数传递给该函数.通过传递所选选项的可选属性,将action覆盖默认的"写入控制台"行为(如果您不希望它被覆盖,则可以在startLog没有操作的情况下调用,然后复制函数引用WinJS.log并将其替换为您自己的函数,并称之为).log调用该函数时,它现在调用actionFn它使用先前创建的promise来验证日志文件实际上是否可用于写入,然后再继续.如果尚未准备好,它将排队等候.因此,这意味着即使文件可能没有立即就绪,日志最终也会包含您期望的结果.由于WinJS的异步特性,如果应用程序在文件完全打开之前崩溃,将会有一段很短的时间,将丢失记录的项目.如果您希望延迟应用程序启动,则可以通过返回logger承诺来打开文件:
function startFileLog() {
/// ... etc..
return logger;
}
startFileLog().then(function() {
// the application can now be assured that the log file is ready to accept
// writes ... (but again, it's all async, so a write may be missed in
// extreme cases)
});
Run Code Online (Sandbox Code Playgroud)
您可能希望在应用程序结束时创建一个函数来清理/关闭日志文件.