在使用 Html/WinJS 开发的 Metro 应用程序中实现日志记录
Implementing logging in Metro Application developed using Html/WinJS
>我需要在我的Windows 8 Metro应用程序中提供错误日志记录,这些应用程序是用Html/WinJS开发的以便用户可以从位于应用程序本地文件夹中的日志文件中了解出了什么问题。
我已经检查了WinJS.log(消息,标签,类型);它将写入控制台,但找不到任何可以在本地文件上获取它的内容。
做同样事情的最佳方法是什么,是否有任何第三方库/js 可用于在 WinJS 开发的地铁应用程序中进行错误日志记录?
提前谢谢。
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 });
}
通过调用上面的 startFileLog
函数,它会在 promise 中创建新的日志文件(通过使用当前日期/时间作为文件名的一部分)。然后,将一个名为 actionFn
的函数传递给 startLog
函数。通过传递名为 action
的选项的可选属性,默认的"写入控制台"行为将被覆盖(如果您不希望它被覆盖,则可以在没有该操作的情况下调用startLog
,然后从 WinJS.log
复制函数引用并将其替换为您自己的函数,并调用它)。调用 log
函数时,它现在会调用 actionFn
该函数使用之前创建的承诺来验证日志文件是否确实可用于写入,然后再继续。如果尚未准备就绪,它将排队。因此,这意味着即使文件可能没有立即准备就绪,日志最终也会包含您期望的结果。由于 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)
});
您可能希望在应用程序末尾创建一个函数来清理/关闭日志文件。
- 是否可以使用推送通知Windows 8 Metro应用程序's使用Javascript
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- 在Windows Metro风格的Javascript应用程序中读取文件内容
- 在JS Metro应用程序中,禁止登录屏幕进行基本身份验证
- 我可以在Windows7中执行Windows8 Metro风格的应用程序吗
- Metro 应用程序中的列表视图项目单击
- 如何在metro风格的应用程序中调试eval代码中的异常
- Apache Cordova可以编译到传统的Windows桌面应用程序(非metro)吗
- 调整图像大小,同时在Windows 8 Metro HTML5应用程序中保持其质量
- 在Metro应用程序中获取窗口尺寸
- 如何在Javascript Win8 Metro应用程序中捕获前台和后台事件
- 如何在windows 8 html5 metro应用程序中显示图像及其下的2个按钮
- HTML5 Metro应用程序是否可能使用PHP中的web服务
- 正在读取Windows Metro javascript应用程序中的文件
- 在 Windows Metro 应用程序中缓存背景
- 在使用 Html/WinJS 开发的 Metro 应用程序中实现日志记录
- 如何在 Javascript Metro 应用程序中检测列表视图中项目的右键单击
- 在多个 Metro 风格的应用程序中重用 JavaScript 代码
- 如何将日志或文本文件写入 Metro 样式应用程序中的文件系统
- 在Win8 Metro应用程序中使用javascript和html在互动程序上打开url