網站首頁 編程語言 正文
?? 實戰場景
在日常開發中,用到做最多的知識點除了字符串操作外,就數日志模塊最常用了,畢竟有日志調試和修改 BUG 才方便,而且如果你是編程知識的初學者,更是建議先學習一下日志相關知識。
log 包 - 使用 Logger
在 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
的用法。
Logger 配置
在上文已經看到,默認的 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 創建 logger
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
相關寫法即可。
原文鏈接:https://juejin.cn/post/7126459815693385758
相關推薦
- 2022-07-23 Python實現單向鏈表_python
- 2022-10-08 Qt動態庫調用宿主進程中的對象方法純虛函數使用_C 語言
- 2021-12-10 C#?Quartzs定時器的使用教程_C#教程
- 2022-04-05 expected a string (for built-in components) or a c
- 2022-08-18 C/C++中的new和delete的實現過程小結_C 語言
- 2022-11-06 解析PyCharm集成GitLab代碼倉的問題_python
- 2022-12-29 react如何修改循環數組對象的數據_React
- 2022-06-27 詳解Python中while無限迭代循環方法_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支