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 }