package engine import ( "fmt" "github.com/pion/logging" ) // emitLoggerFactory 把 pion 内部日志路由到宿主 OnLog——真机上无 stderr,否则「为何连不上」无从查。 // 只在连接建立相关作用域(ice / mdns)放开 Debug(候选对检查、ping 失败、sendto 权限错误等关键线索), // 其余作用域仅 Info 及以上,避免数据面(sctp/dtls)刷屏。Trace 一律丢弃(过量)。 type emitLoggerFactory struct { emit func(string) sessionID string } func (f emitLoggerFactory) NewLogger(scope string) logging.LeveledLogger { return emitLogger{scope: scope, emit: f.emit, sessionID: f.sessionID} } type emitLogger struct { scope string sessionID string emit func(string) } // fwd 统一以 "session ..." 起头,与 session.go 的诊断行同格式,便于宿主按 session 聚合日志。 func (l emitLogger) fwd(level, msg string) { if l.emit != nil { l.emit(fmt.Sprintf("session %s pion %s/%s: %s", l.sessionID, l.scope, level, msg)) } } // debugOn 仅对连接建立作用域放开 Debug,限制日志量。 func (l emitLogger) debugOn() bool { return l.scope == "ice" || l.scope == "mdns" } func (l emitLogger) Trace(string) {} func (l emitLogger) Tracef(string, ...interface{}) {} func (l emitLogger) Debug(msg string) { if l.debugOn() { l.fwd("D", msg) } } func (l emitLogger) Debugf(format string, args ...interface{}) { if l.debugOn() { l.fwd("D", fmt.Sprintf(format, args...)) } } func (l emitLogger) Info(msg string) { l.fwd("I", msg) } func (l emitLogger) Infof(format string, args ...interface{}) { l.fwd("I", fmt.Sprintf(format, args...)) } func (l emitLogger) Warn(msg string) { l.fwd("W", msg) } func (l emitLogger) Warnf(format string, args ...interface{}) { l.fwd("W", fmt.Sprintf(format, args...)) } func (l emitLogger) Error(msg string) { l.fwd("E", msg) } func (l emitLogger) Errorf(format string, args ...interface{}) { l.fwd("E", fmt.Sprintf(format, args...)) }