面向云技术架构 - 痴者工良

  • 首页
  • 工良写的电子书
    • kubernetes 教程
    • 从 C# 入门 Kafka
    • 多线程和异步
    • 动态编程-反射、特性、AOP
    • 表达式树
  • 本站文章导航
  • 隐私政策
愿有人陪你颠沛流离
遇到能让你付出的事物或者人,都是一种运气。
能遇到,就该珍惜。或许你们最终没能在一起,但你会切实地感受到力量。
正因为这样,那段相遇才变得有价值,才没有辜负这世间的每一段相遇。
  1. 首页
  2. 编程语言
  3. Golang
  4. 正文

Go 的 log 日志接口使用方法

2022年11月20日 352点热度 0人点赞 0条评论
内容纲要

使用

Go 中常用的 log 方法:

Print/Printf/Println : 打印日志信息
Panic/Panicf/Panicln : 打印日志信息后,以拼装好的字符串为参数调用 Panic
Fatal/Fatalf/Fatalln : 打印日志信息后,os.Exit(1) 退出程序

New 一个 Logger 的定义如下:

func New(out io.Writer, prefix string, flag int) *Logger {
    return &Logger{out: out, prefix: prefix, flag: flag}
}

type Logger struct {
    mu     sync.Mutex // ensures atomic writes; protects the following fields
    prefix string     // prefix on each line to identify the logger (but see Lmsgprefix)
    flag   int        // properties
    out    io.Writer  // destination for output
    buf    []byte     // for accumulating text to write
}

例如,日志写入文件中:

package main

import (
    "fmt"
    "log"
    "os"
    "time"
)

func main() {
    fn := fmt.Sprint("log-", time.Now().Unix(), ".log")
    logFile, _ := os.Create(fn)
    defer logFile.Close()

    logger := log.New(logFile, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)
    logger.Println("test debug message")
    logger.SetPrefix("[Info]")
    logger.Println("test info message")

}

file

logger.SetPrefix("[Info]") 可以重新设置前缀;

log.Ldate|log.Ltime|log.Lshortfile 设置日志的 flags,示例中一共有三个枚举,可以让日志附加信息。

生成效果:2022/11/20 09:09:39 main.go:16

log.Ldate 生成 2022/11/20;
log.Ltime 生成 09:09:39;
log.Lshortfile 生成 main.go:16,表示日志来源于源代码的具体位置。

只打印到控制台:

    logger := log.New(os.Stdout, "[Debug]", log.Ldate|log.Ltime|log.Lshortfile)

file

封装日志

参考 https://www.cnblogs.com/tigerzhouv587/p/11498630.html

package main

import (
    "io"
    "io/ioutil"
    "log"
    "os"
)

var (
    Trace   *log.Logger // 记录所有日志
    Info    *log.Logger // 重要的信息
    Warning *log.Logger // 需要注意的信息
    Error   *log.Logger // 致命错误
)

func init() {
    file, err := os.OpenFile("file", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalln("Failed to open error log file:", err)
    }

    Trace = log.New(ioutil.Discard, "TRACE: ", log.Ltime|log.Lshortfile)
    Info = log.New(os.Stdout, "Info: ", log.Ltime|log.Lshortfile)
    Warning = log.New(os.Stdout, "Warning: ", log.Ltime|log.Lshortfile)
    Error = log.New(io.MultiWriter(file, os.Stderr), "Error", log.Ltime|log.Lshortfile)
}

func main() {
    Trace.Println("I have something standard to say")
    Info.Println("Special Information")
    Warning.Println("There is something you need to know about")
    Error.Println("Something has failed")
}

io.MultiWriter(file, os.Stderr) ,可以将一个 IO 流,同时写入到多个 IO 流中。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: go log 接口 方法 日志
最后更新:2022年11月20日

痴者工良

高级程序员劝退师

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

文章目录
  • 使用
  • 封装日志

COPYRIGHT © 2022 whuanle.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备18051778号

粤公网安备 44030902003257号