首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未创建LogFile

未创建LogFile
EN

Stack Overflow用户
提问于 2021-09-25 09:17:27
回答 1查看 104关注 0票数 0

我在用围棋。我想在运行go运行webapp.log时创建一个名为main.go的日志文件。

但是,当我运行go run main.go时,消息"2021/09/25 14:58:55 open : no such file or directory"会出现在终端中,日志文件也不会被创建。

我无法从消息中判断是哪个位置导致日志文件不被创建。如果有人能帮我,请告诉我。main.go

代码语言:javascript
复制
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")
}

config/config.go

代码语言:javascript
复制
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(),
  }
}

功用/伐木

代码语言:javascript
复制
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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-25 09:53:58

"2021/09/25 14:58:55打开:没有此类文件或目录“

看看您的代码,最有可能引发此错误的地方是下一个:

代码语言:javascript
复制
logfile, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

通常,如果我们在没有权限的情况下打开一个文件,例如/root/log.txt,它可以生成下一步:

代码语言:javascript
复制
2021/09/25 17:50:07 open /root/log.txt: permission denied

您可以看到/root/log.txt将被显示以告诉用户哪个文件不能打开,但是对于您来说,在open之后您的错误不会返回任何内容。这意味着下一个代码:

代码语言:javascript
复制
LoggingSettings(Config.LogFile)

Config.LogFile解析器什么也不返回。正确的ini设置可能是下一步:

config.ini:

代码语言:javascript
复制
[web]
logfile=/tmp/log.txt

您应该检查您的ini文件,看看是否有任何错误使代码无法解析有效的logfile值。

BTW,下一段代码将在导入"golang_todo_app/config"时发生,因此在main函数中执行的打印将在下一个函数之后执行,如果在init中出现错误,则main中的打印将没有机会运行。

代码语言:javascript
复制
func init () {
  LoadConfig()
  utils.LoggingSettings(Config.LogFile)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69324760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档