我有一个Java应用程序,它将log4j2日志发送到App Insights。当记录异常时,我基本上以字符串格式传递JSON,并且类似这样的异常
JSONObject json=new JSONObject();
json.put(...)
....
log.error(json.toString(), exception)
在App Insights端;消息以JSON格式存储在customDimensions下,且记录器消息的键为JSON。
从此存储的信息中,我要进行查询,以获取statusCode> 200和statusCode <300的所有异常消息。我尝试了几次查询,但无法提取这些特定的异常消息。
我尝试的查询之一是
exceptions
| limit 50
| where toint(customDimensions["Logger Message"].statusCode) > 200
and toint(customDimensions["Logger Message"].statusCode) < 300
任何帮助将不胜感激
更新:我正在运行查询
exceptions
| limit 50
| project s1 = customDimensions["Logger Message"]
| extend s2 = s1.statusCode
| extend s3 = toint(s2)
| extend s4 = s3 >= 200 and s3 < 300
从查询语言的角度来看,您做的是正确的(假设您实际需要> 200
而不是>= 200
,这样示例中的查询实际上将返回您粘贴了快照的记录)] >
print customDimensions = dynamic({ "Logger Message":{ "message":"Test 1 and Test 2", "statusCode": 200 } }) | project toint(customDimensions['Logger Message'].statusCode)
这将返回单个表,单行,单列以及值
200
。
很难完全理解基于快照的情况下实际数据的外观-您可以尝试逐步调试(下面的s1,...,s4
)并查看其“中断”的位置。
parse_json()
,以便实际上可以访问其中的动态属性。exceptions
| limit 50
| project s1 = customDimensions["Logger Message"]
| extend s2 = s1.statusCode
| extend s3 = toint(s2)
| extend s4 = s3 > 200 and s3 < 300