2016-09-22 42 views
2

我試圖與嵌套屬性的JSON值記錄到logzio通過的NodeJS如何登錄嵌套對象與彈性(ELK)堆棧

ELK堆棧

的代碼是:

var logger = require('logzio-nodejs').createLogger({ 
    token: config.LOGZIO_API_KEY 
}); 


// sending text 
logger.log('This is a log message'); 

// sending an object 
var obj = { 
    message: 'Some log message', 
    param1: 'val1', 
    param2: 'val2' 
}; 

logger.log(obj); 

這工作正常,但如果我想記錄嵌套數據,如:

// sending an object 
var obj = { 
    message: 'Some log message', 
    param1: { 
    a : 'b', 
    c : 'd' 
    }, 
    param2: 'val2' 
}; 

這將返回一個錯誤:

{"type":"mapper_parsing_exception","reason":"failed to parse [param1]","caused_by":{"type":"illegal_argument_exception","reason":"unknown property [a]"}} 

我可以調整什麼,可以讓我記錄這個嵌套的對象?

回答

2

這是因爲當您將param1記錄爲字符串時,ES創建了一個字符串類型的字段。

此後,您嘗試將param1作爲對象登錄,並且與字符串類型衝突。

但是,你絕對可以登錄一個嵌套的對象,但你必須給它的另一個名稱已經存在的領域,說param3,應該工作:

// sending an object 
var obj = { 
    message: 'Some log message', 
    param3: { 
    a : 'b', 
    c : 'd' 
    }, 
    param2: 'val2' 
}; 
+0

真棒。如果我刪除'param1'是一個字符串的所有索引,它會爲我解決這個問題嗎? (PS:thx的答案!) – Antoine

+0

是的,它應該。 – Val