[go-每日一库] 使用log标准库实现日志功能

golang的log标准库对于一些简单的日志功能,可以很方便给我们输出相应日志。

本文主要基于日常的简单使用做分享。

1.实现简单的日志记录

见代码:

package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("D:\\demo1\\src\\demo\\demo06\\log-simplest\\simple.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Println("create log file err:", err)
}
// set flags
log.SetFlags(log.LstdFlags|log.Lshortfile)
// set prefix
log.SetPrefix("[DEBUG] ")
// set output
log.SetOutput(file) // 输出到文件设置,如果要输出在控制台,则另外设置多重输出
log.Println("debug log test")
}

2.设置多重输出-控制台 && log文件

见代码:

package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
file, err := os.OpenFile("D:\\demo1\\src\\demo\\demo06\\log-multiOutput\\set.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
// 1.set log output
//log.SetOutput(file) // 注意同时设置只有一个生效,想要多重输出,建议选择法2或法3
//log.SetOutput(os.Stdout)
// 2.multi output
//multiWriter := io.MultiWriter(file, os.Stdout)
//log.SetOutput(multiWriter)
//log.Print("log line1") // 法1/2 共用测试
//log.Print("log line2")
// 3.log.New()
debugLogger := log.New(io.MultiWriter(os.Stdout, file), "[DEBUG]", log.LstdFlags | log.Lshortfile)
debugLogger.Println("debug logger output with multiOutput")
file.Close()
fmt.Println("program end")
}

3.简单封装实现不同prefix

此封装实现了不同的日志级别,当然更多的级别设置,可以参照实现。

见代码:

// https://juejin.cn/post/6987204299533058078
package logger
import (
"io"
"log"
"os"
)
// flags and prefix
const (
flag = log.Ldate | log.Ltime | log.Lshortfile
preDebug = "[DEBUG] "
preInfo = "[INFO] "
preWarning = "[WARNING] "
preError = "[ERROR] "
)
// diff logger and output log file
var (
logFile io.Writer
debugLogger *log.Logger
infoLogger *log.Logger
warningLogger *log.Logger
errorLogger *log.Logger
defaultLogFile = "D:\\demo1\\src\\demo\\demo06\\log-demo\\logs\\web.log"
)
// init for logger
func init() {
var err error
logFile, err = os.OpenFile(defaultLogFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
defaultLogFile = "./web.log"
logFile, err = os.OpenFile(defaultLogFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatalf("create log file err %+v", err)
}
}
debugLogger = log.New(io.MultiWriter(os.Stdout, logFile), preDebug, flag)
infoLogger = log.New(logFile, preInfo, flag)
warningLogger = log.New(logFile, preWarning, flag)
errorLogger = log.New(logFile, preError, flag)
}
// Debug logger
func Debugf(format string, v...interface{}) {
debugLogger.Printf(format, v...)
}
func Infof(format string, v ...interface{}) {
infoLogger.Printf(format, v...)
}
func Warningf(format string, v ...interface{}) {
warningLogger.Printf(format, v...)
}
func Errorf(format string, v ...interface{}) {
errorLogger.Printf(format, v...)
}
// set output file
func setOutputPath(path string) {
var err error
logFile, err = os.OpenFile(defaultLogFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatalf("create log file err %+v", err)
}
debugLogger = log.New(logFile, preDebug, flag)
infoLogger = log.New(logFile, preInfo, flag)
warningLogger = log.New(logFile, preWarning, flag)
errorLogger = log.New(logFile, preError, flag)
}

main.go

package main
import (
"log-demo/logger"
)
func main() {
author := "log-demo"
logger.Debugf("hello %s", author)
logger.Infof("hello %s", author)
logger.Warningf("hello %s", author)
logger.Errorf("hello %s", author)
}

4.使用lumberjack切分日志

lumberjack扩展库见链接:go语言的日志滚动(rolling)记录器——lumberjack
见代码:

package main
import (
""gopkg.in/natefinch/lumberjack.v2""
"log"
)
func main() {
lumberLogger := lumberjack.Logger{
Filename: "D:\\demo1\\src\\demo\\demo06\\log-lumberjack\\log.log",
MaxAge: 1,
MaxBackups: 7,
Compress: false,
LocalTime: true,
}
logger := log.New(&lumberLogger, "[DEBUG] ", log.LstdFlags|log.Lshortfile)
logger.Println("lumberjack to rotate log file")
}

posted on   进击的davis  阅读(508)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示