mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Fix nested logging.
PiperOrigin-RevId: 297175316
This commit is contained in:
committed by
gVisor bot
parent
98b693e61b
commit
6def8ea6ac
+2
-4
@@ -46,7 +46,7 @@ var pid = os.Getpid()
|
||||
// line The line number
|
||||
// msg The user-supplied message
|
||||
//
|
||||
func (g *GoogleEmitter) Emit(level Level, timestamp time.Time, format string, args ...interface{}) {
|
||||
func (g *GoogleEmitter) Emit(depth int, level Level, timestamp time.Time, format string, args ...interface{}) {
|
||||
// Log level.
|
||||
prefix := byte('?')
|
||||
switch level {
|
||||
@@ -64,9 +64,7 @@ func (g *GoogleEmitter) Emit(level Level, timestamp time.Time, format string, ar
|
||||
microsecond := int(timestamp.Nanosecond() / 1000)
|
||||
|
||||
// 0 = this frame.
|
||||
// 1 = Debugf, etc.
|
||||
// 2 = Caller.
|
||||
_, file, line, ok := runtime.Caller(2)
|
||||
_, file, line, ok := runtime.Caller(depth + 1)
|
||||
if ok {
|
||||
// Trim any directory path from the file.
|
||||
slash := strings.LastIndexByte(file, byte('/'))
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ type JSONEmitter struct {
|
||||
}
|
||||
|
||||
// Emit implements Emitter.Emit.
|
||||
func (e JSONEmitter) Emit(level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
func (e JSONEmitter) Emit(_ int, level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
j := jsonLog{
|
||||
Msg: fmt.Sprintf(format, v...),
|
||||
Level: level,
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ type K8sJSONEmitter struct {
|
||||
}
|
||||
|
||||
// Emit implements Emitter.Emit.
|
||||
func (e *K8sJSONEmitter) Emit(level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
func (e *K8sJSONEmitter) Emit(_ int, level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
j := k8sJSONLog{
|
||||
Log: fmt.Sprintf(format, v...),
|
||||
Level: level,
|
||||
|
||||
+45
-15
@@ -79,7 +79,7 @@ func (l Level) String() string {
|
||||
type Emitter interface {
|
||||
// Emit emits the given log statement. This allows for control over the
|
||||
// timestamp used for logging.
|
||||
Emit(level Level, timestamp time.Time, format string, v ...interface{})
|
||||
Emit(depth int, level Level, timestamp time.Time, format string, v ...interface{})
|
||||
}
|
||||
|
||||
// Writer writes the output to the given writer.
|
||||
@@ -142,7 +142,7 @@ func (l *Writer) Write(data []byte) (int, error) {
|
||||
}
|
||||
|
||||
// Emit emits the message.
|
||||
func (l *Writer) Emit(level Level, timestamp time.Time, format string, args ...interface{}) {
|
||||
func (l *Writer) Emit(_ int, _ Level, _ time.Time, format string, args ...interface{}) {
|
||||
fmt.Fprintf(l, format, args...)
|
||||
}
|
||||
|
||||
@@ -150,9 +150,9 @@ func (l *Writer) Emit(level Level, timestamp time.Time, format string, args ...i
|
||||
type MultiEmitter []Emitter
|
||||
|
||||
// Emit emits to all emitters.
|
||||
func (m *MultiEmitter) Emit(level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
func (m *MultiEmitter) Emit(depth int, level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
for _, e := range *m {
|
||||
e.Emit(level, timestamp, format, v...)
|
||||
e.Emit(1+depth, level, timestamp, format, v...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ type TestEmitter struct {
|
||||
}
|
||||
|
||||
// Emit emits to the TestLogger.
|
||||
func (t *TestEmitter) Emit(level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
func (t *TestEmitter) Emit(_ int, level Level, timestamp time.Time, format string, v ...interface{}) {
|
||||
t.Logf(format, v...)
|
||||
}
|
||||
|
||||
@@ -198,22 +198,37 @@ type BasicLogger struct {
|
||||
|
||||
// Debugf implements logger.Debugf.
|
||||
func (l *BasicLogger) Debugf(format string, v ...interface{}) {
|
||||
if l.IsLogging(Debug) {
|
||||
l.Emit(Debug, time.Now(), format, v...)
|
||||
}
|
||||
l.DebugfAtDepth(1, format, v...)
|
||||
}
|
||||
|
||||
// Infof implements logger.Infof.
|
||||
func (l *BasicLogger) Infof(format string, v ...interface{}) {
|
||||
if l.IsLogging(Info) {
|
||||
l.Emit(Info, time.Now(), format, v...)
|
||||
}
|
||||
l.InfofAtDepth(1, format, v...)
|
||||
}
|
||||
|
||||
// Warningf implements logger.Warningf.
|
||||
func (l *BasicLogger) Warningf(format string, v ...interface{}) {
|
||||
l.WarningfAtDepth(1, format, v...)
|
||||
}
|
||||
|
||||
// DebugfAtDepth logs at a specific depth.
|
||||
func (l *BasicLogger) DebugfAtDepth(depth int, format string, v ...interface{}) {
|
||||
if l.IsLogging(Debug) {
|
||||
l.Emit(1+depth, Debug, time.Now(), format, v...)
|
||||
}
|
||||
}
|
||||
|
||||
// InfofAtDepth logs at a specific depth.
|
||||
func (l *BasicLogger) InfofAtDepth(depth int, format string, v ...interface{}) {
|
||||
if l.IsLogging(Info) {
|
||||
l.Emit(1+depth, Info, time.Now(), format, v...)
|
||||
}
|
||||
}
|
||||
|
||||
// WarningfAtDepth logs at a specific depth.
|
||||
func (l *BasicLogger) WarningfAtDepth(depth int, format string, v ...interface{}) {
|
||||
if l.IsLogging(Warning) {
|
||||
l.Emit(Warning, time.Now(), format, v...)
|
||||
l.Emit(1+depth, Warning, time.Now(), format, v...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,17 +272,32 @@ func SetLevel(newLevel Level) {
|
||||
|
||||
// Debugf logs to the global logger.
|
||||
func Debugf(format string, v ...interface{}) {
|
||||
Log().Debugf(format, v...)
|
||||
Log().DebugfAtDepth(1, format, v...)
|
||||
}
|
||||
|
||||
// Infof logs to the global logger.
|
||||
func Infof(format string, v ...interface{}) {
|
||||
Log().Infof(format, v...)
|
||||
Log().InfofAtDepth(1, format, v...)
|
||||
}
|
||||
|
||||
// Warningf logs to the global logger.
|
||||
func Warningf(format string, v ...interface{}) {
|
||||
Log().Warningf(format, v...)
|
||||
Log().WarningfAtDepth(1, format, v...)
|
||||
}
|
||||
|
||||
// DebugfAtDepth logs to the global logger.
|
||||
func DebugfAtDepth(depth int, format string, v ...interface{}) {
|
||||
Log().DebugfAtDepth(1+depth, format, v...)
|
||||
}
|
||||
|
||||
// InfofAtDepth logs to the global logger.
|
||||
func InfofAtDepth(depth int, format string, v ...interface{}) {
|
||||
Log().InfofAtDepth(1+depth, format, v...)
|
||||
}
|
||||
|
||||
// WarningfAtDepth logs to the global logger.
|
||||
func WarningfAtDepth(depth int, format string, v ...interface{}) {
|
||||
Log().WarningfAtDepth(1+depth, format, v...)
|
||||
}
|
||||
|
||||
// defaultStackSize is the default buffer size to allocate for stack traces.
|
||||
|
||||
@@ -32,21 +32,21 @@ const (
|
||||
// Infof logs an formatted info message by calling log.Infof.
|
||||
func (t *Task) Infof(fmt string, v ...interface{}) {
|
||||
if log.IsLogging(log.Info) {
|
||||
log.Infof(t.logPrefix.Load().(string)+fmt, v...)
|
||||
log.InfofAtDepth(1, t.logPrefix.Load().(string)+fmt, v...)
|
||||
}
|
||||
}
|
||||
|
||||
// Warningf logs a warning string by calling log.Warningf.
|
||||
func (t *Task) Warningf(fmt string, v ...interface{}) {
|
||||
if log.IsLogging(log.Warning) {
|
||||
log.Warningf(t.logPrefix.Load().(string)+fmt, v...)
|
||||
log.WarningfAtDepth(1, t.logPrefix.Load().(string)+fmt, v...)
|
||||
}
|
||||
}
|
||||
|
||||
// Debugf creates a debug string that includes the task ID.
|
||||
func (t *Task) Debugf(fmt string, v ...interface{}) {
|
||||
if log.IsLogging(log.Debug) {
|
||||
log.Debugf(t.logPrefix.Load().(string)+fmt, v...)
|
||||
log.DebugfAtDepth(1, t.logPrefix.Load().(string)+fmt, v...)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user