• EasyNVR日志中堆栈信息打印为字节代码排查及优化


    经常使用EasyNVR产品的用户都知道,作为音视频行业互联网直播产品,EasyNVR主要功能在于通过RTSP/ONVIF协议,接入前端音视频采集设备,通过EasyNVR软硬件产品将拉取过来的音视频流转化给适合全平台播放的RTMP、HTTP-FLV、HLS格式,极大的方便用户进行网页直播、微信直播及接入自身业务平台。

    在测试期间,EasyNVR出现日志显示为数字的一段,无法看出是什么问题。

    查看对应的代码为:

    log.Printf("handle message failed, %v", p)

    log.Println(debug.Stack())

    其中 debug.Stack() 返回数据如下:

    // Stack returns a formatted stack trace of the goroutine that calls it.
    // It calls runtime.Stack with a large enough buffer to capture the entire trace.
    func Stack() []byte {
       buf := make([]byte, 1024)
       for {
          n := runtime.Stack(buf, false)
          if n < len(buf) {
             return buf[:n]
          }
          buf = make([]byte, 2*len(buf))
       }
    }

    从代码中我们可以得知最终返回的数据是 []byte 类型,因此出现以上问题。

    修改代码如下:

    if p := recover(); p != nil {
       log.Printf("handle message failed, %v", p)
       log.Printf("debug stack : %v", string(debug.Stack()))
    }

    以上代码将返回的 []byte 转换为 string 类型,写入到日志中,即可解决该问题。

    EasyNVR可以说已经成为国内视频互联网化基础建设的排头兵,几乎各个民生行业都已经有了EasyNVR视频能力输出的身影,EasyNVR多年服务于各行各业视频基础建设,EasyNVR的可靠性、完整性、稳定性已经受到了业界的广泛认可。同时为方便用户了解和使用EasyNVR,我们提供EasyNVR的试用版本,解压即用,欢迎测试。

  • 相关阅读:
    类加载器
    会话机制
    数据库读写分离
    代码优化工具
    杀毒软件框架设计
    树状结构
    spring依赖注入
    never stop believe yourself
    利用callKit实现电话防骚扰
    mac上使用使用rz,sz命令
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/15119137.html
Copyright © 2020-2023  润新知