我public void onClick(View v)
{
PopupMenu menu = new PopupMenu(DialogCheckBox.this, v);
for (String s : limits) { // "limits" its an arraylist
menu.getMenu().add(s);
}
menu.show();
}
的某些行:
business_log
我想根据"关键字"解析此日志。例如2016-11-28 00:00:00.7000 INFO : OneTwoThreeHandler.GetBot
Cannot find a bot: Rak 20000
2016-11-28 00:00:00.7000 INFO : OneTwoThreeHandler.GetBotPlayer
Cannot find a bot: COIN 50000
2016-11-28 00:00:01.4812 INFO : OneTwoThreeHandler.GetBotPlayer
Find a bot: 1219552640:ut:coinu - rak: 6703098 - coin: 2721975
2016-11-28 00:00:01.4812 INFO : OttMatchSolo.Matched
Solo Matched: 1:Rak
,OneTwoThreeHandler.GetBot
,OneTwoThreeHandler.GetBotPlayer
或OneTwoThreeHandler.GetBotPlayer
。
因为每个"关键字",行日志的其余部分是不同的。我认为我可以使用grok条件,任何人都可以告诉我如何?谢谢
答案 0 :(得分:0)
您可以使用,假设message
字段包含您的日志:
if [message] =~ /OneTwoThreeHandler\.GetBotPlayer/ {
...
} else if [message] =~ / OneTwoThreeHandler\.GetBot/ {
...
} else if [message] =~ /OttMatchSolo\.Matched/ {
...
} else {
...
}
每个分支包含这些特定日志的特定配置。
有关logstash配置中的条件的详细信息,请参阅此documentation。
您需要将日志通过多行过滤器/编解码器或与您的出货单一起执行操作,以便您的日志在一行中,如下所示:
2016-11-28 00:00:01.4812 INFO : OttMatchSolo.Matched Solo Matched: 1:Rak
或者你可以在一个grok过滤器中放置多个grok模式:
grok{
match => {
"message" => [
"%{TIMESTAMP_ISO8601} %{LOGLEVEL} : OneTwoThreeHandler.GetBotPlayer %{GREEDYDATA}",
"%{TIMESTAMP_ISO8601} %{LOGLEVEL} : OneTwoThreeHandler.GetBot %{GREEDYDATA}",
"%{TIMESTAMP_ISO8601} %{LOGLEVEL} : OttMatchSolo.Matched %{GREEDYDATA}"
]
}
}
您仍然需要执行多行加入才能发挥作用。