I'm currently having a problem with os.OpenFile. It just gives me "permission denied" when i run my go test.
type log struct {
Message string
Source string
Timestamp time.Time
ErrorCode ErrorCode
}
type ErrorCode int
const (
Info ErrorCode = 1 + iota
Warning
Error
)
func (errorCode ErrorCode) String() string {
switch errorCode {
case Info:
return "Info"
case Warning:
return "Warning"
case Error:
return "Error"
}
return "Type not found"
}
func writeToLog(logItem log) {
err := os.Chdir("..")
if err != nil {
fmt.Println("Can't change working directory")
}
err = os.Mkdir("logs", os.FileMode(0777))
if err != nil && os.IsNotExist(err) {
fmt.Println("Can't create log directory")
}
f, err := os.OpenFile("logs/log.txt",
os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.FileMode(0666))
if err != nil {
fmt.Println("Can't find logfile")
fmt.Println(err)
}
defer f.Sync()
defer f.Close()
f.WriteString(logItem.ErrorCode.String() + logItem.Source +
logItem.Message + logItem.Timestamp.String())
}
Output:
Can't find logfile
open logs/log.txt: permission denied
Can't find logfile
open logs/log.txt: permission denied
What am I doint wrong? It seems like OpenFile doesn't set my permissions correctly (-rw-r--r--).
Thanks in advance
So I was able to solve this problem.
os.Chdir("..")
was called over and over again. And obviously the current working directory is stored and doesn't change back to what it was after the func was done.
After removing it, everything worked perfectly normal. I just added the ../
to the os.Mkdir
and to os.OpenFile
.
I'm looking to work with environment variables to makes this work better I think.