Go——log包详解

log包

日志相关

常量

常量列表:

- Ldate         日期 年//- Ltime         时间 时::- Lmicroseconds 时间 .毫秒于Ltime之后
- Llongfile     完整文件名:行号
- Lshortfile    文件名,此标志位优先于 Llongfile
- LstdFlags     = Ldate 并且 Ltime

功能说明:标志位常量控制日志格式。
func main() {
	log.SetFlags(log.Lshortfile | log.LstdFlags)
	log.Println("log:") //2023/05/18 12:09:57 constantsDemo.go:15: log:
}
函数列表
func Fatal(v ...interface{})
func Fatalf(format string, v ...interface{})
func Fatalln(v ...interface{})
func Flags() int
func Panic(v ...interface{})
func Panicf(format string, v ...interface{})
func Panicln(v ...interface{})
func Prefix() string
func Print(v ...interface{})
func Printf(format string, v ...interface{})
func Println(v ...interface{})
func SetFlags(flag int)
func SetOutput(w io.Writer)
func SetPrefix(prefix string)
func New(out io.Writer, prefix string, flag int) *Logger
func (l *Logger) Fatal(v ...interface{})
func (l *Logger) Fatalf(format string, v ...interface{})
func (l *Logger) Fatalln(v ...interface{})
func (l *Logger) Flags() int
func (l *Logger) Output(calldepth int, s string) error
func (l *Logger) Panic(v ...interface{})
func (l *Logger) Panicf(format string, v ...interface{})
func (l *Logger) Panicln(v ...interface{})
func (l *Logger) Prefix() string
func (l *Logger) Print(v ...interface{})
func (l *Logger) Printf(format string, v ...interface{})
func (l *Logger) Println(v ...interface{})
func (l *Logger) SetFlags(flag int)
func (l *Logger) SetPrefix(prefix string)
自定义logger

func New(out io.Writer, prefix string, flag int) *Logger

  • 参数列表:
    • out 输出目标
    • prefix 输出前缀
    • flag 格式配置标识值
  • 返回值:
    • 自定义的logger
  • 功能说明:这个方法用来自定义logger,指定输出目标、格式等
func main() {
	l := log.New(os.Stderr, "logger", log.Ldate)
	l.Println("log to stderr sample")//logger2023/05/18 log to stderr sample
}

1、 Fatal系列函数

