Tail Demo

// tail.TailFile()函数开启goroutine去读取文件,通过channel格式的t.lines传递内容。
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)

  

源码详解

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 func TailFile
// func TailFile(filename string, config Config) (*Tail, error) func (*Tail) Cleanup
// func (tail *Tail) Cleanup() func (*Tail) Stop ¶ Uses
// func (tail *Tail) Stop() error func (*Tail) StopAtEOF
// func (tail *Tail) StopAtEOF() error func (*Tail) Tell
// func (tail *Tail) Tell() (offset int64, err error)

 

Demo

package main

import (
"fmt"
"github.com/hpcloud/tail"
) func main() {
var (
line *tail.Line
ok bool
)
// log文件名
fileName := "./log.log"
// 设置config
config := tail.Config{
Location: &tail.SeekInfo{
Offset: 0,
Whence: 0,
},
Poll: true,
ReOpen: true,
MustExist: false,
Follow: true,
}
// 创建tail句柄
tails, err := tail.TailFile(fileName, config)
if err != nil {
fmt.Println("error->", err)
return
}
for {
// 通过管道获取到每条行数据
line, ok = <-tails.Lines
fmt.Println("走这里了" )
if !ok {
fmt.Println("tail file close,fileName:", tails.Filename)
continue
}
fmt.Println("line:", line)
} }

  

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. Pytest学习9-常用插件

    pytest-django:为django应用程序编写测试. pytest-twisted:为twisted应用程序编写测试,启动反应堆并处理测试函数的延迟. pytest-cov:覆盖率报告,与分布 ...

  2. 静态区间第k小 - 整体二分

    蒟蒻终于学会整体二分啦! 思路 实现 丑陋无比的代码 #include <bits/stdc++.h> using namespace std; const int N = 200005; ...

  3. 题解 CF409A 【The Great Game】

    题目传送门. 思路: 首先我们定义\(2\)个字符串,分别存放 TEAM 1 与 TEAM 2 的出招顺序.接着再定义\(2\)个变量,存放 TEAM 1 与 TEAM 2 的分数. string s ...

  4. Go生成随机数

    生成随机数 概念 伪随机数,都是根据一定的算法公式算出来的. 所在包 math/rand 生成随机数的公式需要一个种子数,一般为整数.种子数相同会导致每次启动程序是生成随机数相同,为了避免重复每次生成 ...

  5. 分类问题(一)MINST数据集与二元分类器

    分类问题 在机器学习中,主要有两大类问题,分别是分类和回归.下面我们先主讲分类问题. MINST 这里我们会用MINST数据集,也就是众所周知的手写数字集,机器学习中的 Hello World.sk- ...

  6. 解决报错Failed to start LSB: Bring up/down networking:MAC地址导致

    1.场景描述,我在电脑里装好的虚拟机,今天突然就网络无法打开,并出现如下报错: [root@ansible-control ~]# systemctl start networkJob for net ...

  7. MATLAB一些常用的function

    在MATLAB中一些常用的算数符号与我们平时所用的不同,比如:根号,平方,e,以及对数函数等. (1)平方:a^2 意思为a的平方,亦可以写成a*a: (2)根号:sqrt(x)意思为对x开根号,x既 ...

  8. 【转载】 __declspec(dllexport) 和__declspec(dllimport)

    转自:http://www.cppblog.com/Dutyboy/archive/2010/11/15/133699.html __declspec(dllexport)   __declspec( ...

  9. Spring事物白话文

    脏读:一个事物读到了另外一个事物中尚未提交的数据: 幻读:A事物读到了B事物新增的数据:白话一点就是读到了别人insert的语句: 不可重复读:A事物读取了B事物更改的数据:白话一点就是我两次sele ...

  10. MYSQL之路练习题

    题目换成求平均薪水的等级最高的部门的部门名称