1. 程式人生 > >golang log日誌

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,並中斷程式執行