猿问

golang中如何将日志写入多个日志文件?

我正在编写一个应用程序,我需要在其中记录两个不同文件中的日志。例如weblogs .go 和debuglogs.go。我尝试使用log4go,但我的要求是我需要在主文件中创建记录器,并且可以在子目录中访问,因为主要的解码和记录是在子文件中完成的。有人可以帮忙吗?



慕尼黑的夜晚无繁华
浏览 321回答 2
2回答

繁星淼淼

这是使用标准log包的一种方法:package mainimport (    "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对象可以传递给函数并由它们用来记录事物

Helenr

这就是您如何使用多日志文件管理用于调试和生产环境的日志:首先,创建一个用于管理多个记录器的类型,您可以为此创建一个单独的文件,例如logging.gotype 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")
随时随地看视频慕课网APP

相关分类

Go
我要回答