[TOC]
# 簡介
本文介紹Go 標準庫 log 的常用導出函數,結構體及方法。
~~~
import log
~~~
log 包實現了簡單的日志服務,log 包定義了Logger類型,該類型提供了一些格式化輸出的方法。本包也提供了一個預定義的“標準”Logger,可以通過輔助函數Print[f|ln]、Fatal[f|ln]和Panic[f|ln]訪問,比手工創建一個Logger對象更容易使用。Logger會打印每條日志信息的日期、時間,默認輸出到標準錯誤。Fatal系列函數會在寫入日志信息后調用os.Exit(1)。Panic系列函數會在寫入日志信息后調用panic。
# Logger 結構體
Logger 結構體定義:
~~~
type Logger struct {
mu sync.Mutex // ensures atomic writes; protects the following fields
prefix string // prefix to write at beginning of each line
flag int // properties
out io.Writer // destination for output
buf []byte // for accumulating text to write
}
~~~
Logger 類型表示一個記錄日志的對象,它會生成一行行的輸出寫入一個io.Writer 接口。每一條日志操作會調用一次io.Writer 接口的Write 方法。Logger 類型的對象可以被多個線程安全的同時使用,它會保證對io.Writer 接口的順序訪問。
* func New(out io.Writer, prefix string, flag int) *Logger // 創建一個Logger, out設置日志信息寫入的目的地, prefix 添加到生成的每一條日志前面, flag定義日志的屬性
* func (l *Logger) Flags() int // Flags返回logger的輸出選項
* func (l *Logger) SetFlags(flag int) // SetFlags設置logger的輸出選項
* func (l *Logger) Prefix() string // Prefix返回logger的輸出前綴
* func (l *Logger) SetPrefix(prefix string) // SSetPrefix設置logger的輸出前綴
* func (l *Logger) Output(calldepth int, s string) error // 輸出一條日志
* func (l *Logger) Printf(format string, v ...interface{}) // 將生成的格式化字符串輸出到out
* func (l *Logger) Fatal(v ...interface{}) // Fatal等價于{l.Print(v…); os.Exit(1)}
* func (l *Logger) Panic(v ...interface{}) // Panic等價于{l.Print(v…); panic(…)}
# log 導出函數
log 導出函數基于預定義的 std 變量 var std = New(os.Stderr, "", LstdFlags) 實現。
* func Flags() int // 獲取預定義“標準”日志輸出屬性
* func Prefix() string // 獲取預定義“標準”日志前綴
* func SetOutput(w io.Writer) // 設置預定義“標準”日志輸出位置
* func Print(v ...interface{}) // 打印一條標準日志
# 代碼示例
~~~
// go 標準庫 log
package main
import (
"fmt"
"log"
"os"
)
func main() {
logger := log.New(os.Stdout, "a log:", log.Lshortfile)
logger.SetFlags(log.Llongfile)
fmt.Println(logger.Flags()) // 8
logger.SetPrefix("debug:")
fmt.Println(logger.Prefix()) // debug:
logger.Print("hello, log file")
err := logger.Output(2, "world")
fmt.Println(err)
logger.Printf("%v\t%v", "hello", "go")
// logger.Fatal("fatal log")
// logger.Panic("Panic log")
// 使用預定義日志類型
fmt.Println(log.Flags()) // 3
fmt.Println(log.Prefix()) // ''
log.Print("hello predefine log") // 2017/03/04 16:34:27 hello predefine log
}
~~~
- 基礎
- 簡介
- 主要特征
- 變量和常量
- 編碼轉換
- 數組
- byte與rune
- big
- sort接口
- 和mysql類型對應
- 函數
- 閉包
- 工作區
- 復合類型
- 指針
- 切片
- map
- 結構體
- sync.Map
- 隨機數
- 面向對象
- 匿名組合
- 方法
- 接口
- 權限
- 類型查詢
- 異常處理
- error
- panic
- recover
- 自定義錯誤
- 字符串處理
- 正則表達式
- json
- 文件操作
- os
- 文件讀寫
- 目錄
- bufio
- ioutil
- gob
- 棧幀的內存布局
- shell
- 時間處理
- time詳情
- time使用
- new和make的區別
- container
- list
- heap
- ring
- 測試
- 單元測試
- Mock依賴
- delve
- 命令
- TestMain
- path和filepath包
- log日志
- 反射
- 詳解
- plugin包
- 信號
- goto
- 協程
- 簡介
- 創建
- 協程退出
- runtime
- channel
- select
- 死鎖
- 互斥鎖
- 讀寫鎖
- 條件變量
- 嵌套
- 計算單個協程占用內存
- 執行規則
- 原子操作
- WaitGroup
- 定時器
- 對象池
- sync.once
- 網絡編程
- 分層模型
- socket
- tcp
- udp
- 服務端
- 客戶端
- 并發服務器
- Http
- 簡介
- http服務器
- http客戶端
- 爬蟲
- 平滑重啟
- context
- httptest
- 優雅中止
- web服務平滑重啟
- beego
- 安裝
- 路由器
- orm
- 單表增刪改查
- 多級表
- orm使用
- 高級查詢
- 關系查詢
- SQL查詢
- 元數據二次定義
- 控制器
- 參數解析
- 過濾器
- 數據輸出
- 表單數據驗證
- 錯誤處理
- 日志
- 模塊
- cache
- task
- 調試模塊
- config
- 部署
- 一些包
- gjson
- goredis
- collection
- sjson
- redigo
- aliyunoss
- 密碼
- 對稱加密
- 非對稱加密
- 單向散列函數
- 消息認證
- 數字簽名
- mysql優化
- 常見錯誤
- go run的錯誤
- 新手常見錯誤
- 中級錯誤
- 高級錯誤
- 常用工具
- 協程-泄露
- go env
- gometalinter代碼檢查
- go build
- go clean
- go test
- 包管理器
- go mod
- gopm
- go fmt
- pprof
- 提高編譯
- go get
- 代理
- 其他的知識
- go內存對齊
- 細節總結
- nginx路由匹配
- 一些博客
- redis為什么快
- cpu高速緩存
- 常用命令
- Go 永久阻塞的方法
- 常用技巧
- 密碼加密解密
- for 循環迭代變量
- 備注
- 垃圾回收
- 協程和纖程
- tar-gz
- 紅包算法
- 解決golang.org/x 下載失敗
- 逃逸分析
- docker
- 鏡像
- 容器
- 數據卷
- 網絡管理
- 網絡模式
- dockerfile
- docker-composer
- 微服務
- protoBuf
- GRPC
- tls
- consul
- micro
- crontab
- shell調用
- gorhill/cronexpr
- raft
- go操作etcd
- mongodb