2017-03-17 74 views

回答

3

爲什麼log.Println(「不記錄到文件」)?

原因是因爲你沒有檢查文件是否存在或者沒有形成你的代碼。

file, _ := os.Open("logfile") 

你正在使用_並沒有檢查錯誤。如果你想寫入文件,這很重要。例如看看這段代碼:

f, err := os.OpenFile(filePath+fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm) 
    if err != nil { 
     // if error then you need to create the file first 
     err = os.MkdirAll(filePath, os.ModePerm) 
    } 

從上面的代碼

你可以看到使用 if err != nil錯誤檢查。如果文件不存在,則先創建文件。使用 os.MkdirAll()

+0

它應該是'return createLogFile(prefix,filePath,fileName)'。此外,如果由於某種原因路徑存在,但是文件不可訪問(缺少權限),則會出現無限循環。 – zerkms

+0

@zerkms ahh我看到您說得對。謝謝指出。 –

-1

file, err := os.Open("file.go") // For read access. 
 
if err != nil { 
 
\t // do something 
 
} 
 

 
// and try to include the file path...

6

os.Open calls OpenFile(name,O_RDONLY,0)。如果該文件不存在,則不具有用於創建該文件的標誌O_CREATE。因此你需要用O_CREATE標誌調用OpenFile。我已將錯誤代碼註釋掉:

package main 

import (
    "log" 
    "os" 
    "syscall" 
) 

const (
    O_RDONLY int = syscall.O_RDONLY // open the file read-only. 
    O_RDWR int = syscall.O_RDWR // open the file read-write. 
    O_CREATE int = syscall.O_CREAT // create a new file if none exists. 
    O_APPEND int = syscall.O_APPEND // append data to the file when writing. 
) 

func main() { 
    /*f1, err := os.OpenFile("testlogfile1", O_RDONLY, 0) // Equivalent to os.Open("testlogfile1") 
    if err != nil { 
     log.Fatalf("error opening file1: %v", err) 
    } 
    // ** error opening file: open testlogfile1: no such file or directory exit status 1 ** 

    defer f1.Close() 

    log.SetOutput(f1) 
    log.Println("This is a test for log 1")*/ 

    f2, err := os.OpenFile("testlogfile2", O_RDWR | O_CREATE | O_APPEND, 0644) 
    /* Note that you want: 
    * O_RDWR to write to the file 
    * O_CREATE to create file if it does not exist 
    * O_APPEND to add additional information to existing file */ 

    if err != nil { 
     log.Fatalf("error opening file2: %v", err) 
    } 

    defer f2.Close() 

    log.SetOutput(f2) 
    log.Println("This is a test for log 2") 

} 

總是檢查這些錯誤!

相關問題