• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go正则解析log文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

解析log:
下载需要解析的log

wget https://gist.githubusercontent.com/clanchun/2b5e07cda53718ccbf64f62fb31900c8/raw/64be7f018973717dd5faa7be2bfb817f50ed05bb/access.log

package main

import (
	"bufio"
	"io"
	"os"
	"fmt"
	"regexp"
	"strings"
)

var (
	filePath string
	logReg = `TCP_HIT/([0-9][0-9][0-9]) [0-9]+ [A-Z]+ http://c13.adrise.tv/04C0BF/v2/sources/content-owners/[0-9a-z]+/([0-9]+)/`
	logMap = make(map[string]int)
)

func init() {
	filePath =os.Args[1]
}

func processLog(contents string) {
	re := regexp.MustCompile(logReg)
	matches := re.FindAllStringSubmatch(contents, -1)
	for _, m := range matches {
		key := m[1]+ "_" +m[2]
		count, ok := logMap [ key ]
		if (ok) {
			logMap [ key ] = count + 1
		} else {
			logMap [ key ] = 1
		}
	}
}

func readLine(fileName string, handler func(string)) error {
	f, err := os.Open(fileName)
	if err != nil {
		return err
	}
	buf := bufio.NewReader(f)
	for {
		line, err := buf.ReadString('\n')
//TrimSpace 将删除 s 首尾连续的的空白字符 line = strings.TrimSpace(line) handler(line) if err != nil { if err == io.EOF { return nil } return err } } return nil } func main() { //filePath = "/data/access.log" if err := readLine(filePath, processLog); err != nil { panic(err) } for log:= range logMap { fmt.Println(log, "appear count: ", logMap [log]) } }

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
理解Go标准库中的atomic.Value类型发布时间:2022-07-10
下一篇:
用go iris 写的一个网页版文件共享应用(webapp) - pu369com发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap