Go第三方库之tail
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的更多相关文章
- Egret 集成第三方库 记录
引入第三方库pureMVC 这次我们要使用到一个mvc开发框架-pureMVC,熟悉as3的朋友一定也对这个框架不陌生吧.不熟悉的也没关系,这个框架不是这次的主角.我们从 这里 下载pureMVC的T ...
- iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43 阅读:630 评论:0 收藏:0 ...
- Qt-导入第三方库
Qt提供了显式和隐式导入第三方库方法,本文只介绍显示导入方法. 第三方提供的库文件包括ControlCAN.h,ControlCAN.dll和ControlCAN.lib.将ControlCAN.h和 ...
- ios常用的第三方库
ios开发中有可能用到的第三方库进行记录一下: 注:资料信息来源于网络 自己整理 https://developer.apple.com/reference(苹果官方文档) https://gith ...
- Facebook Paper使用的第三方库
Facebook Paper使用的第三方库 第三方库名 简介 链接 ACE code editor https://github.com/ajaxorg/ace Appirater 用户评分组件 ht ...
- iOS开发之第三方库的学习--hpple的使用
前言:因为在开发中很可能会遇到html解析,如果后台提供的数据只有html数据,或者开发的app需要从web前端的html里获取数据,就需要html解析工具了. 关于HTML解析库,可以阅读:收集几个 ...
- iOS真机调试引入第三方库(如友盟等)编译时候,出现错误提示
用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: MARK:解决方法:在building Setting 中设置bitCode ...
- Pycharm如何添加第三方库和插件
首先打开Pycharm,点击左上角 >>File >>Setting . 打开之后点击 >>PRoject :untitled >>Projec ...
- import第三方库的头文件找不到的错误
问题描述:使用cocoapods导入了第三方库,import该第三方库的某个头文件,然后编译报错找不到这个头文件内所import的头文件. 产生原因:我们需要配置头文件的搜索路径,告诉系统头文件的路径 ...
随机推荐
- numpy学习(三)
练习篇(Part 3) 31. 略 32. Is the following expressions true? (★☆☆) np.sqrt(-1) == np.emath.sqrt(-1) prin ...
- [CF891C] Envy - Kruskal,并查集
给出一个 n 个点 m条边的无向图,每条边有边权,共 Q次询问,每次给出 \(k\)条边,问这些边能否同时在一棵最小生成树上. Solution 所有最小生成树中某权值的边的数量是一定的 加完小于某权 ...
- openlayers 保存当前地图View为图片
/** * 保存地图为图片工具栏 */function addMapToolSavePicture() { var saveElement = document.createElement('a'); ...
- 前端 form select js处理
1.代码如下 function initializeSelect(data) { var area = $("#ServiceName"); area.find("opt ...
- 2019-08-15 纪中NOIP模拟B组
T1 [JZOJ3455] 库特的向量 题目描述 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃 ...
- xshell连接本地虚拟机中的centos
1. 一开始Xshell连接不上(设置为DHCP 动态IP)虚拟机上的centos8 参考这篇博文,将centos上的DHCP改为static 静态IP xshell连接本地虚拟机中的centos 2 ...
- linux异常 - 网卡故障
问题描述: 弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的设备 解决方案: 排错步骤如下: 1:查看系统是否识别相应网卡(发现没有eth0网卡存在): 根据 ...
- mac环境下,pycharm2018 配置 anaconda。
2018版的pycharm与之前的版本在配置anaconda上流程略有不同.直接上图 1.新建工程,展开会看到系统默认的编译环境名叫virtualenv,是基于python3.5的环境(如果没有安装过 ...
- python之路xml模块补充
创建一个子节点一共有三个方式 创建一个子节点2.3
- 阻止click点击事件
遇到一个屏蔽点击事件,以前一般都是通过js控制,阻止事件,今天看到css加一个样式就能屏蔽,来记录一下 //css禁用鼠标点击事件 .test { pointer-events: none; } 随便 ...