Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go语言log 包

go语言中的log 包示例详解

作者:半桶水专家

Go语言的log包提供了用于记录日志的基本功能,相比fmt包,增加了时间戳、日志级别等日志管理功能,非常适合用于调试和记录运行信息,本文呢介绍go语言中的log 包,感兴趣的朋友一起看看吧

Go语言的log包提供了用于记录日志的基本功能。相比fmt包,log包增加了时间戳、日志级别等日志管理功能,非常适合用于调试和记录运行信息。下面是对log包的详细说明,以及它与fmt包的区别。

1. log包的基础功能

log包中包含一系列函数,可以用于打印带时间戳的日志信息,默认将日志写入标准错误输出(os.Stderr),并在每条日志的开头添加时间戳。

常用函数

log.Print:基本日志输出函数,类似于fmt.Print,但会在输出前添加时间戳。

log.Println:类似于fmt.Println,会在输出前添加时间戳,并在结尾添加换行符。

log.Printf:类似于fmt.Printf,支持格式化输出,并在输出前添加时间戳。

示例代码:

package main
import "log"
func main() {
    log.Print("This is a log message.")
    log.Println("This is another log message.")
    log.Printf("Formatted log: %d + %d = %d", 2, 3, 2+3)
}

2. log包的日志级别函数

log包还提供了两种特殊的日志函数,用于处理错误和程序退出的情况:

log.Fatal:用于记录严重的错误信息,输出日志后会调用os.Exit(1),终止程序执行。

log.Panic:用于记录错误信息,同时调用panic,引发恐慌(程序崩溃并抛出堆栈信息),适合用于调试和处理非正常情况。

示例代码:

package main
import "log"
func main() {
    log.Print("This is a normal log.")
    log.Fatal("This is a fatal error log, program will exit.")  // 输出后程序会退出
    log.Panic("This will not be executed because of Fatal above.")
}

3. 自定义日志输出位置

log包默认将日志输出到标准错误流(os.Stderr),但是可以通过log.SetOutput方法自定义输出位置。可以将日志输出到文件、网络或其他符合io.Writer接口的目标。

示例:将日志输出到文件

package main
import (
    "log"
    "os"
)
func main() {
    file, err := os.Create("app.log")
    if err != nil {
        log.Fatal("Failed to create log file:", err)
    }
    defer file.Close()
    log.SetOutput(file)  // 将日志输出设置为文件
    log.Println("This log will be written to app.log file.")
}

4. 自定义日志前缀和标记

log包允许自定义日志的前缀和格式,帮助识别日志的来源或类型。使用log.SetPrefix方法可以设置日志的前缀,使用log.SetFlags可以控制日志的标记。

日志标记

log包提供了以下几个标记(使用SetFlags设置):

示例:自定义日志前缀和标记

package main
import "log"
func main() {
    log.SetPrefix("INFO: ")                  // 设置日志前缀
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)  // 设置日志标记
    log.Println("This is a customized log message.")
}

5. 创建自定义的日志记录器

使用log.New可以创建自定义的日志记录器(Logger),并指定不同的输出目标、前缀和标记。多个日志记录器可以记录不同类型的日志信息。

示例:创建两个不同的日志记录器

package main
import (
    "log"
    "os"
)
func main() {
    // 创建错误日志记录器,输出到标准错误
    errorLogger := log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
    // 创建信息日志记录器,输出到文件
    infoFile, err := os.Create("info.log")
    if err != nil {
        log.Fatal(err)
    }
    defer infoFile.Close()
    infoLogger := log.New(infoFile, "INFO: ", log.Ldate|log.Ltime)
    infoLogger.Println("This is an informational message.")
    errorLogger.Println("This is an error message.")
}

log包与fmt包的区别

用途不同

输出内容不同

输出位置

日志级别

程序控制

总结

到此这篇关于go语言中的log 包详解的文章就介绍到这了,更多相关go语言log 包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文