golang log日誌
const (
// 字位共同控制輸出日誌資訊的細節。不能控制輸出的順序和格式。
// 在所有專案後會有一個冒號:2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Ldate = 1 << iota // 日期:2009/01/23
Ltime // 時間:01:23:23
Lmicroseconds // 微秒解析度:01:23:23.123123(用於增強Ltime位)
Llongfile // 檔案全路徑名+行號: /a/b/c/d.go:23
Lshortfile // 檔案無路徑名+行號:d.go:23(會覆蓋掉Llongfile)
LstdFlags = Ldate | Ltime // 標準logger的初始值
)
func New(out io.Writer, prefix string, flag int) *Logger
New建立一個Logger。
引數out設定日誌資訊寫入的目的地。
引數prefix會新增到生成的每一條日誌前面。
引數flag定義日誌的屬性(時間、檔案等等)。
func (l *Logger) Fatalln(v ...interface{})
Fatalln等價於
{
l.Println(v...);
os.Exit(1)
}
func (l *Logger) Println(v ...interface{})
Println呼叫l.Output將生成的格式化字串輸出到logger,引數用和fmt.Println相同的方法處理。
func (l *Logger) Output(calldepth int, s string) error
Output寫入輸出一次日誌事件。
引數s包含在Logger根據選項生成的字首之後要列印的文字。
如果s末尾沒有換行會新增換行符。
calldepth用於恢復PC,出於一般性而提供,但目前在所有預定義的路徑上它的值都為2。
package main import ( "log" "os" ) var logger *log.Logger var file *os.File var err error func init() { file, err = os.OpenFile("test.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 666) if err != nil { logger.Fatal(err) } logger = log.New(file, "", log.LstdFlags) logger.SetPrefix("Test- ") // 設定日誌字首 logger.SetFlags(log.LstdFlags | log.Lshortfile) /* const ( // 字位共同控制輸出日誌資訊的細節。不能控制輸出的順序和格式。 // 在所有專案後會有一個冒號:2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message Ldate = 1 << iota // 日期:2009/01/23 Ltime // 時間:01:23:23 Lmicroseconds // 微秒解析度:01:23:23.123123(用於增強Ltime位) Llongfile // 檔案全路徑名+行號: /a/b/c/d.go:23 Lshortfile // 檔案無路徑名+行號:d.go:23(會覆蓋掉Llongfile) LstdFlags = Ldate | Ltime // 標準logger的初始值 ) */ } func main() { log.Println("輸出日誌到命令列終端") logger.Println("將日誌寫入檔案") //log.Panicln("在命令列終端輸出panic,並中斷程式執行") logger.Panicln("在日誌檔案中寫入panic,並中斷程式執行") log.Fatal("在命令列終端輸出日誌並執行os.exit(1)") //logger.Fatal("在日誌檔案中寫入日誌並執行os.exit(1)") defer file.Close() }
# cat test.log
Test- 2018/12/04 15:51:58 main.go:36: 將日誌寫入檔案
Test- 2018/12/04 15:51:58 main.go:38: 在日誌檔案中寫入panic,並中斷程式執行