2014-05-07 32 views
0

我試圖使用由工作燈6.1提供的客戶端日誌捕捉功能,如在所示: http://pic.dhe.ibm.com/infocenter/wrklight/v6r1m0/topic/com.ibm.worklight.dev.doc/devref/c_client-side_log_capture.html問題與客戶端的日誌採集

我做了以下內容:

  1. 我設置以下INIT選項:

    變種wlInitOptions = { 分析:{啓用 :假 } };

  2. 我創建了一個名爲「WLClientLogReceiver」的HTTP適配器,它具有在上述引用的信息中心頁面中指定的日誌過程。

日誌程序具有相同的實現上有呼叫的例外WL.Logger.info信息中心(:由信息中心頁面中指定的日誌程序定義的相同方式),以顯示日誌程序在服務器端調用:

function log(deviceInfo, logMessages) { 
    WL.Logger.info("Received device logs"); 
    return true; 
} 
  1. 某處在應用程序中,WL.Logger.info(「...」)被稱爲多次。

  2. 該應用程序有按鈕,當按鈕被點擊時,該按鈕將調用 WL.Logger.send() 。

但在測試中,我沒有看到正在寫入服務器日誌的客戶端日誌。而我沒有看到WL.Logger.info(「接收到的設備日誌」)的輸出爲 ; 調用指示WL.Logger.send()不調用lop適配器過程。

這個問題的解決方案是什麼?或者我的理解錯誤,WL.Logger.send()會調用日誌過程?

+0

什麼是環境? (Android或iOS) – cnandreu

回答

1

首先,你的#1

var wlInitOptions = { analytics : { enabled: false } }; 

是不相關的調試日誌捕獲。

我懷疑在應用程序中關閉了日誌捕獲。

在默認生成工作燈的應用中,initOptions.js文件有以下:

logger : {enabled: true, level: 'debug', stringify: true, pretty: false, 
    tag: {level: false, pkg: true}, whitelist: [], blacklist: [], 
    nativeOptions: {capture: false}}, 

通知nativeOptions: {capture: false}}。如果您已經在適當的位置使用該initOptions對象隨時運行您的應用程序,那麼日誌捕獲已關閉。您將需要通過恢復的initOptions與true值對象,或致電

WL.Logger.setNativeOptions({capture: true}); 

或直接行使相應的原生API記錄器打開捕獲重新打開捕獲回來。

0

logger:{enabled:true,level:'debug',stringify:true,pretty:false,tag:{level:false,pkg:true},白名單:[],blacklist:[],nativeOptions:{捕獲:真}}

您必須在initOptions.js中將本機捕獲啓用爲true。

您可以使用您的軟件包進行登錄,以幫助您基於WLClientLogReceiver適配器中的軟件包過濾消息。

var myloggerObject = WL.Logger.create({pkg: 'mypackage'}); 
myloggerObject.debug("Hello world"); 

您可以在您的js文件中指定您的級別以便登錄到客戶端設備。

在適配器中,您將獲得日誌消息作爲json數組。 功能日誌(deviceInfo,logMessages){

/*適配器可以選擇處理這些參數,例如將它們轉發到後端服務器以便保管和進一步分析。

的deviceInfo對象可看起來像這樣: { 「APPNAME」: 「wlapp」, 「appVersion」: 「1.0」, 「的DeviceID」: 「66eed0c9-ecf7-355f-914A-3cedac70ebcc」, 「model」:「Galaxy Nexus-4.2.2-API 17-720x1280」, 「systemName」:「Android」, 「systemVersion」:「4.2.2」, 「os.arch」:「i686」,/ /僅限Android 「os.version」: 「3.4.0-QEMU +」 //僅限Android } 的日誌消息參數是JSON數組 包含JSON對象的元件,並且可能是這樣的:

[{ 
     "timestamp" : "17-02-2013 13:54:23:745", // "dd-MM-yyyy hh:mm:ss:S" 
     "level"  : "ERROR",     // ERROR||WARN||INFO||LOG|| DEBUG 
     "package"  : "your_tag",     // typically a class name 
     "msg"   : "the message",    // a helpful log message 
     "threadid"  : 42,       // (Android only)the current thread 
     "metadata"  : { "$src" : "js" }   // metadata placed on the log call 
}] 
*/ 

//示例日誌和濾波方法

var logs= [{ 
    "timestamp" : "17-02-2013 13:54:23:745", // "dd-MM-yyyy hh:mm:ss:S" 
    "level"  : "ERROR",     // ERROR||WARN||INFO||LOG|| DEBUG 
    "package"  : "your_tag",     // typically a class name 
    "msg"   : "the message",    // a helpful log message 
    "threadid"  : 42,       // (Android only)the current thread 
    "metadata"  : { "$src" : "js" }   // metadata placed on the log call 
}, 
{ 
    "timestamp" : "17-02-2013 13:54:23:745", // "dd-MM-yyyy hh:mm:ss:S" 
    "level"  : "ERROR",     // ERROR||WARN||INFO||LOG|| DEBUG 
    "package"  : "mypackage",     // typically a class name 
    "msg"   : "my package message",    // a helpful log message 
    "threadid"  : 42,       // (Android only)the current thread 
    "metadata"  : { "$src" : "js" }   // metadata placed on the log call 
} 

];

var filteredLogs = logs.filter(function(log){ 
     if(log.package == mypackage) //comparing the package and returns the object 
      { return log; } 
}); 

WL.Logger.error(filteredLogs);// This is send only the filtered array to your server 

}

如果如文件名登錄使用元數據與調試消息一起,你會得到這些元數據屬性在數組中。

建議在解析適配器中的設備日誌之前對對象進行字符串化和分析以避免錯誤。

var logs = JSON.stringify(JSON.parse(logs)); 
var filteredLogs = logs.filter ...