采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好! 我是一个go的初学者,现在公司项目在搞日志记录,我有一些疑问请您解答一下 1.我目前会在请求进入,请求结束时记录一下日志,这是中间件做到的,其他位置的日志记录是需要手动调用方法记录的吧? 2.程序崩溃日志如何记录? 例如map的并发读写时,程序直接崩溃了,还有为什么gin的recovery中间件没有起作用呢? 3.panic和崩溃之间啥关系呢,程序os.exit 时不能记录日志内容吗 ? 4.通常项目里日志记录的位置应该都有那些呢? 希望您不吝赐教。谢谢! ?
同学你好,
1) 可以在代码任何地方里加上日志的输出,比如最简单的fmt.Prtinln(); 定义好输出的日志目录位置后, 后面就可以直接查日志文件了. 如果是docker等启动的容器应用, 一般需要将日志挂载宿主机上,防止容器删掉后日志的丢失;或者可以考虑采用ELK的方式来收集日志.
2) 一般可以在函数里通过defer-recover的方式来捕获异常, 或者将stdErr重定向到某个指定的日志文件中. gin的recovery没有起作用这个具体举下例子?这个问题原因不太确定, 因为derfer里捕获异常只对当前goroutine有效,可能是不同协程不能捕获的原因~~
3) 当你认为程序出了严重错误无法继续进行下去的时候可以手动调起panic并结束程序,崩溃不一定是手动panic引起的,比如堆栈溢出
4) 日志记录需要看业务需求的呀, 一般API的入口和出口都会打印日志的.
还有个问题。goroutine中的错误如何捕获呢。。
func test() { defer func() { if err := recover(); err != nil { Error.Println("crash msg:", err) } }() // ... }
登录后可查看更多问答,登录/注册
紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员
1.3k 23
2.1k 13
1.6k 13
1.1k 13
1.2k 13