Files
cunicu/pkg/log/pion.go
Steffen Vogel 3bee839348 fix: Update copyright years
Signed-off-by: Steffen Vogel <post@steffenvogel.de>
2025-01-01 22:45:39 +01:00

94 lines
2.0 KiB
Go

// SPDX-FileCopyrightText: 2023 Atsushi Watanabe <atsushi.w@ieee.org>
// SPDX-FileCopyrightText: 2023-2025 Steffen Vogel <post@steffenvogel.de>
// SPDX-License-Identifier: MIT
package log
import (
"fmt"
"sync"
"github.com/pion/logging"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
_ logging.LeveledLogger = (*pionLogger)(nil)
_ logging.LoggerFactory = (*PionLoggerFactory)(nil)
)
type pionLogger struct {
*zap.SugaredLogger
}
func (l *pionLogger) Trace(msg string) {
l.Desugar().Log(zapcore.Level(TraceLevel), msg)
}
func (l *pionLogger) Tracef(format string, args ...interface{}) {
// Check for level before calling fmt.Sprintf()
if d := l.Desugar(); d.Check(zapcore.Level(TraceLevel), "") != nil {
d.Log(zapcore.Level(TraceLevel), fmt.Sprintf(format, args...))
}
}
func (l *pionLogger) Debug(msg string) {
l.SugaredLogger.Debug(msg)
}
func (l *pionLogger) Info(msg string) {
l.SugaredLogger.Info(msg)
}
func (l *pionLogger) Warn(msg string) {
l.SugaredLogger.Warn(msg)
}
func (l *pionLogger) Error(msg string) {
l.SugaredLogger.Error(msg)
}
// PionLoggerFactory is a logger factory backended by zap logger.
type PionLoggerFactory struct {
base *zap.Logger
mu sync.Mutex
loggers []*pionLogger
}
// NewLogger creates new scoped logger.
func (f *PionLoggerFactory) NewLogger(scope string) logging.LeveledLogger {
f.mu.Lock()
defer f.mu.Unlock()
l := &pionLogger{
SugaredLogger: f.base.Named(scope).WithOptions(zap.AddCallerSkip(1)).Sugar(),
}
f.loggers = append(f.loggers, l)
return l
}
// SyncAll calls Sync() method of all child loggers.
// It is recommended to call this before exiting the program to
// ensure never loosing buffered log.
func (f *PionLoggerFactory) SyncAll() {
f.mu.Lock()
defer f.mu.Unlock()
for _, l := range f.loggers {
_ = l.SugaredLogger.Sync()
}
}
func NewPionLoggerFactory(base *Logger) logging.LoggerFactory {
return &PionLoggerFactory{
base: base.Logger,
}
}
func NewPionLogger(base *Logger, scope string) logging.LeveledLogger {
return NewPionLoggerFactory(base).NewLogger(scope)
}