«

Golang log标准库

时间:2025-1-13 20:55     作者:杨佳乐     分类: Golang


package main

import (
    "log"
    "os"
)

// log 标准库是一个简单而强大的日志工具,用于记录程序运行过程中的信息。它支持日志输出到控制台、文件等,还可以自定义格式和行为

func main(){

    // 基本用法
    log.Println("This is a log message")
    log.Printf("This is a formatted log: %d", 42)
    // log.Fatal("这将记录消息并退出程序") //打印日志后调用 os.Exit(1) 退出程序
    // log.Panic("这将记录消息并报异常") //打印日志后调用 panic

    // 默认行为
    // 默认输出到标准错误(os.Stderr)
    // 默认日志格式:时间戳 + 日志内容
    // 默认包含日期和时间

    // 设置日志前缀
    // 使用 log.SetPrefix 添加前缀
    log.SetPrefix("[INFO] ")
    log.Println("This is an informational message")
    // [INFO] 2025/01/13 20:46:02 This is an informational message

    // 设置日志标志
    // 使用 log.SetFlags 控制日志的时间格式和内容
    log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
    log.Println("This is a detailed log message")
    // [INFO] 2025/01/13 20:47:17.910174 8-pkg-log.go:35: This is a detailed log message

    // 常用标志:
    // log.Ldate: 日期(2025/01/12)。
    // log.Ltime: 时间(12:34:56)。
    // log.Lmicroseconds: 微秒级时间戳。
    // log.Llongfile: 绝对路径和文件名。
    // log.Lshortfile: 短文件名和行号。
    // log.LUTC: 使用 UTC 时间。

    // 日志输出到文件
    file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("Failed to open log file: %s", err)
    }
    defer file.Close()

    log.SetOutput(file)
    log.Println("This log will be written to the file")

    // 使用自定义 Writer
    // var buffer bytes.Buffer
    // log.SetOutput(&buffer)

    // log.Println("This log is written to a buffer")
    // log.Println("Another log message")

    // // 打印缓冲区内容
    // println(buffer.String())

    // 创建自定义日志器
    file2, _ := os.OpenFile("app2.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    defer file2.Close()

    logger := log.New(file2, "[CUSTOM] ", log.Ldate|log.Ltime|log.Lshortfile)
    logger.Println("This is a custom log message")

    // 记录错误
    // err := errors.New("an example error")
    // log.Printf("Error occurred: %v", err)

}

标签: Golang标准库