我试图捕捉恐慌并记录错误:
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
defer func() {
if err := recover(); err != nil {
glog.Errorf("Recovered from err: %v", err)
}
}()
panic("TISH IS A PANIC")
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
但令我惊讶的是,"Recovered from err: "
永远不会出现在我的日志文件中,而是出现在/var/log/messages
中。
如何在原始日志文件中记录该错误?
[已更新]
如果没有恐慌,glog.Errorf
将正确记录到其日志目录;当有恐慌时,它就是不能:
// this glog will log correctly, unless uncomment the panic below
glog.Errorf("This is a normal log: %v", err)
// panic("TISH IS A PANIC")
也许这是不可能的,因为崩溃意味着什么?
答案 0 :(得分:1)
您需要在延期功能中调用glog.Flush()
。来自glog的文档:
使用Flush定期缓冲和写入日志输出。程式 应在退出前调用Flush以保证所有日志输出 写入。