diff --git a/parser.go b/parser.go index d9be163..0d3ff13 100644 --- a/parser.go +++ b/parser.go @@ -17,7 +17,7 @@ type Parser struct { // strings parsing regexp. func NewParser(format string) *Parser { re := regexp.MustCompile(`\\\$([a-z_]+)(\\?(.))`).ReplaceAllString( - regexp.QuoteMeta(format), "(?P<$1>[^$3]+)$2") + regexp.QuoteMeta(format), "(?P<$1>[^$3]*)$2") return &Parser{format, regexp.MustCompile(fmt.Sprintf("^%v$", re))} } diff --git a/parser_test.go b/parser_test.go index b85650a..9d36936 100644 --- a/parser_test.go +++ b/parser_test.go @@ -29,7 +29,7 @@ func (suite *ParserTestSuite) TestFormatSaved() { func (suite *ParserTestSuite) TestRegexp() { assert.Equal(suite.T(), suite.parser.regexp.String(), - `^(?P[^ ]+) \[(?P[^]]+)\] "(?P[^"]+)"$`) + `^(?P[^ ]*) \[(?P[^]]*)\] "(?P[^"]*)"$`) } func (suite *ParserTestSuite) TestParseString() { @@ -48,7 +48,18 @@ func (suite *ParserTestSuite) TestParseInvalidString() { line := `GET /api/foo/bar HTTP/1.1` _, err := suite.parser.ParseString(line) assert.Error(suite.T(), err) - // TODO test empty value +} + +func (suite *ParserTestSuite) TestEmptyValue() { + line := `89.234.89.123 [08/Nov/2013:13:39:18 +0000] ""` + expected := NewEntry(Fields{ + "remote_addr": "89.234.89.123", + "time_local": "08/Nov/2013:13:39:18 +0000", + "request": "", + }) + entry, err := suite.parser.ParseString(line) + assert.NoError(suite.T(), err) + assert.Equal(suite.T(), entry, expected) } func TestNginxParser(t *testing.T) {