我在寫一個服務時遇到問題。我有它登錄到系統日誌是這樣的:http://technosophos.com/2013/09/14/using-gos-built-logger-log-syslog.htmlGo's Logger爲什麼不關閉與syslog的連接?
但當我通過CTRL-C殺死服務的東西是離開連接打開到syslogd。無論如何我都看不到清理。我在想什麼
例如syslog.Writer.Close()
似乎無法訪問我,但我可以說清理沒有發生。我看到連接處於CLOSE_WAIT狀態,我的syslogd開始陷入停滯狀態,變得不合作。
例如:
package main
import (
"github.com/davecgh/go-spew/spew" // DEBUG
"log"
"log/syslog"
"os"
"os/signal"
"syscall"
)
func main() {
logWriter, err := syslog.New(syslog.LOG_NOTICE, "mybrokenprog")
spew.Dump(logWriter) // DEBUG
spew.Dump(err) // DEBUG
if err == nil {
log.SetOutput(logWriter)
}
chansigs := make(chan os.Signal, 1)
signal.Notify(chansigs, os.Interrupt, syscall.SIGTERM, syscall.SIGKILL)
log.Print("writing to syslog. waiting for shutdown signal")
for {
sig := <-chansigs // we just wait here for a signal to shutdown
log.Print("signal received...shutting down")
logWriter.Close() // but this throws the panic excerpted below
if sig == os.Interrupt {
os.Exit(0)
}
os.Exit(1)
}
}
編輯:上述代碼解決該問題。看到評論。重新啓動以清除連接到系統日誌的問題修復了問題。一旦他們在那裏,他們堅持不懈。即使OS X關於重新啓動syslogd的說明也沒有幫助。 編輯:這是錯誤:恐慌:運行時錯誤:無效的內存地址或零指針引用 [信號0XB代碼=爲0x1 ADDR =爲0x0 PC = 0xcb4fe]
夠程1 [運行]: 日誌/系統日誌( * Writer).Close(0x0,0x0,0x0) /usr/local/Cellar/go/1.5.1/libexec/src/log/syslog/syslog.go:177+0x10e main.main(0x3)
我毫不懷疑我做錯了。只是一個尚未看到在哪裏的新手。
爲什麼說'syslog.Writer.Close()'是無法訪問?你在你發佈的鏈接中明確地創建了一個'syslog.Writer'。 – JimB
我添加了一些信息和示例代碼。謝謝! – n8gard
這並不顯示你如何處理清理。當你調用'Close()'時,看起來'logWriter'是'nil'。 – JimB