开源一个自己写的并发日志监听处理器,各位大佬来看看

Taoey · · 941 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

项目地址:[go-log-listener](https://github.com/Taoey/go-log-listener) 这个项目吧,源码简单,主要当时为了学习channel和goroutine的相关特性,才有了这个项目,刚刚入门的gopher可以借鉴一下,如果你是个大佬,欢迎提建议意见,后序会持续更新,路过求个star~(卑微代码仔) # go-log-listener > 本项目始于2019年春节期间,因新型冠状病毒爆发,在家里闲着无聊,遂进行Golang的并发编程学习,在看完慕课网的《 基于Golang协程实现流量统计系统》后有感而发,并结合《Go语言并发之道》进行Go语言的深入学习了解,并最终抽象成为一个简单易用的日志监听库。本人编程能力有限,如有设计考虑不周,还请大佬进行指点。 ## 一、功能介绍 为了更加便捷的实现日志文件监听存储功能。 - [x] 自定义并发数量 - [x] 自定义日志处理 - [ ] 自定义文件监听起始行数 - [x] 终止监听 - [x] Nginx监听实例:模拟Nginx日志生成,并结合Redis实现PV,UV统计存储 ## 二、快速开始 ### 安装 ```bash go get github.com/taoey/go-log-listener ``` ### 使用 如下实例代码模拟了日志文件处理流程(可结合[example/nginx_log_listener_test.go](example/nginx_log_listener_test.go)理解) `access.log`为同级目录下的日志文件,其内容为: ``` {"addr":"192.168.35.87","time":"03/Feb/2020:16:57:03 +0800","req":"GET /048.png HTTP/1.1"} {"addr":"192.168.3.40","time":"08/Feb/2020:16:57:03 +0800","req":"GET /018.png HTTP/1.1"} {"addr":"192.168.10.76","time":"06/Feb/2020:16:57:03 +0800","req":"GET /089.png HTTP/1.1"} ``` 代码示例: ```go logListener := listener.NewDefaultLogListener("access.log") logHandler:= func(str string) interface{} { fmt.Print("日志解析:",str) return str } logStorageHandler := func(log interface{}) { fmt.Print("日志存储:",log) } logListener.SetHandler(logHandler,logStorageHandler) logListener.Run() time.Sleep(time.Minute * 3) ``` 控制台打印: ``` 日志解析:{"addr":"192.168.3.40","time":"08/Feb/2020:16:57:03 +0800","req":"GET /018.png HTTP/1.1"} 日志解析:{"addr":"192.168.10.76","time":"06/Feb/2020:16:57:03 +0800","req":"GET /089.png HTTP/1.1"} 日志存储:{"addr":"192.168.3.40","time":"08/Feb/2020:16:57:03 +0800","req":"GET /018.png HTTP/1.1"} 日志存储:{"addr":"192.168.10.76","time":"06/Feb/2020:16:57:03 +0800","req":"GET /089.png HTTP/1.1"} 日志解析:{"addr":"192.168.35.87","time":"03/Feb/2020:16:57:03 +0800","req":"GET /048.png HTTP/1.1"} 日志存储:{"addr":"192.168.35.87","time":"03/Feb/2020:16:57:03 +0800","req":"GET /048.png HTTP/1.1"} ``` ## 三、实现原理 ![go-log-listener-data-flow.png](https://static.studygolang.com/200611/31609f9b32892f8de9a048954162cb60.png) 有什么问题欢迎提issue或者去公众号【黄黄的黄豆】联系我哦~

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

941 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传