为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 脚本专栏 > golang 正文

Go语言自学系列 | golang标准库log(golang语言讲解)

三叶资源网 2022-06-27 10:00:05 golang 406 ℃ 0 评论

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客_go语言自学


log简介

golang内置了log包,实现简单的日志服务。通过调用log包的函数,可以实现简单的日志打印功能。

log使用

log包中有3个系列的日志打印函数,分别print系列、panic系列、fatal系列。

函数系列

作用

print

单纯打印日志

panic

打印日志,抛出panic异常

fatal

打印日志,强制结束程序(os.Exit(1)),defer函数不会执行

实例

package main

import (
    "fmt"
    "log"
)

func main() {
    defer fmt.Println("发生了 panic错误!")
    log.Print("my log")
    log.Printf("my log %d", 100)
    name := "tom"
    age := 20
    log.Println(name, " ", age)
    log.Panic("致命错误!")
    // log.Fatal("致命错误!")
    fmt.Println("end...")
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
2022/05/29 21:11:50 my log
2022/05/29 21:11:50 my log 100
2022/05/29 21:11:50 tom   20
2022/05/29 21:11:50 致命错误!
发生了 panic错误!
panic: 致命错误!

goroutine 1 [running]:
log.Panic({0xc00013ff00, 0x3, 0xc00013ff00})
    /usr/local/go/src/log/log.go:354 +0x65
main.main()
    /Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go:15 +0x19e
exit status 2

log配置

标准log配置

默认情况下log只会打印出时间,但是实际情况下我们还需要获取文件名,行号等信息,log包提供给我们定制的接口。

log包提供两个标准log配置的相关方法:

func Flags() int // 返回标准log输出配置
func SetFlags(flag int) // 设置标准log输出配置

flag参数

const (
    // 控制输出日志信息的细节,不能控制输出的顺序和格式。
    // 输出的日志在每一项后会有一个冒号分隔,例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
    Ldate         = 1 << iota     // 日期,2009/01/23
    Ltime                         // 时间,01:23:23
    Lmicroseconds                 // 微秒级别的时间,01:23:23.123123(用于增强Ltime位)
    Llongfile                     // 文件全路径名+行号,/a/b/c/d.go:23
    Lshortfile                    // 文件名+行号,d.go:23(会覆盖掉Llongfile)
    LUTC                          // 使用UTC时间
    LstdFlags     = Ldate | Ltime // 标准logger的初始值
)

标准日志配置示例

package main

import (
    "fmt"
    "log"
)

func main() {
    i := log.Flags()
    fmt.Printf("i: %v\n", i)
    log.SetFlags(log.Ldate | log.Ltime | log.Llongfile)
    log.Print("my log")
}

输出结果:

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
i: 3
2022/05/29 21:27:41 /Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go:12: my log

日志前缀配置

log包提供两个日志前缀配置的相关函数:

func Prefix() string // 返回日志的前缀配置
func SetPrefix(prefix string) // 设置日志前缀

日志前缀配置实例

package main

import (
    "fmt"
    "log"
)

func main() {
    s := log.Prefix()
    fmt.Printf("s: %v\n", s)
    log.SetPrefix("MyLog: ")
    s = log.Prefix()
    fmt.Printf("s: %v\n", s)
    log.Print("my log...")
}

输出结果:

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
s: 
s: MyLog: 
MyLog: 2022/05/29 21:36:16 my log...

日志输出位置配置

前面介绍的都是将日志输出到控制台上,golang的log包还支持将日志输出到文件中,log包提供了func SetOutput(w io.Writer)函数,将日志输出到文件中。

日志输出位置配置

package main

import (
    "log"
    "os"
)

func main() {
    f, err := os.OpenFile("a.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        log.Panic("打开日志文件异常")
    }
    log.SetOutput(f)
    log.Print("my log...")
}

结果:日志输出到当前目录下 a.log文件中

2022/05/29 21:41:46 my log...

自定义logger

log包为我们提供了内置含糊,让我们能自定义logger。从效果上来看,就是将标题3中的标准日志配置、日志前缀配置、日志输出位置配置整合到一个函数中,使日志配置不在那么繁琐。

log包中提供了func New(out io.Writer, prefix string, flag int) *Logger函数来实现自定义logger。

示例

package main

import (
    "log"
    "os"
)

var logger *log.Logger

func init() {
    logFile, err := os.OpenFile("a.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    if err != nil {
        log.Panic("打开日志文件异常")
    }
    logger = log.New(logFile, "success", log.Ldate | log.Ltime | log.Lshortfile)
}

func main() {
    logger.Println("自定义logger")
}

结果:日志输出到当前目录下的a.log文件中

success2022/05/29 21:48:31 test.go:19: 自定义logger

Tags:

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
十进制按键精灵基础练习支付崩溃自动转储sqlite之数据库高级记事本烧饼帝多线程教程手势验证码网页解析库黑猫论坛ACCESS操作奇易模块MIDI解析CSSjavascript面试题移动咪咕node模块红手指云手机app算法http进度下载PostgreSQL数据库
最新评论