十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Golang提供了原生日志库“log”,使用简单方便,本文以代码为例进行说明介绍。
目前创新互联建站已为上1000+的企业提供了网站建设、域名、虚拟主机、网站托管、服务器租用、企业网站设计、永年网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
package main
import (
"os"
"log"
"fmt"
)
func main() {
// 打开日志文件
// 第二个参数为打开文件的模式,可选如下:
/*
O_RDONLY // 只读模式打开文件
O_WRONLY // 只写模式打开文件
O_RDWR // 读写模式打开文件
O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE // 如果不存在将创建一个新文件
O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC // 打开文件用于同步I/O
O_TRUNC // 如果可能,打开时清空文件
*/
// 第三个参数为文件权限,请参考linux文件权限,664在这里为八进制,代表:rw-rw-r--
logFile, err := os.OpenFile("e:/go.log", os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
// 第一个参数为输出io,可以是文件也可以是实现了该接口的对象,此处为日志文件;第二个参数为自定义前缀;第三个参数为输出日志的格式选项,可多选组合
// 第三个参数可选如下:
/*
Ldate = 1 // 日期:2009/01/23
Ltime = 2 // 时间:01:23:23
Lmicroseconds = 4 // 微秒分辨率:01:23:23.123123(用于增强Ltime位)
Llongfile = 8 // 文件全路径名+行号: /a/b/c/d.go:23
Lshortfile = 16 // 文件无路径名+行号:d.go:23(会覆盖掉Llongfile)
LstdFlags = Ldate | Ltime // 标准logger的初始值
*/
debugLog := log.New(logFile, "[debug]", log.Ldate|log.Ltime|log.Llongfile)
// 日志输出
debugLog.Print("日志测试Print输出,处理同fmt.Print")
debugLog.Println("日志测试Println输出,处理同fmt.Println")
debugLog.Printf("日志测试%s输出,处理同fmt.Printf", "Printf")
// 日志输出,同时直接终止程序,后续的操作都不会执行
debugLog.Fatal("日志测试Fatal输出,处理等价于:debugLog.Print()后,再执行os.Exit(1)")
debugLog.Fatalln("日志测试Fatalln输出,处理等价于:debugLog.Println()后,再执行os.Exit(1)")
debugLog.Fatalf("日志测试%s输出,处理等价于:debugLog.Print()后,再执行os.Exit(1)", "Fatalf")
// 日志输出,同时抛出异常,可用recover捕捉
defer func() {
if r := recover(); r != nil {
fmt.Println("===========", r)
}
}()
debugLog.Panic("日志测试Panic输出,处理等价于:debugLog.Print()后,再执行Panic()")
debugLog.Panicln("日志测试Panicln输出,处理等价于:debugLog.Println()后,再执行Panic()")
debugLog.Panicf("日志测试%s输出,处理等价于:debugLog.Printf()后,再执行Panic()", "Panicf")
fmt.Println("前缀为:", debugLog.Prefix()) // 前缀为: [debug]
fmt.Println("输出选项为:", debugLog.Flags()) // 输出选项为: 11
// 设置前缀
debugLog.SetPrefix("[info]")
// 设置输出选项
debugLog.SetFlags(log.LstdFlags)
fmt.Println("前缀为:", debugLog.Prefix()) // 前缀为: [info]
fmt.Println("输出选项为:", debugLog.Flags()) // 输出选项为: 3
}
说明:以上代码执行时要分段注释后执行,否则执行到:
debugLog.Fatal("日志测试Fatal输出,处理等价于:debugLog.Print()后,再执行os.Exit(1)")
便会终止