1.1 func Fatal(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:打印日志并退出。相当于调用Print()并os.Exit(1)
1.2 func Fatalf(format string, v …interface{})
  • 参数列表:
    • format 输出格式
    • v 带输出参数列表
  • 返回值:
  • 功能说明:按格式输出日志,并退出。相当于调用Printf()并调用os.Exit(1)
1.3 func Fatalln(v …interface{})
  • 参数列表:
    • v
  • 返回值:
  • 功能说明:打印一行日志并退出。相当于调用Println()并os.Exit(1)
1.4 func (l *Logger) Fatal(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:打印日志并退出。相当于调用l.Print()并os.Exit(1)
1.5 func Fatalf(format string, v …interface{})
  • 参数列表:
    • format 输出格式
    • v 带输出参数列表
  • 返回值:
  • 功能说明:按格式输出日志,并退出。相当于调用l.Printf()并调用os.Exit(1)
1.6 func (l *Logger) Fatalln(v …interface{})
  • 参数列表:
    • v
  • 返回值:
  • 功能说明:打印一行日志并退出。相当于调用l.Println()并os.Exit(1)
func main() {
	age := 25
	log.Fatal("Hi & Bye ! Age = ", age) // this will print "Hi & Bye ! Age = 25"
	log.Println("This will not be called.")

	name := "golang"
	log.Fatalf("%8d,%8s", 23, name) //2013/03/10 16:08:49       23,  golang

	log.Fatalln("bye!") //2013/03/10 16:14:54 bye!\n

	l := log.New(os.Stdout, "", log.LstdFlags)
	age = 25
	l.Fatal("Hi & Bye ! Age = ", age) // this will print "Hi & Bye ! Age = 25"
	l.Println("This will not be called.")

	l = log.New(os.Stdout, "", log.LstdFlags)
	//l.Fatalf("%s", "hello")
	name = "golang"
	l.Fatalf("%8d,%8s", 23, name) //2013/03/10 16:08:49       23,  golang

	l = log.New(os.Stdout, "", log.LstdFlags)
	l.Fatalln("bye!") //2013/03/10 16:14:54 bye!\n
}

2、Flags系列函数

2.1 func Flags() int
  • 参数列表:
  • 返回值:
    • 默认logger的配置值
  • 功能说明:返回默认logger配置值。
2.2 func (l *Logger) Flags() int
  • 参数列表:
  • 返回值:
    • 当期logger的配置值
  • 功能说明:返回当前logger配置值。
2.3 func SetFlags(flag int)
  • 参数列表:
    • flag logger配置值
  • 返回值:
  • 功能说明:这个方法用来设置标准logger的配置,默认为3(logger.LstdFlags)
2.4 func (l *Logger) SetFlags(flag int)
  • 参数列表:
    • flag logger配置值
  • 返回值:
  • 功能说明:这个方法用来设置标准logger的配置,默认为3(logger.LstdFlags)
func main() {
	fmt.Println("standard flags :", log.Flags()) //standard flags : 3
	//the flags constants
	fmt.Println(log.Ldate)         //1
	fmt.Println(log.Ltime)         //2
	fmt.Println(log.Lmicroseconds) //4
	fmt.Println(log.Llongfile)     //8
	fmt.Println(log.Lshortfile)    //16
	fmt.Println(log.LstdFlags)     //LstdFlags     = Ldate | Ltime   3

	l := log.New(os.Stdout, "", log.LstdFlags)
	fmt.Println("logger l's flags :", l.Flags()) //logger l's flags : 3

	log.Println(log.Flags()) //2013/03/10 17:46:53 3
	log.SetFlags(log.Ldate)
	log.Println(log.Flags()) //2013/03/10 1
	log.SetFlags(log.LstdFlags | log.Lshortfile)
	log.Println(log.Flags()) //2013/03/10 17:46:53 setflags.go:17: 19

	l = log.New(os.Stdout, "", log.LstdFlags)
	l.Println(l.Flags()) //2013/03/10 17:46:53 3
	l.SetFlags(log.Ldate)
	l.Println(l.Flags()) //2013/03/10 1
	l.SetFlags(log.LstdFlags | log.Lshortfile)
	l.Println(l.Flags()) //2013/03/10 17:46:53 setflags.go:17: 19
}

3、Panic系列函数

3.1 func (l *Logger) Panic(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:这个方法相当于调用l.Print()及panic()
3.2 func (l *Logger) Panicf(format string, v …interface{})
  • 参数列表:
    • format 输出格式
    • v 待输出参数列表
  • 返回值:
  • 功能说明:相当于调用l.Printf(),之后调用panic()
3.3 func (l *Logger) Panicln(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:相当于调用l.Println()并调用panic()
3.4 func Panic(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:这个方法相当于调用Print()及panic()
3.5 func Panicf(format string, v …interface{})
  • 参数列表:
    • format 输出格式
    • v 待输出参数列表
  • 返回值:- 无
  • 功能说明:相当于调用Printf(),之后调用panic()
3.6 func Panicln(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:相当于调用Println()并调用panic()
func main() {
	l := log.New(os.Stdout, "", log.LstdFlags)
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err) //output : "call panic and stop"
			handleException()
		}
	}()
	l.Panic("call panic and stop")
	log.Println("this will not be called.")

	defer func() {
		if err := recover(); err != nil {
			if err == "3q" {
				log.Println("you are welcome")
			}
		}
	}()
	l = log.New(os.Stdout, "", log.LstdFlags)
	l.Panicf("%d%s", 3, "q")

	defer func() {
		if err := recover(); err != nil {
			if err == "3q\n" {
				log.Println("you are welcome")
			}
		}
	}()
	l = log.New(os.Stdout, "", log.LstdFlags)
	l.Panicln("3q")
}

func handleException() {
	log.Println("recovering...")
}

4、Print系列函数

4.1 func (l *Logger) Print(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:输出日志到logger。参数处理方式同fmt.Print
4.2 func (l *Logger) Printf(format string, v …interface{})
  • 参数列表:
    • format 输出格式
    • v 待输出参数列表
  • 返回值:
  • 功能说明:调用l.Output输出日志到logger l。参数处理方式同fmt.Printf
4.3 func (l *Logger) Println(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:调用Output打印日志到当前logger,参数处理方式同fmt.Println
4.4 func Print(v …interface{})
  • 参数列表:
    • v 待输出参数列表
  • 返回值:
  • 功能说明:输出日志到标准logger。参数处理方式同fmt.Print
4.5 func Printf(format string, v …interface{})
  • 参数列表:
    • format 输出格式
    • v 待输出参数列表
  • 返回值:
  • 功能说明:调用Output输出日志到标准logger。参数处理方式同fmt.Printf
4.6 func Println(v …interface{})
  • 参数列表:
    • v
  • 返回值:
  • 功能说明:调用Output打印日志到标准logger,参数处理方式同fmt.Println
func main() {
	l := log.New(os.Stdout, "", log.LstdFlags)
	l.Print("string", 1, 2.3) //2013/03/10 17:26:06 string1 2.3

	l = log.New(os.Stdout, "", log.LstdFlags)
	l.Printf("%s", "hello") //hello
	name := "golang"
	l.Printf("%8d,%8s", 23, name) //2013/03/10 16:08:49       23,  golang

	l = log.New(os.Stdout, "", log.LstdFlags)
	l.Println("hello") //2013/03/10 17:35:28 hello\n

	log.Print("string", 1, 2.3) //2013/03/10 17:26:06 string1 2.3

	log.Printf("%s", "hello") //hello
	name = "golang"
	log.Printf("%8d,%8s", 23, name) //2013/03/10 16:08:49       23,  golang

	log.Println("hello") //2013/03/10 17:35:28 hello\n
}

5、其它函数

5.1 func (l *Logger) Prefix() string
  • 参数列表:
  • 返回值:
    • logger前缀,字符串类型
  • 功能说明:返回当前logger的输出前缀
5.2 func Prefix() string
  • 参数列表:
  • 返回值:
    • 标准logger前缀,字符串类型
  • 功能说明:返回标准logger的输出前缀
5.3 func SetPrefix(prefix string)
  • 参数列表:
    • prefix 前缀
  • 返回值:
  • 功能说明:设置logger的输出前缀
5.4 func SetPrefix(prefix string)
  • 参数列表:
    • prefix 前缀
  • 返回值:
  • 功能说明:设置logger的输出前缀
5.5 func (l *Logger) Output(calldepth int, s string) error
  • 参数列表:
    • calldepth 深度
    • s 字符串
  • 返回值:
    • error 错误
  • 功能说明:输出日志事件。字符串s包含待打印内容,跟在预定义的prefix后面,并且根据flags设置会有区分。如果s末尾没有换行符,这个方法会默认加上一个。calldepth目前预定义均为2,以后会用来支持通用场景,支持其他值配置。(本人注:日志输出不建议直接使用该方法)
5.6 func SetOutput(w io.Writer)
  • 参数列表:
    • w 目标流,io.Writer类型
  • 返回值:
  • 功能说明:设置标准logger的输出目标
func main() {
	l := log.New(os.Stdout, "", log.LstdFlags)
	fmt.Print(l.Prefix()) //this will print nothing
	l.Println(1)          //2013/03/10 17:02:05 1
	l.SetPrefix("log:")
	fmt.Println(l.Prefix()) //log:
	l.Println(2)            //log:2013/03/10 17:02:05 2

	fmt.Print(log.Prefix()) //this will print nothing
	log.Println(1)          //2013/03/10 17:02:05 1
	log.SetPrefix("log:")
	fmt.Println(log.Prefix()) //log:
	log.Println(2)            //log:2013/03/10 17:02:05 2

	l = log.New(os.Stdout, "", log.LstdFlags)
	fmt.Print(l.Prefix()) //this will print nothing
	l.Println(1)          //2013/03/10 17:02:05 1
	l.SetPrefix("log:")
	fmt.Println(l.Prefix()) //log:

	l.Println(2) //log:2013/03/10 17:02:05 2

	fmt.Print(log.Prefix()) //this will print nothing
	log.Println(1)          //2013/03/10 17:02:05 1
	log.SetPrefix("log:")
	fmt.Println(log.Prefix()) //log:
	log.Println(2)            //log:2013/03/10 17:02:05 2

	l = log.New(os.Stdout, "log->", log.Ldate)
	l.Output(2, "log output")

	file, err := os.OpenFile("sample.txt", os.O_WRONLY, 0666)
	if err != nil {
		panic(err)
	}
	defer file.Close()
	log.SetOutput(file)
	log.Println("log to file")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值