[![GoDoc](https://godoc.org/github.com/vjeantet/grok?status.svg)](https://godoc.org/github.com/vjeantet/grok)
[![Build Status](https://travis-ci.org/vjeantet/grok.svg)](https://travis-ci.org/vjeantet/grok)
[![Coverage Status](https://coveralls.io/repos/vjeantet/grok/badge.png?branch=master)](https://coveralls.io/r/vjeantet/grok?branch=master)
[![Go Report Card](http://goreportcard.com/badge/vjeantet/grok)](http:/goreportcard.com/report/vjeantet/grok)
[![Documentation Status](https://readthedocs.org/projects/grok-lib-for-golang/badge/?version=latest)](https://readthedocs.org/projects/grok-lib-for-golang/?badge=latest)
# grok
A simple library to parse grok patterns with Go.
# Installation
Make sure you have a working Go environment.
```sh
go get github.com/vjeantet/grok
```
# Use in your project
```go
import "github.com/vjeantet/grok"
```
# Usage
## Available patterns and custom ones
By default this grok package contains only patterns you can see in patterns/grok-patterns file.
When you want to add a custom pattern, use the grok.AddPattern(nameOfPattern, pattern), see the example folder for an example of usage.
You also can load your custom patterns from a file (or folder) using grok.AddPatternsFromPath(path), or PatterndDir configuration.
## Parse all or only named captures
```go
g, _ := grok.New()
values, _ := g.Parse("%{COMMONAPACHELOG}", `127.0.0.1 - - [23/Apr/2014:22:58:32 +0200] "GET /index.php HTTP/1.1" 404 207`)
g, _ = grok.NewWithConfig(&grok.Config{NamedCapturesOnly: true})
values2, _ := g.Parse("%{COMMONAPACHELOG}", `127.0.0.1 - - [23/Apr/2014:22:58:32 +0200] "GET /index.php HTTP/1.1" 404 207`)
```
values is a map with all captured groups
values2 contains only named captures
# Examples
```go
package main
import (
"fmt"
"github.com/vjeantet/grok"
)
func main() {
g, _ := grok.New()
values, _ := g.Parse("%{COMMONAPACHELOG}", `127.0.0.1 - - [23/Apr/2014:22:58:32 +0200] "GET /index.php HTTP/1.1" 404 207`)
for k, v := range values {
fmt.Printf("%+15s: %s\n", k, v)
}
}
```
output:
```
response: 404
bytes: 207
HOSTNAME: 127.0.0.1
USERNAME: -
MONTHDAY: 23
request: /index.php
BASE10NUM: 207
IPV6:
auth: -
timestamp: 23/Apr/2014:22:58:32 +0200
verb: GET
httpversion: 1.1
TIME: 22:58:32
HOUR: 22
COMMONAPACHELOG: 127.0.0.1 - - [23/Apr/2014:22:58:32 +0200] "GET /index.php HTTP/1.1" 404 207
clientip: 127.0.0.1
IP:
ident: -
MONTH: Apr
YEAR: 2014
SECOND: 32
INT: +0200
IPV4:
MINUTE: 58
rawrequest:
```
# Example 2
```go
package main
import (
"fmt"
"github.com/vjeantet/grok"
)
func main() {
g, _ := grok.NewWithConfig(&grok.Config{NamedCapturesOnly: true})
values, _ := g.Parse("%{COMMONAPACHELOG}", `127.0.0.1 - - [23/Apr/2014:22:58:32 +0200] "GET /index.php HTTP/1.1" 404 207`)
for k, v := range values {
fmt.Printf("%+15s: %s\n", k, v)
}
}
```
output:
```
timestamp: 23/Apr/2014:22:58:32 +0200
verb: GET
rawrequest:
bytes: 207
auth: -
request: /index.php
httpversion: 1.1
response: 404
COMMONAPACHELOG: 127.0.0.1 - - [23/Apr/2014:22:58:32 +0200] "GET /index.php HTTP/1.1" 404 207
clientip: 127.0.0.1
ident: -
```