12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package gonx
- import (
- "io"
- )
- // Log file reader. Use specific constructors to create it.
- type Reader struct {
- file io.Reader
- parser *Parser
- entries chan *Entry
- }
- // Creates reader for custom log format.
- func NewReader(logFile io.Reader, format string) *Reader {
- return &Reader{
- file: logFile,
- parser: NewParser(format),
- }
- }
- // Creates reader for nginx log format. Nginx config parser will be used
- // to get particular format from the conf file.
- func NewNginxReader(logFile io.Reader, nginxConf io.Reader, formatName string) (reader *Reader, err error) {
- parser, err := NewNginxParser(nginxConf, formatName)
- if err != nil {
- return nil, err
- }
- reader = &Reader{
- file: logFile,
- parser: parser,
- }
- return
- }
- // Get next parsed Entry from the log file. Return EOF if there is no Entries to read.
- func (r *Reader) Read() (entry *Entry, err error) {
- if r.entries == nil {
- r.entries = MapReduce(r.file, r.parser, new(ReadAll))
- }
- entry, ok := <-r.entries
- if !ok {
- err = io.EOF
- }
- return
- }
|