<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在日常開發中,用到做最多的知識點除了字串操作外,就數紀錄檔模組最常用了,畢竟有紀錄檔偵錯和修改 BUG 才方便,而且如果你是程式設計知識的初學者,更是建議先學習一下紀錄檔相關知識。
在 Go 中,內建了 log
包實現簡單紀錄檔的記錄功能,如果你有 Python 中 logger
模組的使用經驗,學習起來也是非常簡單的。
log 包中定義了一個 Logger
型別,其中包含的函數有 Print
系列函數,Fatal
系列函數,Panic
系列。
接下來直接看一段 log 包基本使用的程式碼:
package main import ( "log" ) func main() { log.Println("輸出普通紀錄檔") // 待換行 v := "xxxx" log.Printf("輸出格式化 %s 紀錄檔 n", v) log.Fatalln("輸出fatal的紀錄檔") log.Panicln("輸出panic的紀錄檔") }
輸出內容如下所示:
2022/07/31 16:47:01 輸出普通紀錄檔
2022/07/31 16:47:01 輸出格式化 xxxx 紀錄檔
2022/07/31 16:47:01 輸出fatal的紀錄檔
exit status 1
可以發現其與標準輸出有一個大的差異點,即每條輸出資訊都攜帶了當下時間。
在時間的時候,可以將 log.Fatalln
和 log.Panicln
資訊對調,就能得到不同的輸出,繼而測試出 fatal
和 panic
的用法。
在上文已經看到,預設的 log 紀錄檔會輸出時間資訊,我們可以在此基礎上進行擴充套件,將紀錄檔的記錄到檔案中,輸出錯誤的行號。
此時需要使用 SetFlags
函數,具體如下所示。
package main import ( "log" ) func main() { // 檔案全路徑名+行號,錯誤的時間(精確到微秒級別),錯誤資訊 log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println("紀錄檔輸出") }
此時的紀錄檔輸出內容如下所示:
2022/07/31 16:53:23.468018 G:/goProject/06_demo.go:10: 紀錄檔輸出
log
包還提供了其它選項,都是常數,即上述程式碼 SetFlags
的引數部分內容。
const ( Ldate = 1 << iota // 日期:2022/07/31 Ltime // 時間:16:53:23 Lmicroseconds // 微秒級別時間:16:53:23.468018 Llongfile // 檔案全路徑名+行號: G:/goProject/06_demo.go:10 Lshortfile // 檔名+行號:06_demo.go:10 LUTC // 使用UTC時間 LstdFlags = Ldate | Ltime // 標準logger的初始值 )
還可以對紀錄檔的字首進行設定,使用 SetPrefix
函數即可。
func main() { log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println("紀錄檔輸出1") log.SetPrefix("[橡皮擦專用]") log.Println("紀錄檔輸出2") }
此時的紀錄檔輸出如下內容:
2022/07/31 16:57:19.350118 G:/goProject/06_demo.go:9: 紀錄檔輸出1
[橡皮擦專用]2022/07/31 16:57:19.358230 G:/goProject/06_demo.go:11: 紀錄檔輸出2
以上紀錄檔都是在控制檯進行的輸出,如果希望將紀錄檔記錄到檔案中,可以設定紀錄檔輸出位置,此時用到的函數是 SetOutput
,程式碼如下:
package main import ( "fmt" "log" "os" ) func main() { logFile, err := os.OpenFile("./error.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { fmt.Println("開啟檔案失敗,錯誤資訊:", err) return } // 設定輸出檔案 log.SetOutput(logFile) log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println("紀錄檔輸出1") log.SetPrefix("[橡皮擦專用]") log.Println("紀錄檔輸出2") }
這是執行程式碼,就會發現會在專案根目錄建立一個檔案,其中包含所有紀錄檔輸出。
在建立 logger 物件的時候,還可以使用其建構函式 New
實現。
New 函數的的原型如下:
func New(out io.Writer, prefix string, flag int) *Logger
接下來直接看範例程式碼學習即可。
package main import ( "log" "os" ) func main() { logger := log.New(os.Stdout, "[橡皮擦專用字首]", log.Lshortfile|log.Ldate) logger.Println("普通紀錄檔") }
可以看到比前文的程式碼要精簡了許多,實戰遇到簡單紀錄檔,可以直接採用 New
相關寫法即可。
以上就是Go常用技能紀錄檔log包建立使用範例的詳細內容,更多關於Go紀錄檔log包的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45