Build Status Build status

Go package for tail-ing files

A Go package striving to emulate the features of the BSD tail program.

t, err := tail.TailFile("/var/log/nginx.log", tail.Config{Follow: true})
for line := range t.Lines {

See API documentation.

Log rotation

Tail comes with full support for truncation/move detection as it is designed to work with log rotation tools.


go get

Windows support

This package needs assistance for full Windows support.

Expand ▾ Collapse ▴




This section is empty.


View Source
var (
	// DefaultLogger is used when Config.Logger == nil
	DefaultLogger = log.New(os.Stderr, "", log.LstdFlags)
	// DiscardingLogger can be used to disable logging output
	DiscardingLogger = log.New(ioutil.Discard, "", 0)
View Source
var (
	ErrStop = fmt.Errorf("tail should now stop")


func OpenFile

func OpenFile(name string) (file *os.File, err error)


type Config

type Config struct {
	// File-specifc
	Location    *SeekInfo // Seek to this location before tailing
	ReOpen      bool      // Reopen recreated files (tail -F)
	MustExist   bool      // Fail early if the file does not exist
	Poll        bool      // Poll for file changes instead of using inotify
	Pipe        bool      // Is a named pipe (mkfifo)
	RateLimiter *ratelimiter.LeakyBucket

	// Generic IO
	Follow      bool // Continue looking for new lines (tail -f)
	MaxLineSize int  // If non-zero, split longer lines into multiple lines

	// Logger, when nil, is set to tail.DefaultLogger
	// To disable logging: set field to tail.DiscardingLogger
	Logger logger

    Config is used to specify how a file must be tailed.

    type Line

    type Line struct {
    	Text string
    	Time time.Time
    	Err  error // Error from tail

    func NewLine

    func NewLine(text string) *Line

      NewLine returns a Line with present time.

      type SeekInfo

      type SeekInfo struct {
      	Offset int64
      	Whence int // os.SEEK_*

        SeekInfo represents arguments to `os.Seek`

        type Tail

        type Tail struct {
        	Filename string
        	Lines    chan *Line
        	tomb.Tomb // provides: Done, Kill, Dying
        	// contains filtered or unexported fields

        func TailFile

        func TailFile(filename string, config Config) (*Tail, error)

          TailFile begins tailing the file. Output stream is made available via the `Tail.Lines` channel. To handle errors during tailing, invoke the `Wait` or `Err` method after finishing reading from the `Lines` channel.

          func (*Tail) Cleanup

          func (tail *Tail) Cleanup()

            Cleanup removes inotify watches added by the tail package. This function is meant to be invoked from a process's exit handler. Linux kernel may not automatically remove inotify watches after the process exits.

            func (*Tail) Stop

            func (tail *Tail) Stop() error

              Stop stops the tailing activity.

              func (*Tail) StopAtEOF

              func (tail *Tail) StopAtEOF() error

                StopAtEOF stops tailing as soon as the end of the file is reached.

                func (*Tail) Tell

                func (tail *Tail) Tell() (offset int64, err error)

                  Return the file's current position, like stdio's ftell(). But this value is not very accurate. it may readed one line in the chan(tail.Lines), so it may lost one line.


                  Path Synopsis
                  Package ratelimiter implements the Leaky Bucket ratelimiting algorithm with memcached and in-memory backends.
                  Package ratelimiter implements the Leaky Bucket ratelimiting algorithm with memcached and in-memory backends.