去语言实现通过FTP库自动上web日传志

  

因为平时管理的web服务器都是VM服务器,为节省硬盘空间,一般给虚拟机分配的硬盘空间都比较小,只有8 g,因为,保存不了多少日志,所以每天都需要把每台网络日志转移到一个硬盘比较大的服务器上,然后再使用NBU集中备份,本程序主要使用去语言实现实现将web日志通过FTP自动上传FTP服务器,使用了filepath.Walk遍历日志目录及第三方纯去库"github.com/jlaffaye/ftp”,而日志VM本地存储路径格式是/var/log/weblog/www.domainName.com/month/20140616.access.log,

     //uploadlog/*   1 .本程序主要是实现linux下上传网络日志使用,   2.使用方法是uploadlog logfile_dir   程序只上传当前时间点的日志文件,   */主要包   导入(   “fmt”   ftp "github.com/jlaffaye/ftp”   “日志”   “净”   “操作系统”   “路径/filepath”   “strconv”   “弦”   “时间”   )   函数main () {   fmt。Println (“Hello World !”)   如果len (os.Args) !=2 {   日志。致命的(“用法:”+ filepath.Base (os.Args [0]) +“log_dir”)   os.Exit (1)   }//logFileName是将要分析的日志   logFileName _, _:=getLogFileName ()   serverIp:=getLocalIpAddr ()//serverName, _:=os.Hostname ()   time . sleep (time.Duration (90) * time.Second)   dir:=os.Args [1]   filepath。走(dir, func(路径字符串,f操作系统。FileInfo,都会犯错误错误){   如果f==nil {   返回错   }   如果f.IsDir () {   返回nil   }   如果f.Name ()==logFileName {   fmt.Println(路径)//pathFields的作用是将日志路径解析成一个数据,从而可以得到日志的域名,注意,如果是linux系统,要用“/?   pathFields:=字符串。Split(路径,“\”)   var域名字符串   如果len (pathFields)比;3 {   域名=pathFields (len (pathFields) 3)   }   fmt.Println (time.Now ())   ftpUploadFile (“ftp-server-ip: 21”、“logftpuser”,“ftp-password”路径,域名,serverIp +“_”+ logFileName)   fmt.Println (time.Now ())   }   返回nil   })   }   func getLogFileName()(字符串,字符串,字符串){   MonthTOstr:=map [string]字符串{“1”:“1”,   “2”:“02”,   “3”:“03”,   “四月”:“04”,   “可能”:“05”,   “6月”:“06”,   “7”:“7”,   “八月”:“08”,   “九月”:“09”,   “十月”:“10”,   :“11月11日”,   :“12月12 "}   timenow:=time.Now ()   年、月、日:=timenow.Date ()//monthStr:=month.String ()   小时,_,_:=timenow.Clock ()   yearStr:=strings.TrimLeft (strconv.Itoa(年),“20”)//去掉前面的四位数年份如“2014”年的“20”   dayStr hourStr:=strconv.Itoa(天),strconv.Itoa(小时)   如果一天& lt;10 {   dayStr=" 0 " + dayStr   }   如果小时& lt;10 {   hourStr=" 0 " + hourStr   }   文件名:=扒芭选? yearStr + MonthTOstr [month.String ()) + dayStr + hourStr + " . log”   logDay:=yearStr + MonthTOstr month.String ()) + dayStr   logMonth:=yearStr + MonthTOstr month.String ())//monthSrt:=strconv.Itoa (timenow.Month ())//fmt。Println(文件名,logDay)   返回文件名,logDay logMonth//fmt.Println(文件名)   }   字符串函数getLocalIpAddr () {//这里使用一个合法的IP就行了,端口随便,即使没有打开也行,也许因为使用UDP,如果用TCP的话,对端不打开就会有问题   康涅狄格州,犯错:=净。刻度盘(“udp”、“192.168.8.51:80”)   如果犯错!=nil {//fmt.Println (err.Error ())   返回“127.0.0.1”   }   推迟conn.Close ()//fmt.Println (conn.LocalAddr () .String ())//?/fmt.Println (strings.Split (conn.LocalAddr () .String (),“:”) [0])   .String返回strings.Split (conn.LocalAddr () (),“:”) [0]   }   func ftpUploadFile (ftpserver ftpuser、pw localFile, remoteSavePath, saveName字符串){   ftp,犯错:=ftp.Connect (ftpserver)   如果犯错!=nil {   fmt.Println (err)   }   呃=ftp。登录(ftpuser pw)   如果犯错!=nil {   fmt.Println (err)   }//注意是pub/日志,不能带“/笨耐?   ftp.ChangeDir (pub/日志)   dir,犯错:=ftp.CurrentDir ()   fmt.Println (dir)   ftp.MakeDir (remoteSavePath)   ftp.ChangeDir (remoteSavePath)   dir, _=ftp.CurrentDir ()   fmt.Println (dir)   文件,犯错:=os.Open (localFile)   如果犯错!=nil {   fmt.Println (err)   }   推迟file.Close ()   呃=ftp。大的(saveName文件)   如果犯错!=nil {   fmt.Println (err)   }   ftp.Logout ()   ftp.Quit ()   fmt。Println(“成功上传文件:”,localFile)   }   

去语言实现通过FTP库自动上web日传志