我在Google上搜索了很多可能的答案,但是没有运气。我正在尝试从事件日志(伪代码)中提取以下内容:
select events
where
event date/time between FromDateTime and ToDateTime
and
((Level<=2) // error, critical only
or
((Level<=x) and Provider[Name] in a specific list) // any messages for these apps
)
(第二个“级别”表达式是允许用户指定是否包含参考消息或警告和更高级别的限制,所以我不能只是丢弃它。)
以下是我尝试使用的(最新)表达式-失败。
string queryString =
"*[System[TimeCreated[@SystemTime>='" + dFrom + "' and @SystemTime<='" + dTo + "']]] " +
" and " +
"(*[System[Level<=2]]" +
" or " +
" ( " +
" *[System[Provider[@Name='<1st name>' or @Name='<2nd name>' or @Name='<3rd name>]] " +
" and " +
"System[Level<=" + maxLevel.ToString() + "]]" +
")" +
");"
我是要创建一个对事件日志查询评估器来说太难的表达式,还是在表达式中出现一个简单的错误? 我一直在尝试各种形式的表达。看来“级别”过滤器只是被忽略了,为什么?
答案 0 :(得分:1)
***啊! -我想我找到了。事件日志级别枚举为:
1 - Critical alert
2 - Error
3 - Warning
4 - Informational
5 - Logs at all levels
... and ...
0 - Undefined - indicates logs at all levels
事实证明,Microsoft组件中的某些“信息”日志条目使用级别0而不是4,因此这些信息正在由过滤器获取。 我认为日志条目(尤其是Microsoft的日志条目)将使用适当的级别是错误的。
我将需要明确查找(级别= 1或级别= 2)-级别<= 2将获取各种Microsoft“信息”日志条目。
对于任何感兴趣的人-最终可行的查询是:
*[System[TimeCreated[@SystemTime>='2018-07-30T17:22:30.000Z'
and @SystemTime<='2018-07-30T20:22:30.000Z']
and (Level=1 or Level=2 or
(Provider[@Name='Application Error' or @Name='Application Hang']
and (Level=1 or Level=2 or Level=3 or Level=4)))]]
答案 1 :(得分:0)
在您发布的代码中我可以看到两个问题。
variable "a_records" { default = [
["@" , "5.6.7.8"],
["@" , "7.6.7.8"],
["@" , "9.9.9.9"],
["self", "7.10.11.12"],
["self", "11.11.111.11"],
["self", "12.12.12.12"],
["self", "13.13.13.13"],
["www" , "14.14.14.14"],
["www" , "14.14.14.14"]
]
}
output "a_records_in_dns_module" {
value = "${var.a_records}"
}
应该为@Name='<3rd name>]]
@Name='<3rd name>']]
的第二个过滤器应为*/System/Level
从您的伪代码和共享的内容看,您似乎可以将某些逻辑合并并移动到*[System[Level<=" + maxLevel.ToString() + "]]] "
的谓词过滤器中,并使用XPath,例如:
*/System