Tail Demo

  1. // tail.TailFile()函数开启goroutine去读取文件,通过channel格式的t.lines传递内容。
  2. t, err := tail.TailFile("/var/log/nginx.log", tail.Config{Follow: true})
  3. if err != nil {
  4. fmt.Println(err) //如果文件不存在,会阻塞并打印Waiting for my.log to appear...,直到文件被创建
  5. }
  6. for line := range t.Lines {
  7. fmt.Println(line.Text)

  

源码详解

  1. type Config struct {
  2. // File-specifc
  3. Location *SeekInfo // 指定开始读取的位置
  4. ReOpen bool //true则文件被删掉阻塞等待新建该文件,false则文件被删掉时程序结束
  5. MustExist bool //true则没有找到文件就报错并结束,false则没有找到文件就阻塞保持住
  6. Poll bool // 使用Linux的Poll函数,poll的作用是把当前的文件指针挂到等待队列
  7. Pipe bool // Is a named pipe (mkfifo)
  8. RateLimiter *ratelimiter.LeakyBucket
  9.  
  10. // Generic IO
  11. Follow bool //true则一直阻塞并监听指定文件,false则一次读完就结束程序
  12. MaxLineSize int // If non-zero, split longer lines into multiple lines
  13.  
  14. // Logger, when nil, is set to tail.DefaultLogger
  15. // To disable logging: set field to tail.DiscardingLogger
  16. Logger logger
  17.  
  18. func TailFile
  19. // func TailFile(filename string, config Config) (*Tail, error)
  20.  
  21. func (*Tail) Cleanup
  22. // func (tail *Tail) Cleanup()
  23.  
  24. func (*Tail) Stop Uses
  25. // func (tail *Tail) Stop() error
  26.  
  27. func (*Tail) StopAtEOF
  28. // func (tail *Tail) StopAtEOF() error
  29.  
  30. func (*Tail) Tell
  31. // func (tail *Tail) Tell() (offset int64, err error)

 

Demo

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "github.com/hpcloud/tail"
  6. )
  7.  
  8. func main() {
  9. var (
  10. line *tail.Line
  11. ok bool
  12. )
  13. // log文件名
  14. fileName := "./log.log"
  15. // 设置config
  16. config := tail.Config{
  17. Location: &tail.SeekInfo{
  18. Offset: 0,
  19. Whence: 0,
  20. },
  21. Poll: true,
  22. ReOpen: true,
  23. MustExist: false,
  24. Follow: true,
  25. }
  26. // 创建tail句柄
  27. tails, err := tail.TailFile(fileName, config)
  28. if err != nil {
  29. fmt.Println("error->", err)
  30. return
  31. }
  32. for {
  33. // 通过管道获取到每条行数据
  34. line, ok = <-tails.Lines
  35. fmt.Println("走这里了" )
  36. if !ok {
  37. fmt.Println("tail file close,fileName:", tails.Filename)
  38. continue
  39. }
  40. fmt.Println("line:", line)
  41. }
  42.  
  43. }

  

Go第三方库之tail的更多相关文章

  1. Egret 集成第三方库 记录

    引入第三方库pureMVC 这次我们要使用到一个mvc开发框架-pureMVC,熟悉as3的朋友一定也对这个框架不陌生吧.不熟悉的也没关系,这个框架不是这次的主角.我们从 这里 下载pureMVC的T ...

  2. iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43      阅读:630      评论:0      收藏:0   ...

  3. Qt-导入第三方库

    Qt提供了显式和隐式导入第三方库方法,本文只介绍显示导入方法. 第三方提供的库文件包括ControlCAN.h,ControlCAN.dll和ControlCAN.lib.将ControlCAN.h和 ...

  4. ios常用的第三方库

    ios开发中有可能用到的第三方库进行记录一下: 注:资料信息来源于网络 自己整理  https://developer.apple.com/reference(苹果官方文档) https://gith ...

  5. Facebook Paper使用的第三方库

    Facebook Paper使用的第三方库 第三方库名 简介 链接 ACE code editor https://github.com/ajaxorg/ace Appirater 用户评分组件 ht ...

  6. iOS开发之第三方库的学习--hpple的使用

    前言:因为在开发中很可能会遇到html解析,如果后台提供的数据只有html数据,或者开发的app需要从web前端的html里获取数据,就需要html解析工具了. 关于HTML解析库,可以阅读:收集几个 ...

  7. iOS真机调试引入第三方库(如友盟等)编译时候,出现错误提示

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: MARK:解决方法:在building Setting 中设置bitCode ...

  8. Pycharm如何添加第三方库和插件

    首先打开Pycharm,点击左上角  >>File  >>Setting . 打开之后点击 >>PRoject :untitled   >>Projec ...

  9. import第三方库的头文件找不到的错误

    问题描述:使用cocoapods导入了第三方库,import该第三方库的某个头文件,然后编译报错找不到这个头文件内所import的头文件. 产生原因:我们需要配置头文件的搜索路径,告诉系统头文件的路径 ...

随机推荐

  1. numpy学习(三)

    练习篇(Part 3) 31. 略 32. Is the following expressions true? (★☆☆) np.sqrt(-1) == np.emath.sqrt(-1) prin ...

  2. [CF891C] Envy - Kruskal,并查集

    给出一个 n 个点 m条边的无向图,每条边有边权,共 Q次询问,每次给出 \(k\)条边,问这些边能否同时在一棵最小生成树上. Solution 所有最小生成树中某权值的边的数量是一定的 加完小于某权 ...

  3. openlayers 保存当前地图View为图片

    /** * 保存地图为图片工具栏 */function addMapToolSavePicture() { var saveElement = document.createElement('a'); ...

  4. 前端 form select js处理

    1.代码如下 function initializeSelect(data) { var area = $("#ServiceName"); area.find("opt ...

  5. 2019-08-15 纪中NOIP模拟B组

    T1 [JZOJ3455] 库特的向量 题目描述 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃 ...

  6. xshell连接本地虚拟机中的centos

    1. 一开始Xshell连接不上(设置为DHCP 动态IP)虚拟机上的centos8 参考这篇博文,将centos上的DHCP改为static 静态IP xshell连接本地虚拟机中的centos 2 ...

  7. linux异常 - 网卡故障

    问题描述: 弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的设备 解决方案: 排错步骤如下: 1:查看系统是否识别相应网卡(发现没有eth0网卡存在): 根据 ...

  8. mac环境下,pycharm2018 配置 anaconda。

    2018版的pycharm与之前的版本在配置anaconda上流程略有不同.直接上图 1.新建工程,展开会看到系统默认的编译环境名叫virtualenv,是基于python3.5的环境(如果没有安装过 ...

  9. python之路xml模块补充

    创建一个子节点一共有三个方式 创建一个子节点2.3

  10. 阻止click点击事件

    遇到一个屏蔽点击事件,以前一般都是通过js控制,阻止事件,今天看到css加一个样式就能屏蔽,来记录一下 //css禁用鼠标点击事件 .test { pointer-events: none; } 随便 ...