我使用記錄器,從模式定義我的程序如下寫結果的堆棧跟蹤默認文件
var (
logFile *os.File
Info *log.Logger
)
func init() {
var err error
logFile, err = os.OpenFile("/my/file/with.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
if err != nil {
fmt.Printf("Cannot open log file error:%s. Program was terminated.", err)
os.Exit(1)
}
Info = log.New(logFile,
"INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
}
現在我想寫信堆棧跟蹤的所有信息,如果這些發生,例如從panic()
到我的日誌文件。現在,如果有些錯誤是錯誤的,所有這些信息都會打印到IDE中的控制檯上,但是如果porgram在服務器上運行,如果發生一些空指針,函數的錯誤傳遞參數,則會丟失信息,這就是爲什麼我要將此信息寫入日誌文件的原因。 有可能嗎?
你應該可以在服務器上重定向標準錯誤和標準輸出到一個文件(或進入一些其他的記錄機制)。您可以將'os.Stderr'設置爲您應用中的另一個文件,但將其從外部進行管理將更加可靠。 – JimB
這是一個關鍵。試過在golang doc中找到這個函數,但現在什麼都沒有。嘗試了例如'os.Stderr = os.NewFile(uintptr(syscall.Stderr),「/my/log/file.log」),但沒有奏效。我會嘗試其他的東西... unles有人會更快,並找到解決方案 – Mbded
'os.NewFile'只是返回一個新的'* os.File'與該文件描述符,所以它什麼也沒做,除了改變字符串返回通過'os.Stderr.Name()' – JimB