写入 panic 日志的位置在哪里?

huangapple go评论120阅读模式
英文:

where does go write panic logs?

问题

我通过epel在redhat服务器上安装了golang。我正在尝试分析panic日志,但是找不到日志存储的位置。有什么提示吗?/var/log中没有任何迹象。

  1. func main() {
  2. http.HandleFunc("/", panicRecover(test))
  3. log.Fatal(http.ListenAndServe(":80", nil))
  4. }
  5. func test() {
  6. out, err := exec.Command("echo", "something").Output()
  7. if err != nil {
  8. log.Panic(err)
  9. }
  10. }
  11. func panicRecover(f func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter, r *http.Request) {
  12. return func(w http.ResponseWriter, r *http.Request) {
  13. defer func() {
  14. if r := recover(); r != nil {
  15. log.Printf("PANIC RECOVERED:%s\n", r)
  16. }
  17. }()
  18. f(w, r)
  19. }
  20. }

以上是你提供的代码。

英文:

I installed golang on a redhat server through epel. I'm trying to analyze the panic logs but I can't find where the logs are stored. Any hint ? There is no trace in /var/log

  1. func main() {
  2. http.HandleFunc("/", panicRecover(test))
  3. log.Fatal(http.ListenAndServe(":80", nil))
  4. }
  5. func test(){
  6. out, err := exec.Command("echo ", "something").Output()
  7. if err != nil {
  8. log.Panic(err)
  9. }
  10. }
  11. func panicRecover(f func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter, r *http.Request) {
  12. return func(w http.ResponseWriter, r *http.Request) {
  13. defer func() {
  14. if r := recover(); r != nil {
  15. log.Printf("PANIC RECOVERED:%s\n", r)
  16. }
  17. }()
  18. f(w, r)
  19. }

答案1

得分: 8

stderr

例如,

  1. package main
  2. import "log"
  3. func main() {
  4. log.Panic("log.Panic to stderr")
  5. }
  6. $ go run panic.go 2>stderr.txt

stderr.txt 文件:

<!-- language: none -->

  1. 2014/06/09 00:30:54 log.Panic to stderr
  2. panic: log.Panic to stderr
  3. goroutine 16 [running]:
  4. runtime.panic(0x497180, 0xc2080001a0)
  5. /home/peter/go/src/pkg/runtime/panic.c:279 +0xf5
  6. log.Panic(0x7f88770fff20, 0x1, 0x1)
  7. /home/peter/go/src/pkg/log/log.go:307 +0xb6
  8. main.main()
  9. /home/peter/gopath/src/so/panic.go:6 +0xa7
  10. goroutine 17 [runnable]:
  11. runtime.MHeap_Scavenger()
  12. /home/peter/go/src/pkg/runtime/mheap.c:507
  13. runtime.goexit()
  14. /home/peter/go/src/pkg/runtime/proc.c:1445
  15. goroutine 18 [runnable]:
  16. bgsweep()
  17. /home/peter/go/src/pkg/runtime/mgc0.c:1976
  18. runtime.goexit()
  19. /home/peter/go/src/pkg/runtime/proc.c:1445
  20. goroutine 19 [runnable]:
  21. runfinq()
  22. /home/peter/go/src/pkg/runtime/mgc0.c:2606
  23. runtime.goexit()
  24. /home/peter/go/src/pkg/runtime/proc.c:1445
  25. exit status 2
英文:

To stderr.

For example,

  1. package main
  2. import &quot;log&quot;
  3. func main() {
  4. log.Panic(&quot;log.Panic to stderr&quot;)
  5. }
  6. $ go run panic.go 2&gt;stderr.txt

stderr.txt File:

<!-- language: none -->

  1. 2014/06/09 00:30:54 log.Panic to stderr
  2. panic: log.Panic to stderr
  3. goroutine 16 [running]:
  4. runtime.panic(0x497180, 0xc2080001a0)
  5. /home/peter/go/src/pkg/runtime/panic.c:279 +0xf5
  6. log.Panic(0x7f88770fff20, 0x1, 0x1)
  7. /home/peter/go/src/pkg/log/log.go:307 +0xb6
  8. main.main()
  9. /home/peter/gopath/src/so/panic.go:6 +0xa7
  10. goroutine 17 [runnable]:
  11. runtime.MHeap_Scavenger()
  12. /home/peter/go/src/pkg/runtime/mheap.c:507
  13. runtime.goexit()
  14. /home/peter/go/src/pkg/runtime/proc.c:1445
  15. goroutine 18 [runnable]:
  16. bgsweep()
  17. /home/peter/go/src/pkg/runtime/mgc0.c:1976
  18. runtime.goexit()
  19. /home/peter/go/src/pkg/runtime/proc.c:1445
  20. goroutine 19 [runnable]:
  21. runfinq()
  22. /home/peter/go/src/pkg/runtime/mgc0.c:2606
  23. runtime.goexit()
  24. /home/peter/go/src/pkg/runtime/proc.c:1445
  25. exit status 2

huangapple
  • 本文由 发表于 2014年6月9日 12:06:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/24113527.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定