2 回答
TA貢獻1775條經驗 獲得超11個贊
這是使用標準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用于將多個編寫器組合在一起。在這里,它創建了一個寫入器w- 寫入w將轉到os.Stdout兩個文件log.New讓我們log.Logger用自定義編寫器創建一個新對象該
log.Logger對象可以傳遞給函數并由它們用來記錄事物
TA貢獻1780條經驗 獲得超4個贊
這就是您如何使用多日志文件管理用于調試和生產環境的日志:
首先,創建一個用于管理多個記錄器的類型,您可以為此創建一個單獨的文件,例如logging.go
type LOGGER struct {
debug *log.Logger
prod *log.Logger
.
.
.
}
要在項目中的任何位置獲取指針,最好的方法是通過單例模式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
}
現在在任何 pkg 或目錄級別為調試環境設置記錄器更好的方法是在根級別設置它
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")
使用相同的方法,您還可以創建 prod 或任意數量。
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 關注
- 422 瀏覽
添加回答
舉報
