gpt4 book ai didi

没有出现 Go Logging

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:01 24 4
gpt4 key购买 nike

我想在 golang 中为日志系统创建依赖注入(inject),但是当我执行 log.Info.Println 时,它不会在日志文件中打印任何内容。这是我的代码:

应用程序去

package main

import (
log "github.com/jass-trix/BVDI/backend/application/logging"
)

func main() {
logger := log.InitLog()
logger.Info.Println("test info")
logger.Error.Println("test error")
}

初始化.go

package logging

import (
"flag"
"io"
"log"
"os"
)

const logPath = "log/path/"

//Logger is a struct that contain all type of logger
//logger will be separated into two level
type Logger struct {
Info *log.Logger
Error *log.Logger
}

var infoLog *log.Logger
var errorLog *log.Logger

//InitLog is a function to instantiate logging
func InitLog() *Logger {

flag.Parse()

fileInfo, err := os.OpenFile(logPath+"file.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0660)
if err != nil {
log.Fatalf("error on opening file: %v", err)
}
defer fileInfo.Close()

multiInfo := io.MultiWriter(fileInfo, os.Stdout)
infoLog := log.New(multiInfo, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)

fileError, err := os.OpenFile(logPath+"file.error.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0660)
if err != nil {
log.Fatalf("error on opening file: %v", err)
}
defer fileError.Close()

multiError := io.MultiWriter(fileError, os.Stdout)
errorLog := log.New(multiError, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)
return &Logger{
Info: infoLog,
Error: errorLog,
}
}

当我在 app.go 中调用 logger.Info.Println() 时,它不会打印任何内容,但是当我在 init.go 中调用 errorLog.Println() 时,它会打印到文件中。

日志是否支持依赖注入(inject)?

最佳答案

InitLog 中你使用了

defer fileInfo.Close()

它在 InitLog 调用后关闭了文件。然后 logger.Info.Println("test info") 尝试写入关闭的文件。

如果您(真的)想使用全局记录器,则不应在 InitLog 函数中关闭文件。

关于没有出现 Go Logging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55562848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com