采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好! 我是一个go的初学者,现在公司项目在搞日志记录,我有一些疑问请您解答一下 1.我目前会在请求进入,请求结束时记录一下日志,这是中间件做到的,其他位置的日志记录是需要手动调用方法记录的吧? 2.程序崩溃日志如何记录? 例如map的并发读写时,程序直接崩溃了,还有为什么gin的recovery中间件没有起作用呢? 3.panic和崩溃直接啥关系呢,程序os.exit 时不能记录日志内容吗 ? 4.通常项目里日志记录的位置应该都有那些呢? 希望您不吝赐教。谢谢! ?
我目前会在请求进入,请求结束时记录一下日志,这是中间件做到的,其他位置的日志记录是需要手动调用方法记录的吧? > 是的,需要手动记录
程序崩溃日志如何记录? 例如map的并发读写时,程序直接崩溃了,还有为什么gin的recovery中间件没有起作用呢? > 这个一般不用自行记录,这些奔溃日志会写到stderr中。你的部署环境应该会捕捉stderr信息。gin中的recovery也是有其作用范围,一般都是recover一个请求的处理过程中产生的奔溃。在请求之外,比如初始化的时候就恢复不了。
panic和崩溃直接啥关系呢,程序os.exit 时不能记录日志内容吗 ?> 两者都可以认为是奔溃,panic是有详细日志和call stack的,但os.exit没有。不过os.exit一般是自己主动写的,我们可以先写日志再os.Exit,或者使用log.Fatal。log.Fatal就是log.Print加上os.Exit
通常项目里日志记录的位置应该都有那些呢?> 首先,几乎所有的err我们都值得记录。另外,所有向外部系统的出入口都值得记录。比如读写数据库,发送网络请求等。不过也要注意一下记录的数据量,不要太大了。
goroutine中的错误如何捕获呢 > 捕获的话,只是针对panic而言的,这个捕获的方式是一样的,使用recover。另一种情况是我们想向外通知我们发生了err,这个就只能通过channel传出去,可以考虑另做一个chan error,或者把err和我们要的结果做成一个struct,比如:
type Result struct{ Resp string err error}
type Result struct{
Resp string
err error
}
然后我们通过chan Result和外界通信
还有个问题。goroutine中的错误如何捕获呢。。
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.7k 14
714 1
2.0k 1
1.1k 12