目錄
四、建立logger
五、總結
go 從入門到放棄完整教程目錄(更有python、go、pytorch、tensorflow、爬蟲、人工智慧教學等著你):
更新、更全的《go從入門到放棄》的更新**,更有python、go、人工智慧教學等著你:
無論是軟體開發的除錯階段還是軟體上線之後的執行階段,日誌一直都是非常重要的乙個環節,我們也應該養成在程式中記錄日誌的好習慣。
go語言內建的log
包實現了簡單的日誌服務。本文介紹了標準庫log
的基本使用。
log包定義了logger型別,該型別提供了一些格式化輸出的方法。本包也提供了乙個預定義的「標準」logger,可以通過呼叫函式print系列
(print|printf|println)、fatal系列
(fatal|fatalf|fatalln)、和panic系列
(panic|panicf|panicln)來使用,比自行建立乙個logger物件更容易使用。
例如,我們可以像下面的**一樣直接通過log
包來呼叫上面提到的方法,預設它們會將日誌資訊列印到終端介面:
package main
import (
"log"
)func main()
編譯並執行上面的**會得到如下輸出:
2017/06/19 14:04:17 這是一條很普通的日誌。
2017/06/19 14:04:17 這是一條很普通的日誌。
2017/06/19 14:04:17 這是一條會觸發fatal的日誌。
logger會列印每條日誌資訊的日期、時間,預設輸出到系統的標準錯誤。fatal系列函式會在寫入日誌資訊後呼叫os.exit(1)。panic系列函式會在寫入日誌資訊後panic。
預設情況下的logger只會提供日誌的時間資訊,但是很多情況下我們希望得到更多資訊,比如記錄該日誌的檔名和行號等。log
標準庫中為我們提供了定製這些設定的方法。
log
標準庫中的flags
函式會返回標準logger的輸出配置,而setflags
函式用來設定標準logger的輸出配置。
func flags() int
func setflags(flag int)
log
標準庫提供了如下的flag選項,它們是一系列定義好的常量。
const (
// 控制輸出日誌資訊的細節,不能控制輸出的順序和格式。
// 輸出的日誌在每一項後會有乙個冒號分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
ldate = 1 << iota // 日期:2009/01/23
llongfile // 檔案全路徑名+行號: /a/b/c/d.go:23
lshortfile // 檔名+行號:d.go:23(會覆蓋掉llongfile)
lutc // 使用utc時間
lstdflags = ldate | ltime // 標準logger的初始值
)
下面我們在記錄日誌之前先設定一下標準logger的輸出選項如下:
func main()
編譯執行後得到的輸出結果如下:
2017/06/19 14:05:17.494943 .../log_demo/main.go:11: 這是一條很普通的日誌。
log
標準庫中還提供了關於日誌資訊字首的兩個方法:
func prefix() string
func setprefix(prefix string)
其中prefix
函式用來檢視標準logger的輸出字首,setprefix
函式用來設定輸出字首。
func main()
上面的**輸出如下:
[小王子]2017/06/19 14:05:57.940542 .../log_demo/main.go:13: 這是一條很普通的日誌。
這樣我們就能夠在**中為我們的日誌資訊新增指定的字首,方便之後對日誌資訊進行檢索和處理。
func setoutput(w io.writer)
setoutput
函式用來設定標準logger的輸出目的地,預設是標準錯誤輸出。
例如,下面的**會把日誌輸出到同目錄下的xx.log
檔案中。
func main()
log.setoutput(logfile)
log.setflags(log.llongfile | log.lmicroseconds | log.ldate)
log.println("這是一條很普通的日誌。")
log.setprefix("[小王子]")
log.println("這是一條很普通的日誌。")
}
如果你要使用標準的logger,我們通常會把上面的配置操作寫到init
函式中。
func init()
log.setoutput(logfile)
log.setflags(log.llongfile | log.lmicroseconds | log.ldate)
}
log
標準庫中還提供了乙個建立新logger物件的建構函式–new
,支援我們建立自己的logger示例。new
函式的簽名如下:
func new(out io.writer, prefix string, flag int) *logger
new建立乙個logger物件。其中,引數out設定日誌資訊寫入的目的地。引數prefix會新增到生成的每一條日誌前面。引數flag定義日誌的屬性(時間、檔案等等)。
舉個例子:
func main()
將上面的**編譯執行之後,得到結果如下:
2017/06/19 14:06:51 main.go:34: 這是自定義的logger記錄的日誌。
go內建的log庫功能有限,例如無法滿足記錄不同級別日誌的情況,我們在實際的專案中根據自己的需要選擇使用第三方的日誌庫,如logrus、zap等。 Go語言標準庫log介紹
無論是軟體開發的除錯階段還是軟體上線之後的執行階段,日誌一直都是非常重要的乙個環節,我們也應該養成在程式中記錄日誌的好習慣。go語言內建的log包實現了簡單的日誌服務。本文介紹了標準庫log的基本使用。log包定義了logger型別,該型別提供了一些格式化輸出的方法。本包也提供了乙個預定義的 標準 ...
Go語言標準庫之flag
go語言內建的flag包實現了命令列引數的解析,flag包使得開發命令列工具更為簡單。如果你只是簡單的想要獲取命令列引數,可以像下面的 示例一樣使用os.args來獲取命令列引數。package main import fmt os os.args demo func main 將上面的 執行go ...
Go語言標準庫之strconv
go語言中strconv包實現了基本資料型別和其字串表示的相互轉換。更多函式請檢視官方文件。這一組函式是我們平時程式設計中用的最多的。將字串型別的整數轉換為int型別。func atoi s string i int,err error 如果傳入的字串引數無法轉換為int型別,就會返回錯誤。s1 1...