列印日誌等操作的接收者是*logger
type logger struct
所以在列印日誌前,需要構造乙個logger物件
log包自帶乙個預設的logger,使用log.println()
等列印日誌操作時,實際上是使用了該logger
var std =
new(os.stderr,
"", lstdflags)
func
new(out io.writer, prefix string
, flag int
)*logger
}
每個logger有自己的out,所以想將不同等級的log列印到不同地方,需要建立新的logger使用
var
( info *log.logger
warning *log.logger
error *log.logger
)func
init()
logger提供的方法簡單而又清晰,主要分為設定和列印兩種
在用log.new構造logger物件時,對應的三個引數分別是日誌輸出位置、日誌字首、日誌資訊
當logger構造好後,logger也有對應的方法修改以上三個值
setoutput
func
(l *logger)
setoutput
(w io.writer)
修改日誌資訊的輸出位置
setprefix
func
(l *logger)
setprefix
(prefix string
)
修改日誌資訊字首
setflags
func
(l *logger)
setflags
(flag int
)
修改日誌輸出資訊,時間、**位置等
列印日誌
列印日誌內容
func
(l *logger)
print
(v ...
inte***ce
)func
(l *logger)
printf
(format string
, v ...
inte***ce
)func
(l *logger)
println
(v ...
inte***ce
)
列印日誌內容後退出程式(嚴重錯誤)func
(l *logger)
fatal
(v ...
inte***ce
)func
(l *logger)
fatalf
(format string
, v ...
inte***ce
)func
(l *logger)
fatalln
(v ...
inte***ce
)
列印日誌內容後宕機func
(l *logger)
panic
(v ...
inte***ce
)func
(l *logger)
panicf
(format string
, v ...
inte***ce
)func
(l *logger)
panicln
(v ...
inte***ce
)
可以發現,列印日誌最原始的方法是output
func
(l *logger)
output
(calldepth int
, s string
)error
output是暴露出去的方法,所以在程式中也可以直接使用
calldepth可以恢復pc,列印日誌時,如果flag設定了file,可以看到呼叫棧前面幾層的位置
func
main()
/* 結果
/usr/local/go/src/log/log.go:376: calldepth 0
~/go/src/awesomeproject/main.go:8: calldepth 1
/usr/local/go/src/runtime/proc.go:203: calldepth 2
/usr/local/go/src/runtime/asm_amd64.s:1373: calldepth 3
*/
使用println等方法時,因為呼叫棧又多了一層,所以calldepth的值都為2 閉包學習筆記
作用域的定義 變數起作用的範圍 區域性變數的作用域是它自己所在的函式及其巢狀函式 示例1 function getcounter var counter getcounter counter counter counter 釋放閉包與它的環境 counter null counter getcoun...
python lxml包學習筆記
python lxml包用於解析xml和html檔案,可以使用xpath和css定位元素,個人認為相對於beautifulsoup功能更加強大,更加靈活。本文根據lxml官方文件和自己的理解列出常用的函式,本文 為python3.4,lxml2.0 lxml 支援 python2 python3 匯...
凸包學習筆記
凸包 凸包 convex hull 是乙個計算幾何 圖形學 中的概念。在乙個實數向量空間v中,對於給定集合x,所有包含x的凸集的交集s被稱為x的凸包。x的凸包可以用x內所有點 x1,xn 的線性組合來構造.在二維歐幾里得空間中,凸包可想象為一條剛好包著所有點的橡皮圈。用不嚴謹的話來講,給定二維平面上...