未创建日志文件

我正在使用 Go。我想创建一个名为webapp的日志文件.log当我运行去运行主.go。

但是,当我运行 go run main.go 时,消息出现在终端中,并且不会创建日志文件。

我无法从消息中看出哪个位置导致无法创建日志文件。如果有人可以帮助我,请告诉我。主要.go"2021/09/25 14:58:55 open : no such file or directory" 


package main


import (

    "fmt"

    "golang_todo_app/config"

    "log"

)


func main() {

  fmt.Println(config.Config.Port)

  fmt.Println(config.Config.SQLDriver)

  fmt.Println(config.Config.DbName)

  fmt.Println(config.Config.LogFile)

  log.Println("test")

}


配置/配置。


package config


import (

    "golang_todo_app/utils"

    "log"


    "gopkg.in/go-ini/ini.v1"

)


type ConfigList struct {

    Port string

    SQLDriver string

    DbName string

    LogFile string

}


var Config ConfigList


func init () {

  LoadConfig()

  utils.LoggingSettings(Config.LogFile)

}


func LoadConfig() {

  cfg, err := ini.Load("config.ini")

  if err != nil {

    log.Fatalln()

  }

  Config = ConfigList{

    Port: cfg.Section("web").Key("port").MustString("8080"),

    SQLDriver: cfg.Section("db").Key("driver").String(),

    DbName: cfg.Section("db").Key("name").String(),

    LogFile: cfg.Section("web").Key("logfile").String(),

  }

}

utils/logging.go


package utils


import (

    "io"

    "log"

    "os"

)


func LoggingSettings(logFile string) {

  logfile, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

  if err != nil {

    log.Fatalln(err)

  }

  multiLogFile := io.MultiWriter(os.Stdout, logfile)

  log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)

  log.SetOutput(multiLogFile)

}


LEATH
浏览 87回答 1
1回答

三国纷争

“2021/09/25 14:58:55 打开:没有这样的文件或目录”看看你的代码,最有可能引发此错误的地方是下一个:logfile, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)通常,如果我们打开一个没有权限的文件,例如 /root/log.txt,它可能会生成下一个:2021/09/25 17:50:07 open /root/log.txt: permission denied您可以看到将显示的 将告诉用户哪个文件无法打开,但对您来说,您的错误在 之后不返回任何内容。这意味着对于下一个代码:/root/log.txtopenLoggingSettings(Config.LogFile)分析器不返回任何内容。正确的设置也许下一个:Config.LogFileini配置.ini:[web] logfile=/tmp/log.txt您应该检查您的文件,看看是否有任何错误使代码无法解析有效值。inilogfile顺便说一句,下一个代码将在导入时发生,因此您的打印在下一个函数之后执行,如果错误在 中出现错误,则您在main中的打印将没有机会运行。"golang_todo_app/config"maininitfunc init () {   LoadConfig()   utils.LoggingSettings(Config.LogFile) }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go