log error message when invalid regex is used

closes #2178
This commit is contained in:
Cameron Sparr 2017-02-21 19:50:10 +01:00
parent ed43e1010b
commit a38ebcbe54
3 changed files with 40 additions and 0 deletions

View File

@ -65,6 +65,7 @@ be deprecated eventually.
- [#2390](https://github.com/influxdata/telegraf/issues/2390): Empty tag value causes error on InfluxDB output. - [#2390](https://github.com/influxdata/telegraf/issues/2390): Empty tag value causes error on InfluxDB output.
- [#2380](https://github.com/influxdata/telegraf/issues/2380): buffer_size field value is negative number from "internal" plugin. - [#2380](https://github.com/influxdata/telegraf/issues/2380): buffer_size field value is negative number from "internal" plugin.
- [#2414](https://github.com/influxdata/telegraf/issues/2414): Missing error handling in the MySQL plugin leads to segmentation violation. - [#2414](https://github.com/influxdata/telegraf/issues/2414): Missing error handling in the MySQL plugin leads to segmentation violation.
- [#2178](https://github.com/influxdata/telegraf/issues/2178): logparser: regexp with lookahead.
## v1.2.1 [2017-02-01] ## v1.2.1 [2017-02-01]

View File

@ -57,6 +57,43 @@ func Benchmark_ParseLine_CustomPattern(b *testing.B) {
benchM = m benchM = m
} }
// Test a very simple parse pattern.
func TestSimpleParse(t *testing.T) {
p := &Parser{
Patterns: []string{"%{TESTLOG}"},
CustomPatterns: `
TESTLOG %{NUMBER:num:int} %{WORD:client}
`,
}
assert.NoError(t, p.Compile())
m, err := p.ParseLine(`142 bot`)
assert.NoError(t, err)
require.NotNil(t, m)
assert.Equal(t,
map[string]interface{}{
"num": int64(142),
"client": "bot",
},
m.Fields())
}
// Verify that patterns with a regex lookahead fail at compile time.
func TestParsePatternsWithLookahead(t *testing.T) {
p := &Parser{
Patterns: []string{"%{MYLOG}"},
CustomPatterns: `
NOBOT ((?!bot|crawl).)*
MYLOG %{NUMBER:num:int} %{NOBOT:client}
`,
}
assert.NoError(t, p.Compile())
_, err := p.ParseLine(`1466004605359052000 bot`)
assert.Error(t, err)
}
func TestMeasurementName(t *testing.T) { func TestMeasurementName(t *testing.T) {
p := &Parser{ p := &Parser{
Measurement: "my_web_log", Measurement: "my_web_log",

View File

@ -226,6 +226,8 @@ func (l *LogParserPlugin) parser() {
if m != nil { if m != nil {
l.acc.AddFields(m.Name(), m.Fields(), m.Tags(), m.Time()) l.acc.AddFields(m.Name(), m.Fields(), m.Tags(), m.Time())
} }
} else {
log.Println("E! Error parsing log line: " + err.Error())
} }
} }
} }