【go】log

log

package main

import (
        "log"
        "os"
)

//init 在 main 之前执行
func init() {
        // 设置前缀
        log.SetPrefix("Log-Test ") //Log-Test2021/05/30 23:39:29 cant create file

        //设置输出
        // 创建日志文件名,还有日志文件的属性
        f, err := os.OpenFile("./go-log.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
        if err != nil {
                log.Fatalln("cant create file")
        }
        // 接收任何实现了 io.writer 接口的类型都可以
        log.SetOutput(f)

        // 设置标签
        log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile) //日期 时间(默认就有)  + 微秒+文件明和行号
        //Log-Test 2021/05/30 23:54:55.941390 /Users/yanyi/Desktop/Project/Go/study_go/go_project/src/FromBirthToDeath/pkg/log_t.go:50: println
        // 有一堆的标签,默认是 LstdFlags     = Ldate | Ltime   3

        // 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
        //      Lmsgprefix                    // move the "prefix" from the beginning of the line to before the message
        //      LstdFlags     = Ldate | Ltime // initial values for the standard logger
        //)

        // iota常量中定义依次为 0,1,2,3,4
        //移位的作用,
        //Ldate         = 1 << iota     1<<0  1向左移了 0 位还是 1, 00000001=1 2的0次
        //Ltime                                 1<<1  1向左移了 1 位是 2, 00000010=2 2的1次
        //Lmicroseconds                 1<<2  1向左移了 2 位是 4, 00000100=4 2的2次

        //这样的话可以实现组合, 00000011 代表的就是 Ldate 和 Ltime的组合

}

func main() {
        log.Println("println") //ln带换行
        //2021/05/30 23:33:17 println

        //log.Fatalln("Fatalln")
        //2021/05/30 23:33:37 Fatalln
        //同时程序退出  相当于把信息记录日志后 同时执行了 OS.Exit(1 )

        //log.Panicln("Panicln")
        //log.Panic("Panicln") //不带换行的
        //log.Panicf("Panicln %d",555) //带格式化的
        //panic: Panicln
        //
        //
        //goroutine 1 [running]:
        //log.Panicln(0xc000070f68, 0x1, 0x1)
        //        /usr/local/go/src/log/log.go:368 +0xae
        //main.main()
        //        /Users/yanyi/Desktop/Project/Go/study_go/go_project/src/FromBirthToDeath/pkg/log_t.go:17 +0x5d

        //程序退出同时打出 panic 的原因
}