好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang之log rotate詳解

golang之log rotate詳解

熱門標簽:惠州電銷防封電話卡 釘釘有地圖標注功能嗎 汕頭小型外呼系統 濱州自動電銷機器人排名 阿里云ai電話機器人 鄭州亮點科技用的什么外呼系統 浙江高頻外呼系統多少錢一個月 黃岡人工智能電銷機器人哪個好 建造者2地圖標注

操作系統: CentOS 6.9_x64

go語言版本: 1.8.3

問題描述

golang的log模塊提供的有寫日志功能,示例代碼如下:

/*
golang log example

*/
package main

import (
  "log"
  "os"
)

func main() {
  logFile,err := os.Create("test1.log")
  defer logFile.Close()
  if err != nil {
    log.Fatalln("open file error!")
  }
  logger := log.New(logFile,"[Debug]",log.Ldate | log.Ltime | log.Lshortfile)
  logger.Println("test debug message")
  logger.SetPrefix("[Info]")
  logger.Println("test info message")

}

運行效果:

[root@local t2]# go build logTest1.go
[root@local t2]# ./logTest1
[root@local t2]# cat test1.log
[Debug]2017/06/13 23:18:36 logTest1.go:19: test debug message
[Info]2017/06/13 23:18:36 logTest1.go:21: test info message
[root@local t2]#

go語言的log模塊沒有提供log rotate接口,但實際開發中我們需要該功能:

我們不希望單個日志過大,否則文本編輯器無法打開,查看比較困難;

更不希望占用太大的存儲空間,可以指定最多存多少個日志文件。

解決方案

借助帶緩沖的channel來實現。

示例代碼如下:

/*
  golang log rotate example

*/

package main

import (
  "fmt"
  "log"
  "os"
  "time"
)

const (
  BACKUP_COUNT = 5
  MAX_FILE_BYTES = 2 * 1024
)

func doRotate(fPrefix string) {
  for j := BACKUP_COUNT; j >= 1; j-- {
    curFileName := fmt.Sprintf("%s_%d.log",fPrefix,j)
    k := j-1
    preFileName := fmt.Sprintf("%s_%d.log",fPrefix,k)

    if k == 0 {
      preFileName = fmt.Sprintf("%s.log", fPrefix)
    }
    _,err := os.Stat(curFileName)
    if err == nil {
      os.Remove(curFileName)
      fmt.Println("remove : ", curFileName)
    }
    _,err = os.Stat(preFileName)
    if err == nil {
      fmt.Println("rename : ", preFileName, " => ", curFileName)
      err = os.Rename(preFileName, curFileName)
      if err != nil {
        fmt.Println(err)
      }
    }
  }
}

func NewLogger(fPrefix string) (*log.Logger, *os.File) {
  var logger *log.Logger
  fileName := fmt.Sprintf("%s.log", fPrefix)
  fmt.Println("fileName :", fileName)
  logFile, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

  if err != nil {
    fmt.Println("open file error!")
  } else {
    logger = log.New(logFile, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)
  }
  return logger, logFile
}

func logWorker(msgQueue -chan string) {
  fPrefix := "msg"
  logger, logFile := NewLogger(fPrefix)
  for msg := range msgQueue {
    logger.Println(msg)
    fi, err2 := logFile.Stat()
    if err2 == nil {
      if fi.Size() > MAX_FILE_BYTES {
        logFile.Close()
        doRotate(fPrefix)
        logger,logFile = NewLogger(fPrefix)
      }
    }
  }
  logFile.Close()
}

func main() {
  msgQueue := make(chan string, 1000)
  go logWorker(msgQueue)

  for j := 1; j = 1000; j++ {
    msgQueue - fmt.Sprintf("msg_%d", j)
    time.Sleep(1 * time.Second)
  }
  close(msgQueue)
  return
}

運行效果如下:

[root@local t2]# ./logRotateTest1
fileName : msg.log
rename : msg.log => msg_1.log
fileName : msg.log
rename : msg_1.log => msg_2.log
rename : msg.log => msg_1.log
fileName : msg.log
rename : msg_2.log => msg_3.log
rename : msg_1.log => msg_2.log
rename : msg.log => msg_1.log
fileName : msg.log
^C

討論

這里只是個簡單的示例代碼,實現了log rotate,更多功能需自行開發。

好,就這些了,希望對你有幫助。

以上這篇golang之log rotate詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解Golang 與python中的字符串反轉
  • 深入理解golang的異常處理機制
  • Golang開發中常用的代碼片段匯總
  • 在Golang代碼中如何自動生成版本號的方法示例
  • Golang中switch語句和select語句的用法教程
  • Golang讀寫Excel的方法教程
  • 利用Golang如何調用Linux命令詳解
  • Golang多線程刷票的實現代碼

標簽:瀘州 駐馬店 阿壩 東營 晉中 滄州 泰安 昭通

巨人網絡通訊聲明:本文標題《golang之log rotate詳解》,本文關鍵詞  golang,之,log,rotate,詳解,golang,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang之log rotate詳解》相關的同類信息!
  • 本頁收集關于golang之log rotate詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 无码欧美毛片一区二区三足球宝贝 | 日本玖玖视频| 人妻女教师姫との亂倫在线看| 久久99精品久久| 很黄很色很刺激的视频免费| 臭小子啊轻点灬太粗太长了的视频| 欧美人动交ZoZO视频| 边摸边吃奶叫床激情视频| 污污在线免费观看| 男女在床干事免费视频| 李丽莎大尺度视频| 国产精品28p| 李丽莎喷水国产一二区| 好大?用力?深一点黑人| 久久久久久精品无码欧美| 非洲黑人毛片| 人妻无码精品久久久久| 不卡一区二区三区四区| 黄色爽文| k频道在线网络观看| 嗯啊…在试衣间里做h| 国产第一页在线播放| 色偷偷中文字幕久久综合| 精品午夜熟女人妻视频毛片| 麻豆91av| 女生阳后发现戴帽子的人变多了| 九九色网站| 成人免费片| 星空果冻传媒电影在线观看| jizzjizz日本护士水多| 99免费在线视频| 久久精品亚洲AV无码毛的用法| 美国忌讳1~4愈演愈烈英文| 三上悠亚禁欲30天在线播放| 国产精品嫩草研究院成人| 波多野42部无码喷潮BT种子| bl调教走绳结双性姜汁| 高h肉文短篇| 91午夜精品亚洲一区二区三区 | 成人做受120秒试看试看视频| 韩国伦理片在线观看|