首页 > 其他分享 >[golang]使用tail追踪文件变更

[golang]使用tail追踪文件变更

时间:2023-08-01 23:44:57浏览次数:41  
标签:err fmt golang tail 日志 logfile os 追踪

简介

借助 github.com/hpcloud/tail ,可以实时追踪文件变更,达到类似shell命令tail -f的效果。

示例代码

以下示例代码用于实时读取nginx的access.log日志文件,读取到后输出到控制台。如果nginx日志做了json格式化,还可以解析读取到的内容,对日志进行更多处理,比如日志内容写入数据库、做日志告警等,对于访问量较小的系统来说,这样就不需要消耗很多资源去搭建ELK、Loki等专门的日志监控系统。

package main

import (
	"flag"
	"fmt"
	"io"
	"os"

	"github.com/hpcloud/tail"
)

var (
	logfile = flag.String("f", "access.log", "日志文件路径")
)

func main() {
	flag.Parse()
	// 判断文件是否存在
	if _, err := os.Stat(*logfile); os.IsNotExist(err) {
		fmt.Printf("Error! %s not found\n", *logfile)
		os.Exit(1)
	}

	// 不从文件开始读, 而是从文件当前末尾开始读
	// Go 1.20推荐使用 io.SeekEnd, 老版本可能需要改为os.SEEK_END
	seek := &tail.SeekInfo{Offset: 0, Whence: io.SeekEnd}
	t, err := tail.TailFile(*logfile, tail.Config{
		Follow:   true,
		Location: seek,
	})
	if err != nil {
		fmt.Println(err)
	}

	for line := range t.Lines {
		fmt.Println(line.Text)
	}
}

参考

标签:err,fmt,golang,tail,日志,logfile,os,追踪
From: https://www.cnblogs.com/XY-Heruo/p/17599457.html

相关文章

  • Lazada shoppe Get Lazada Product Details API Return Value Description
     lazada.item_getRequestParametersRequestParameters:num_iid=267690734&nation=co.thParameterDescription:num_iid:lazadacommodityID(IstheIDofthecorrespondingcountryanddifferentcountriescannotbecommon)nation:countryTheoptionalvaluesfo......
  • VScode 中golang 单元测试,解决单元测试超时timeout30s
    目的:单元测试的主要目的是验证代码的每个单元(函数、方法)是否按照预期工作。提示:解决单元测试超时30s的问题在序号4 1准备以_test.go结尾文件和导入testing包在命名文件时需要让文件必须以_test结尾,在文件中导入testing包。单元测试源码文件可以由多个测试用例组成,每个测试......
  • 跳表的原理--Golang 实现一个简单跳表
    前言最近在看《Redis设计与实现》这本书,书中简单描述了跳表的性质和数据结构,但对它的具体实现没有多讲。书里对跳表结构的描述是这样的:跳跃表节点:typedefstructzskiplistNode{//后退指针structzskiplistNode*backward;//分值doublescore;//......
  • Golang 接收Get、Post请求
    Get1、接收funcGetGet(whttp.ResponseWriter,r*http.Request){deferfunc(){r.Body.Close()ifr:=recover();r!=nil{stackBytes:=debug.Stack()fmt.Println("r",r,"Error",stackByte......
  • 行业追踪,2023-07-31,板块多数都是指向消费
    自动复盘2023-07-31凡所有相,皆是虚妄。若见诸相非相,即见如来。k线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让市场来告诉你跟踪板块总结:成交额超过100亿排名靠前,macd柱由绿转红成交量要大于均线有必要给每个行......
  • 链路追踪之选型Zipkin、Pinpoint、SkyWalking、CAT、jaeger
    https://www.pianshen.com/article/51782363885/ https://blog.csdn.net/A123638/article/details/123117142......
  • golang-groutine有序调度
    本质上还是通过channel的队列性质(FIFO)来实现的,以这个思路为主。1functest1(){2varwgsync.WaitGroup34varch1=make(chanint,1)5varch2=make(chanint,1)6varch3=make(chanint,1)7varprintSelffunc(pCont......
  • Golang漏洞管理
    原文在这里概述Go帮助开发人员检测、评估和解决可能被攻击者利用的错误或弱点。在幕后,Go团队运行一个管道来整理关于漏洞的报告,这些报告存储在Go漏洞数据库中。各种库和工具可以读取和分析这些报告,以了解特定用户项目可能受到的影响。这个功能集成到pkg.go.dev和一个新的命令行......
  • GoRedisLock:Golang保障数据一致性的分布式锁解决方案
    在现代分布式系统中,多个节点之间共享资源是常见的需求。然而,并发访问共享资源可能导致数据不一致性和竞争条件。为了解决这些问题,我们需要引入分布式锁。GoRedisLock是一个出色的分布式锁库,它结合了Go语言和Redis的优势,提供了稳定高效的分布式并发控制解决方案。**项目地址:**htt......
  • golang打印指针切片/数组的值
     FmtSlice2String方法可以将指针切片的值打印处理packagemainimport( "fmt" "reflect")typeStudentstruct{ Namestring`json:"name"cn:"名字"` Ageuint64`json:"age"cn:"年龄"`}funcmain(){ s:=mak......