一、Go基础知识34、log详解:使用Go语言的`log`包进行日志记录

Go语言的log包提供了简单灵活的日志功能,用于记录程序运行时的信息。

1、导入log

首先,需要在代码中导入log包:

import "log"

2、基本的日志输出

使用log.Println可以输出一行日志:

log.Println("This is a basic log message.")

常用的日志输出方式是使用标准库中的 log 包。

这个包提供了基本的日志功能,允许你输出不同级别的日志信息。

常用的方法有 Print, Printf, Println, Fatal, Fatalf, Fatalln, Panic, Panicf, Panicln

  • Print系列:这一系列方法用于打印一般的日志信息,不会中断程序的执行。

    • log.Print(v ...interface{}):打印一般日志信息,不会换行。
    • log.Printf(format string, v ...interface{}):按照指定格式打印日志信息。
    • log.Println(v ...interface{}):打印一般日志信息,并在最后添加换行符。
  • Fatal系列:这一系列方法用于打印严重错误信息,并调用 os.Exit(1) 终止程序的执行。

    • log.Fatal(v ...interface{}):打印严重错误信息,不会换行,并调用 os.Exit(1) 终止程序执行。
    • log.Fatalf(format string, v ...interface{}):按照指定格式打印严重错误信息,并调用 os.Exit(1) 终止程序执行。
    • log.Fatalln(v ...interface{}):打印严重错误信息,并在最后添加换行符,并调用 os.Exit(1) 终止程序执行。
  • Panic系列:这一系列方法用于打印严重错误信息,并调用 panic 函数引发恐慌。

    • log.Panic(v ...interface{}):打印严重错误信息,不会换行,并调用 panic 函数引发恐慌。
    • log.Panicf(format string, v ...interface{}):按照指定格式打印严重错误信息,并调用 panic 函数引发恐慌。
    • log.Panicln(v ...interface{}):打印严重错误信息,并在最后添加换行符,并调用 panic 函数引发恐慌。

可以使用 log.SetOutput 方法来设置日志输出的目标,比如将日志输出到文件中。另外,还可以使用 log.SetFlags 方法来设置日志的格式,比如添加时间信息等。

package main

import (
	"log"
	"os"
)

func main() {
	// 设置日志输出到标准输出
	log.SetOutput(os.Stdout)

	// 打印一般日志信息
	log.Print("This is a general log message")

	// 打印严重错误信息并终止程序执行
	log.Fatal("This is a fatal error message")

	// 打印严重错误信息并引发恐慌
	log.Panic("This is a panic message")
}

3、定制日志输出格式

通过log.SetFlagslog.SetPrefix可以定制日志的输出格式,例如:

log.SetFlags(log.Ldate | log.Ltime)  // 添加日期和时间信息
log.SetPrefix("[MyApp] ")            // 添加前缀
log.Println("Customized log message.")

4、输出到文件

使用log.SetOutput可以将日志输出到文件,示例中将日志写入log.txt

file, err := os.Create("log.txt")
if err != nil {
    log.Fatal("Unable to create log file:", err)
}
defer file.Close()

log.SetOutput(file)
log.Println("Log message written to file.")

5、日志级别

Go的log包本身不提供日志级别的概念,但可以通过自定义函数来实现:

const (
    LogLevelInfo    = iota
    LogLevelWarning
    LogLevelError
)

func customLog(level int, message string) {
    prefix := "["
    switch level {
    case LogLevelInfo:
        prefix += "INFO"
    case LogLevelWarning:
        prefix += "WARNING"
    case LogLevelError:
        prefix += "ERROR"
    }
    prefix += "] "

    log.Println(prefix + message)
}

customLog(LogLevelError, "This is an error message.")

6、使用log.Fatallog.Panic

log.Fatallog.Panic用于记录致命错误并退出程序。log.Fatal输出日志后会调用os.Exit(1),而log.Panic则会在输出日志后调用panic

log.Fatal("Fatal error. Program will exit.")
log.Panic("Panic! Program will panic and exit.")

7、示例代码

package main

import (
    "log"
    "os"
)

const (
    LogLevelInfo    = iota
    LogLevelWarning
    LogLevelError
)

func customLog(level int, message string) {
    prefix := "["
    switch level {
    case LogLevelInfo:
        prefix += "INFO"
    case LogLevelWarning:
        prefix += "WARNING"
    case LogLevelError:
        prefix += "ERROR"
    }
    prefix += "] "

    log.Println(prefix + message)
}

func main() {
    log.Println("This is a basic log message.")

    log.SetFlags(log.Ldate | log.Ltime)
    log.SetPrefix("[MyApp] ")
    log.Println("Customized log message.")

    file, err := os.Create("log.txt")
    if err != nil {
        log.Fatal("Unable to create log file:", err)
    }
    defer file.Close()

    log.SetOutput(file)
    log.Println("Log message written to file.")

    customLog(LogLevelError, "This is an error message.")

    log.Fatal("Fatal error. Program will exit.")
    // log.Panic("Panic! Program will panic and exit.")
}

8、结果

This is a basic log message.
[MyApp] Customized log message.
Log message written to file.
[ERROR] This is an error message.
Fatal error. Program will exit.

9、注意事项

  • log包在默认情况下输出到标准错误(os.Stderr)。
  • 在实际应用中,可以根据需求将日志记录到文件、数据库或其他持久化存储中。
  • log包是线程安全的,可以在多个goroutine中安全地进行日志记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风不归Alkaid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值