国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

go語言實現通過FTP庫自動上傳web日志

2020-04-01 19:15:15
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了go語言實現通過FTP庫自動上傳web日志,非常簡單實用,需要的小伙伴快來參考下吧。

因為平時管理的web服務器都是VM服務器,為節省硬盤空間,一般給虛擬機分配的硬盤空間都比較小,只有8G,因為,保存不了多少日志,所以每天都需要把每臺WEB日志轉移到一個硬盤比較大的服務器上,然后再使用NBU集中備份,本程序主要使用go語言實現實現將web日志通過FTP自動上傳FTP服務器,使用了filepath.Walk遍歷日志目錄及第三方純go庫“github.com/jlaffaye/ftp”,而日志VM本地存儲路徑格式是 /var/log/weblog/www.domainName.com/month/20140616.access.log,

 

 
  1. // uploadlog 
  2. /* 
  3. 1.本程序主要是實現linux下上傳web日志使用, 
  4. 2.使用方法是 uploadlog logfile_dir 
  5. 程序只上傳當前時間點的日志文件, 
  6. */ 
  7. package main 
  8. import ( 
  9. "fmt" 
  10. ftp "github.com/jlaffaye/ftp" 
  11. "log" 
  12. "net" 
  13. "os" 
  14. "path/filepath" 
  15. "strconv" 
  16. "strings" 
  17. "time" 
  18. func main() { 
  19. fmt.Println("Hello World!"
  20. if len(os.Args) != 2 { 
  21. log.Fatal("Usage:" + filepath.Base(os.Args[0]) + " log_dir "
  22. os.Exit(1) 
  23. //logFileName是將要分析的日志 
  24. logFileName, _, _ := getLogFileName() 
  25. serverIp := getLocalIpAddr() 
  26. //serverName, _ := os.Hostname() 
  27. time.Sleep(time.Duration(90) * time.Second) 
  28. dir := os.Args[1] 
  29. filepath.Walk(dir, func(path string, f os.FileInfo, err error) error { 
  30. if f == nil { 
  31. return err 
  32. if f.IsDir() { 
  33. return nil 
  34. if f.Name() == logFileName { 
  35. fmt.Println(path) 
  36. //pathFields的作用是將日志path解析成一個數據,從而可以得到日志的域名,注意,如果是linux系統,要用“/” 
  37. pathFields := strings.Split(path, "/"
  38. var domainName string 
  39. if len(pathFields) > 3 { 
  40. domainName = pathFields[len(pathFields)-3] 
  41. fmt.Println(time.Now()) 
  42. ftpUploadFile("ftp-server-ip:21""logftpuser""ftp-password", path, domainName, serverIp+"_"+logFileName) 
  43. fmt.Println(time.Now()) 
  44. return nil 
  45. }) 
  46. func getLogFileName() (string, string, string) { 
  47. MonthTOstr := map[string]string{"January""01"
  48. "February""02"
  49. "March""03"
  50. "April""04"
  51. "May""05"
  52. "June""06"
  53. "July""07"
  54. "August""08"
  55. "September""09"
  56. "October""10"
  57. "November""11"
  58. "December""12"
  59. timenow := time.Now() 
  60. year, month, day := timenow.Date() 
  61. //monthStr := month.String() 
  62. hour, _, _ := timenow.Clock() 
  63. yearStr := strings.TrimLeft(strconv.Itoa(year), "20"//去掉前面的四位數年份如"2014"年的“20” 
  64. dayStr, hourStr := strconv.Itoa(day), strconv.Itoa(hour) 
  65. if day < 10 { 
  66. dayStr = "0" + dayStr 
  67. if hour < 10 { 
  68. hourStr = "0" + hourStr 
  69. fileName := "ex" + yearStr + MonthTOstr[month.String()] + dayStr + hourStr + ".log" 
  70. logDay := yearStr + MonthTOstr[month.String()] + dayStr 
  71. logMonth := yearStr + MonthTOstr[month.String()] 
  72. //monthSrt := strconv.Itoa(timenow.Month()) 
  73. //fmt.Println(fileName, logDay) 
  74. return fileName, logDay, logMonth 
  75. //fmt.Println(fileName) 
  76. func getLocalIpAddr() string { 
  77. //這里使用一個合法的IP就行了,端口隨便,即使沒有打開也行,也許因為使用UDP,如果用TCP的話,對端不打開就會有問題 
  78. conn, err := net.Dial("udp""192.168.8.51:80"
  79. if err != nil { 
  80. //fmt.Println(err.Error()) 
  81. return "127.0.0.1" 
  82. defer conn.Close() 
  83. //fmt.Println(conn.LocalAddr().String()) 
  84. //conn. 
  85. //fmt.Println(strings.Split(conn.LocalAddr().String(), ":")[0]) 
  86. return strings.Split(conn.LocalAddr().String(), ":")[0] 
  87. func ftpUploadFile(ftpserver, ftpuser, pw, localFile, remoteSavePath, saveName string) { 
  88. ftp, err := ftp.Connect(ftpserver) 
  89. if err != nil { 
  90. fmt.Println(err) 
  91. err = ftp.Login(ftpuser, pw) 
  92. if err != nil { 
  93. fmt.Println(err) 
  94. //注意是 pub/log,不能帶“/”開頭 
  95. ftp.ChangeDir("pub/log"
  96. dir, err := ftp.CurrentDir() 
  97. fmt.Println(dir) 
  98. ftp.MakeDir(remoteSavePath) 
  99. ftp.ChangeDir(remoteSavePath) 
  100. dir, _ = ftp.CurrentDir() 
  101. fmt.Println(dir) 
  102. file, err := os.Open(localFile) 
  103. if err != nil { 
  104. fmt.Println(err) 
  105. defer file.Close() 
  106. err = ftp.Stor(saveName, file) 
  107. if err != nil { 
  108. fmt.Println(err) 
  109. ftp.Logout() 
  110. ftp.Quit() 
  111. fmt.Println("success upload file:", localFile) 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桦川县| 大埔区| 临武县| 中西区| 梅河口市| 秦皇岛市| 长治市| 甘南县| 连云港市| 太康县| 错那县| 辰溪县| 安图县| 南城县| 泰兴市| 大理市| 时尚| 佳木斯市| 曲松县| 吉林市| 霍山县| 昌宁县| 武川县| 宽甸| 碌曲县| 拉萨市| 怀化市| 微博| 双柏县| 枣强县| 娄底市| 乌恰县| 吉林市| 东至县| 灵宝市| 雷波县| 泌阳县| 昌吉市| 汝阳县| 宣武区| 彰武县|