GoLang fsnotify 实现目录中日志文件大小监控
需求:
需要监听一个目录中所有文件,当文件大小增加到一定阀值,则将文件清空。
需要引入第三方包:"github.com/howeyc/fsnotify"
代码如下:
package main import (
"log"
"github.com/howeyc/fsnotify"
"os"
"fmt"
"strconv"
) func usage() {
fmt.Println("")
fmt.Printf("Usage: %s Montior-directory file-max-bytes-limit\n",os.Args[0])
fmt.Println("For example:")
fmt.Printf("%s /opt/logs 1024\n",os.Args[0])
os.Exit(1)
} func isDir(dirname string) bool {
fhandler, err := os.Stat(dirname);
if(! (err == nil || os.IsExist(err)) ) {
return false
}else {
return fhandler.IsDir()
}
} func isFile(filename string) bool {
fhandler, err := os.Stat(filename);
if(! (err == nil || os.IsExist(err)) ) {
return false
}else if (fhandler.IsDir()){
return false
}
return true
} func emptiedFile(filename string) bool {
FN,err := os.Create(filename)
defer FN.Close()
if err != nil {
return false
}
fmt.Fprint(FN,"")
return true
} func getFileByteSize(filename string) (bool,int64) {
if (! isFile(filename)) {
return false,0
}
fhandler, _ := os.Stat(filename);
return true,fhandler.Size()
} func main() {
var maxByte int64 = 1024*1024
if (len(os.Args) < 2) {
usage()
}
if (len(os.Args) >= 3) {
maxByte_,err := strconv.Atoi(os.Args[2])
if err != nil {
log.SetPrefix("[ERROR] ")
log.Println(os.Args[2],"Is not a legitimate int number")
usage()
}
maxByte = int64(maxByte_)
}
dirpath := os.Args[1]
if (!isDir(dirpath)){
log.SetPrefix("[ERROR] ")
log.Println(dirpath,"Is not a legitimate directory")
usage()
}
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
done := make(chan bool) //Process event
go func() {
for {
select {
case ev := <-watcher.Event:
if(ev.IsModify()){
_,size := getFileByteSize(ev.Name)
log.Println("event:",ev,",byte:",size)
if (size >= maxByte){
if ( ! emptiedFile(ev.Name) ) {
log.SetPrefix("[ERROR] ")
log.Printf("%s :Can not empty file\n",ev.Name)
}
}
}
case err := <-watcher.Error:
log.Println("error:",err)
}
}
}()
err = watcher.Watch(dirpath)
if err != nil {
log.Fatal(err)
}
<-done watcher.Close()
}
运行实例:

GoLang fsnotify 实现目录中日志文件大小监控的更多相关文章
- 带你看懂大数据采集引擎之Flume&采集目录中的日志
一.Flume的介绍: Flume由Cloudera公司开发,是一种提供高可用.高可靠.分布式海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于采集数据:同时,flum ...
- SQL中減少日志文件大小
SQL中減少日志文件大小 编写人:CC阿爸 2014-6-14 在日常SQL数据库的操作中,常常会出现SQL日志文件超大,大小都超过正常MDF数据库文件,作为一般用户来讲,LDF太大,只会影响服务 ...
- golang开发:环境篇(六) Go运行监控Supervisord的使用
为什么要使用Supervisord 17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了.到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功 ...
- Golang 基于Prometheus Node_Exporter 开发自定义脚本监控
Golang 基于Prometheus Node_Exporter 开发自定义脚本监控 公司是今年决定将一些传统应用从虚拟机上迁移到Kubernetes上的,项目多而乱,所以迁移工作进展缓慢,为了建立 ...
- nginx日志的监控【转】
第一:nginx的基础监控: 1.进程监控 2.端口监控 在这里nginx的基础监控就不详细说了,注意的是:这两个是必须要加的.并且对于zabbix而言的话,一定要加上触发器的.有问题必须报警. 第二 ...
- logback 设置按天,文件切割大小,总共日志文件大小。
设置按天,文件切割大小,总共日志文件大小. <?xml version="1.0" encoding="UTF-8"?> <configura ...
- 【docker】docker限制日志文件大小的方法+查看日志文件的方法
一.docker日志文件的方法 除了 docker logs -f 容器ID/容器名 这个方法以外. 在linux上,一般docker的日志文件存储在/var/lib/docker/container ...
- Linux下日志文件监控系统Logwatch的使用记录
Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...
- Kubernetes之日志和监控(十五)
一.日志和监控 1.1.Log 1.1.1.容器级别 通过docker命令查看容器级别的日志 docker ps --->containerid docker logs containerid ...
随机推荐
- Spring Boot的学习之路(01):缘起
有人说,Spring Boot的出现,让Java迎来了又一春,它是Java应用开发的颠覆者,彻底改变了Java应用开发的模式. 2017年,SpringBoot闯入我的生活, 也让我迎来了又一春 我开 ...
- 上手更快的网络文件系统 —— oxfs
什么时候需要网络文件系统? 做嵌入式的同学经常会使用 NFS 讲 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作. 网站开发时,在 host 上 ...
- c/c++基础内容回顾
1.1基本数据类型 1.1.1 变量的定义 变量类型 变量名 变量类型 变量名=初值: 注意:不能以C语言标识符作为变量名,变量名的第一个字符必须是字母或者下划线,其它位置字符必须是字母.数字.下划线 ...
- Java 8 并发编程
Java 1.5前 并发实现 Java Green Thread java 1.2 前的线程受os内核限制, 线程=进程, 绿色线程是JVM调度, 用来模拟多线程环境. 不需要本地线程支持. Java ...
- 【Zookeeper02】ZK的作用以及使用
上一篇介绍了ZK的安装以及集群的搭建,这只能算是个软件安装过程,具体是做什么的.怎么用也没有做解释,这一篇中博主就自己的私人理解简单写一下: 1.是什么: a.Zookeeper是一个分布式协调服务, ...
- ZTree简单粗暴快速使用
是什么:功能强大的树形插件 tip:查资料时痛苦的地方,自我改进 1.没有注明版本:版本不对应导致配置完成后各种无端的错误,特别难查找,运气好能找到英文的解答 2.没有写明配置文件,或者不指明配置文件 ...
- 如何安装xenserver
xenserver安装 选择键盘 是否同意协议 清理磁盘 选择本地磁盘安装 选择本地镜像文件 输入管理密码 配置IP地址 配置DNS服务器地址 选择地点 配置NTP服务器地址 开始安装 安装完成
- 如何查看jsplumb.js的API文档(YUIdoc的基本使用)
目录 一.问题描述 二. 处理方法 三. YUIdoc工具介绍 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端> ...
- element-ui中轮播图自适应图片高度
哈哈,久违了各位.我又回来了,最近在做毕设,所以难免会遇到很多问题,需要解决很多问题,在万能的博友帮助下,终于解决了Element-ui中轮播图的图片高度问题,话不多说上代码. 那个axios的使用不 ...
- 每天学点node系列-zlib
永不放弃,永不放弃又有两个原则,第一个原则是永不放弃,第二个原则就是:当你想放弃时回头看第一个原则. 概览 做过web性能优化的同学,对性能优化大杀器gzip应该不陌生.浏览器向服务器发起资源请求,比 ...