企业视频通话会议系统EasyRTC基于网络架构,各分支机构与总部之间使用IP线路连接,在总部部署服务器提供视频调度指挥服务,能够进行视频会议、远程培训、协同工作等沟通。近期更新的新版本EasyRTC-SFU更是在原有基础上进行了升级改造,在系统的集成性、承载量上有更大的提升。
在EasyRTC-SFU 软件开发过程中,日志模块采用 uber-go/zap 编写。Zap 为 Uber 公司开源的一个高效、快速、可输出多等级信息的日志项目。
在 Easy-SFU 中,封装如下:
// 操作日志 var operationLogger *zap.Logger // 获取日志 func GetLogger() *zap.Logger { if operationLogger == nil { operationLogger = createLog("./easyrtc.log", true) } return operationLogger } // 初始化 Log 模块 func createLog(filePath string, develop bool) *zap.Logger { //logpath := filepath.Join(GetConf().DirLogs, fileName) hook := lumberjack.Logger{ Filename: filePath, // 日志文件路径 MaxSize: 10, // 每个日志文件保存的最大尺寸 单位:M MaxBackups: 10, // 日志文件最多保存多少个备份 MaxAge: 30, // 文件最多保存多少天 Compress: false, // 是否压缩 } encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "monitorLogger", CallerKey: "linenum", MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.LowercaseLevelEncoder, // 小写编码器 EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format("2006-01-02 15:04:05")) }, EncodeDuration: zapcore.SecondsDurationEncoder, // EncodeCaller: zapcore.FullCallerEncoder, // 全路径编码器 EncodeName: zapcore.FullNameEncoder, } // 设置日志级别 atomicLevel := zap.NewAtomicLevel() atomicLevel.SetLevel(zap.InfoLevel) core := zapcore.NewCore( zapcore.NewJSONEncoder(encoderConfig), // 编码器配置 zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&hook)), // 打印到控制台和文件 atomicLevel, // 日志级别 ) var logger *zap.Logger if develop { // 开启文件及行号 // 开启开发模式,堆栈跟踪 caller := zap.AddCaller() develop := zap.Development() logger = zap.New(core, caller, develop) } else { logger = zap.New(core) } return logger }
createLog()方法定义了创建已经有默认配置的一些日志格式。用户可以直接通过调用此方法创建日志。
GetLogger()方法可以被项目的其他模块调用,直接将对应的日志指针返回出去。
获取到 logger 后的使用方式有多种。常见的使用方式如下:
// 记录Info信息 logger.Info("get room.", zap.String("roomName", req.Room)) // 记录 Error 信息 logger.Error("get room error.", zap.String("errorCode", errStr)) // 记录 int 类型的数据 logger.Info("get room.", zap.Int("roomId", 16) // 记录任意类型的数据字段 logger.Info("created room.", zap.Reflect("roomName", req.Room))
最终生成的日志为json格式的数据。
如果大家想了解更多关于EasyRTC-SFU版本的信息,可以进入EasyRTC介绍页查阅,此外,我们还提供了测试方案,如果大家有需求,也可以联系我们获取测试方案。视频相关解决方案均可访问TSINGSEE青犀视频,如有需求或疑问,欢迎随时联系我们!
请发表评论