WL.Logger.Send()其不回调WLClientLogReceiver适配器

时间:2014-05-08 19:09:47

标签: ibm-mobilefirst worklight-adapters

我在initOptions.js中启用了nativeOptions:{capture:true}

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

在我的主要js文件中,我有以下代码。

function wlCommonInit(){
// Common initialization code goes here
WL.Logger.setNativeOptions({'capture': true});

var logger = WL.Logger.create({pkg: 'mypackage'});

logger.debug('Hello world - debug');
//[mypackage] Hello world

logger.log('Hello world - log');
//[mypackage] Hello world

logger.info('Hello world - info');
//[mypackage] Hello world

logger.warn('Hello world - warn');
//[mypackage] Hello world

logger.error('Hello world - error');
//[mypackage] Hello world
WL.Logger.send();  }

WL.Logger.send()假设调用我的适配器" WLClientLogReceiver"。但我没有得到任何这个适配器的电话。

请告诉我,我需要启用任何其他设置,将我的客户端捕获的日志上传到服务器。

 function log(deviceInfo, logMessages) {
 return true;}

<procedure name="log" securityTest="wl_unprotected" audit="true" />

3 个答案:

答案 0 :(得分:2)

send函数未附加到LogInstance原型,这是您在使用WL.Logger.create()创建的记录器实例时使用的原型。请致电

WL.Logger.send();

代替。

(上面是在OP&#39编辑之前发布的。)

由于setNativeOptions是异步调用(它通过Cordova插件调用),因此在完成后续logger调用之前,它可能无法成功转向捕获。因此,在致电WL.Logger.send();时,尚未收集任何内容。

这样做:

function wlCommonInit() {
    // Common initialization code goes here
    WL.Logger.setNativeOptions({'capture': true})

    .then(function() {

        var logger = WL.Logger.create({pkg: 'mypackage'});

        logger.debug('Hello world - debug');
        //[mypackage] Hello world

        logger.log('Hello world - log');
        //[mypackage] Hello world

        logger.info('Hello world - info');
        //[mypackage] Hello world

        logger.warn('Hello world - warn');
        //[mypackage] Hello world

        logger.error('Hello world - error');
        //[mypackage] Hello world

        WL.Logger.send();

    });
}

答案 1 :(得分:2)

logger:{enabled:true,level:&#39; debug&#39;,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文件中指定要在客户端设备中登录的级别。

In the adapter you will get the log messages as an json array.

功能日志(deviceInfo,logMessages){

/ *适配器可以选择处理参数,      例如,将它们转发到后端服务器      保管和进一步分析。

 The deviceInfo object may look like this:
 {
   "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 only
   "os.version":    "3.4.0-qemu+"     // Android only
  }
  The logMessages parameter is a JSON array 
  that contains JSON object elements, and might look like this:

    [{
      "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 ...

希望这对你有用。

确保使用设备对其进行测试。

答案 2 :(得分:1)

请务必检查服务器端日志。适配器描述符文件中的audit="true"将在服务器日志(WebSphere Liberty上的messages.log)中打印传递给适配器的参数。