Logging Go Programs

标准库软件包日志提供了用于GO语言的日志管理的基本基础结构,可用于记录我们的GO程序。日志记录的主要目的是跟踪程序中发生的事情,发生的地方以及发生的时间。日志可以提供代码跟踪,概要分析和分析。日志记录(程序员的耳目)是一种查找这些错误并了解有关程序运行方式的更多信息的方法。

要使用包日志,我们必须将其添加到导入列表中:

import (
	"log"
)

在最简单的用法中,它格式化消息并将其发送到以下示例的标准错误检查:

// Program in GO language to demonstrates how to use base log package.
package main
import (
	"log"		
)
func init(){
	log.SetPrefix("LOG: ")
	log.SetFlags(log.Ldate | log.Lmicroseconds | log.Llongfile)
	log.Println("init started")
}
func main() {
// Println writes to the standard logger.
	log.Println("main started")

// Fatalln is Println() followed by a call to os.Exit(1)
	log.Fatalln("fatal message")

// Panicln is Println() followed by a call to panic()
	log.Panicln("panic message")
}

执行此代码后,输出将如下所示:

C:\golang>go run example38.go 日志:2017/06/25 14:49:41.989813 C:/golang/example38.go:11:初始化开始 日志:2017/06/25 14:49:41.990813 C:/golang/example38.go:15:主启动 日志:2017/06/25 14:49:41.990813 C:/golang/example38.go:18:致命消息 exit status 1

将消息发送到标准错误对于简单工具很有用。在构建服务器,应用程序或系统服务时,我们需要一个更好的位置来发送日志消息。在这里,所有错误消息都将发送到标准错误,而不管该消息是实际错误还是参考消息。

标准日志条目包含以下内容:
-前缀(log.SetPrefix(“ LOG:”))
-日期时间戳(log.Ldate)
-写入日志的源代码文件的完整路径(log.Llongfile)
-执行写,最后执行消息的代码行。

这些信息是为我们自动生成的,有关事件发生时间的信息以及发生事件的位置的信息。

Println是写日志消息的标准方法。
Fatalln或其他任何“致命”调用中,该库将打印错误消息,然后调用os.Exit(1),迫使程序退出。
Panicln用于写入日志消息,然后发出紧急情况,除非恢复,否则可能会导致程序终止。

使用GO语言编程,并带有真实的日志记录示例。

现在,我以一个真实的示例为例,并在程序中实现了上面的日志包。例如,我正在测试SMTP连接是否正常工作。对于测试用例,我将连接到不存在的SMTP服务器“ smtp.smail.com”,因此程序将以一条日志消息终止。

// 使用GO语言编程,并带有真实的日志记录示例。
package main

import (
"log"
"net/smtp"
)
func init(){
	log.SetPrefix("TRACE: ")
	log.SetFlags(log.Ldate | log.Lmicroseconds | log.Llongfile)
	log.Println("init started")
}
func main() {
// Connect to the remote SMTP server.
client, err := smtp.Dial("smtp.smail.com:25")
	if err != nil {	
		log.Fatalln(err)
	}
client.Data()
}

C:\golang>go run example39.go 跟踪:2017/06/25 14:54:42.662011 C:/golang/example39.go:9:初始化已启动 跟踪:2017/06/25 14:55:03.685213 C:/golang/example39.go:15:拨打tcp 23.27.98.252:25:connectex:连接尝试失败,因为一段时间后被连接方未正确响应,或建立的连接失败,因为连接的主机无法响应。 exit status 1

上面的程序从log.Fatalln(err)抛出致命异常。