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的头文件. 产生原因:我们需要配置头文件的搜索路径,告诉系统头文件的路径 ...
随机推荐
- vue animate.css训练动画案例 列表循环
制作目标动画:向上入场添加数据,点击数据右滑动离场 简单页面效果: 实现代码如下: <!DOCTYPE html> <html> <head> <meta c ...
- 判断是否网络连通 .net Ping
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- 互联网的“ip分组交换技术”
(1)从名字分析 从“ip分组交换”这个名字中,我们看看涉及哪些事情. 1)交换 主要涉及两类交换. · 交换机:负责网内部数据交换 · 路由器:负责网间的数据交换. ip分组交换技术的核心就是路由器 ...
- Mabitis中的#与$符号区别及用法介绍
这篇文章主要介绍了Mabitis中的 #{}与 ${} 符号区别,需要的朋友可以参考下 一.介绍 mybatis 中使用 Mapper.xml里面的配置进行 sql 查询,经常需要动态传递参数,例 ...
- C# asp.net 配置文件连接sql 数据库
先引用 using System.Configuration;//配置文件using System.Data.SqlClient; 我这里使用的是SqlServer 2008 sa 用户 密码也为s ...
- vue自定义日期选择,类似美团日期选择,日历控件,vue日历区间选择
一个日历的控件,基于vue的,可以日历区间选择,可用于酒店日历区间筛选,动手能力强,可以修改成小程序版本的,先上效果图 里面的颜色样式都是可以修改的 选择范围效果 话不多说,直接上干货,代码可以直接复 ...
- wamp 增加mongodb拓展 安装
安装环境: windows 7 64bit php 5.5.12 确认环境参数: 1.在phpinfo() 中查看compiler 2.在phpinfo() 中查看thread safety,线程是否 ...
- 【转】mathnet 使用方法介绍
转载自:http://blog.csdn.net/c914620529/article/details/50393223 在C#中使用mathnet,需要利用using引入相关类 矩阵运算的相关类: ...
- DataFrames,Datasets,与 SparkSQL
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 只要没有给String[]数组new 空间,那么他就只是一个引用
public class Test1 { @Test public void test(){ String[] values = {"good", "morning&qu ...