1. 程式人生 > >golang package log

golang package log

element long line nal 程序 fail def err gin

package main

import (
    "log"
    "os"
)

var logger *log.Logger

func main() {
    file, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE, 666)
    if err != nil {
        log.Fatalln("fail to create test.log file!")
    }
    defer file.Close()
    logger = log.New(file, "", log.LstdFlags|log.Lshortfile) // 日誌文件格式:log包含時間及文件行數
    log.Println("輸出日誌到命令行終端")
    logger.Println("將日誌寫入文件")

    logger.SetFlags(log.LstdFlags | log.Lshortfile) // 設置日誌格式

    log.Panicln("在命令行終端輸出panic,並中斷程序執行")
    logger.Panicln("在日誌文件中寫入panic,並中斷程序執行")

    log.Fatal("在命令行終端輸出日誌並執行os.exit(1)")
    logger.Fatal("在日誌文件中寫入日誌並執行os.exit(1)")
}

Logger結構體所有字段都是私有的,提供了一個工廠函數獲取結構體實例

// New creates a new Logger. The out variable sets the
// destination to which log data will be written.
// The prefix appears at the beginning of each generated log line.
// The flag argument defines the logging properties.
func New(out io.Writer, prefix string, flag int) *Logger {
   return &Logger{out: out, prefix: prefix, flag: flag}
}

flag參數的常量

const (
   Ldate         = 1 << iota     // the date in the local time zone: 2009/01/23
   Ltime                         // the time in the local time zone: 01:23:23
   Lmicroseconds                 // microsecond resolution: 01:23:23.123123.  assumes Ltime.
   Llongfile                     // full file name and line number: /a/b/c/d.go:23
   Lshortfile                    // final file name element and line number: d.go:23. overrides Llongfile
   LUTC                          // if Ldate or Ltime is set, use UTC rather than the local time zone
   LstdFlags     = Ldate | Ltime // initial values for the standard logger
)

golang package log