2 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個贊
這是使用標(biāo)準(zhǔn)log包的一種方法:
package main
import (
"io"
"log"
"os"
)
func main() {
f1, err := os.Create("/tmp/file1")
if err != nil {
panic(err)
}
defer f1.Close()
f2, err := os.Create("/tmp/file2")
if err != nil {
panic(err)
}
defer f2.Close()
w := io.MultiWriter(os.Stdout, f1, f2)
logger := log.New(w, "logger", log.LstdFlags)
myfunc(logger)
}
func myfunc(logger *log.Logger) {
logger.Print("Hello, log file!!")
}
筆記:
io.MultiWriter
用于將多個編寫器組合在一起。在這里,它創(chuàng)建了一個寫入器w
- 寫入w
將轉(zhuǎn)到os.Stdout
兩個文件log.New
讓我們log.Logger
用自定義編寫器創(chuàng)建一個新對象該
log.Logger
對象可以傳遞給函數(shù)并由它們用來記錄事物

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個贊
這就是您如何使用多日志文件管理用于調(diào)試和生產(chǎn)環(huán)境的日志:
首先,創(chuàng)建一個用于管理多個記錄器的類型,您可以為此創(chuàng)建一個單獨(dú)的文件,例如logging.go
type LOGGER struct {
debug *log.Logger
prod *log.Logger
.
.
.
}
要在項(xiàng)目中的任何位置獲取指針,最好的方法是通過單例模式LOGGER獲取它,例如
var lock = &sync.Mutex{}
var loggers *LOGGER
func GetLoggerInstance() *LOGGER {
lock.Lock()
defer lock.Unlock()
if loggers == nil {
fmt.Println("Creating LOGGER instance now.")
loggers = &LOGGER{}
} else {
fmt.Println("LOGGER instance already created.")
}
return loggers
}
現(xiàn)在在任何 pkg 或目錄級別為調(diào)試環(huán)境設(shè)置記錄器更好的方法是在根級別設(shè)置它
logger := GetLoggerInstance()
f, err := os.OpenFile("path/to/debug/log/file", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("debug log file not created", err.Error())
}
loggers.debug = log.New(f, "[DEBUG]", log.Ldate|log.Ltime|log.Lmicroseconds|log.LUTC)
loggers.debug.Println("This is debug log message")
使用相同的方法,您還可以創(chuàng)建 prod 或任意數(shù)量。
logger := GetLoggerInstance()
f, err = os.OpenFile("path/to/prod/log/file", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("prod log file not created", err.Error())
}
loggers.prod = log.New(f, "[PROD]", log.Ldate|log.Ltime|log.Lmicroseconds|log.LUTC)
loggers.prod.Println("This is prod log message")
- 2 回答
- 0 關(guān)注
- 393 瀏覽
添加回答
舉報(bào)