go与tail(github.com/hpcloud/tail)

参考

https://github.com/hpcloud/tail


 linux中的tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容。

这个包实现了类似的功能。

t, err := tail.TailFile("/var/log/nginx.log", tail.Config{Follow: true})
if err != nil {
	fmt.Println(err)  //如果文件不存在,会阻塞并打印Waiting for my.log to appear...,直到文件被创建
}
for line := range t.Lines {
    fmt.Println(line.Text)
}

 tail.TailFile()函数开启goroutine去读取文件,通过channel格式的t.lines传递内容。

其他配置项

type Config struct {
	// File-specifc
	Location    *SeekInfo // 指定开始读取的位置
	ReOpen      bool      //true则文件被删掉阻塞等待新建该文件,false则文件被删掉时程序结束
	MustExist   bool      //true则没有找到文件就报错并结束,false则没有找到文件就阻塞保持住
	Poll        bool      // 使用Linux的Poll函数,poll的作用是把当前的文件指针挂到等待队列
	Pipe        bool      // Is a named pipe (mkfifo)
	RateLimiter *ratelimiter.LeakyBucket

	// Generic IO
	Follow      bool //true则一直阻塞并监听指定文件,false则一次读完就结束程序
	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
}

location类似os.seek,举例 

seek := &tail.SeekInfo{Offset:5,Whence:os.SEEK_CUR}
t, err := tail.TailFile("my.log", tail.Config{Location:seek})

offset //Whence之后,再偏移n个字符开始读,偏移量大于一行内容时换行继续计算(换行符\n计算在内占两个字符,但是不打印出来)
SEEK_SET int = 0 // 跳到文件的开始位置
SEEK_CUR int = 1 // 跳到文件的当前位置(好像和设置为开始位置一样)
SEEK_END int = 2 // 跳到文件最后,不读取文件里原有的内容,从新加入的开始读

t.Tell()返回当前offset

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值