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
выше, он создает новый файл журнала (с помощью текущей даты/времени, как часть имени файла) в обещании. Затем функция actionFn
передается функции startLog
. Передавая необязательное свойство опций с именем action
, поведение по умолчанию «write to console» перезаписывается (если вы не хотите его перезаписывать, вы можете вызвать 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)
});
Вы бы, вероятно, хотите создать функцию в конце вашего приложения, чтобы очистить/закрыть файл журнала.
WiredPrarie достаточно хорошо использовал WinJS.log - главное, что вы можете заменить поведение по умолчанию, как вам нравится. Что касается протоколирования SDK, просмотрите раздел аналитики http://services.windowsstore.com. Доступны SDK, такие как Localytics, Adobe Omniture и MarkedUp, которые вы можете легко связать с реализацией WinJS.log. –