客户端日志捕获问题

时间:2014-05-07 21:19:20

标签: ibm-mobilefirst

我正在尝试使用worklight 6.1提供的客户端日志捕获功能,如下所示: http://pic.dhe.ibm.com/infocenter/wrklight/v6r1m0/topic/com.ibm.worklight.dev.doc/devref/c_client-side_log_capture.html

我做了以下事情:

  1. 我设置了以下初始化选项:

    var wlInitOptions = {     分析:{         启用:false     } };

  2. 我创建了一个名为“WLClientLogReceiver”的HTTP适配器,它具有上面引用的信息中心页面中指定的日志过程。日志过程的定义方式与信息中心页面指定的方式相同:

  3. 日志过程与信息中心具有相同的实现,但调用WL.Logger.info()以显示在服务器端调用日志过程:

    function log(deviceInfo, logMessages) {
        WL.Logger.info("Received device logs");
        return true;
    }
    
    1. 在应用程序的某处,WL.Logger.info(“...”)被多次调用。

    2. 应用程序有按钮可以调用 WL.Logger.send() 单击按钮时。

    3. 但是在测试中,我没有看到客户端日志被写入服务器日志。我没有看到的输出     WL.Logger.info(“收到的设备日志”); 调用指示WL.Logger.send()没有调用lop适配器过程。

      这个问题的解决方案是什么?或者我理解错误,WL.Logger.send()将调用日志过程?

2 个答案:

答案 0 :(得分:1)

首先,你的#1

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

与调试日志捕获无关。

我怀疑您的应用程序中的日志捕获已关闭。

在默认生成的Worklight应用程序中,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对象的任何位置运行您的应用程序,则已关闭日志捕获。您需要通过使用true值恢复initOptions对象或通过调用

来重新开启捕获
WL.Logger.setNativeOptions({capture: true});

或直接使用等效的本机记录器API重新开启捕获。

答案 1 :(得分:0)

logger:{enabled:true,level:'debug',stringify:true,pretty:false,tag:{level:false,pkg:true},白名单:[],黑名单:[],nativeOptions:{capture :true}}

您必须在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       }   logMessages参数是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

}

如果使用filename等元数据和调试消息进行日志记录,您将在元数据属性中获取数组中的元素。

建议在解析适配器中的设备日志之前对字符串进行字符串化并解析以避免错误。

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