// Copyright 2020 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. package debugtracer import ( "fmt" "io" "path/filepath" "testing" "time" "github.com/google/syzkaller/pkg/osutil" ) type DebugTracer interface { Log(msg string, args ...any) SaveFile(filename string, data []byte) } type GenericTracer struct { WithTime bool TraceWriter io.Writer OutDir string } type TestTracer struct { T *testing.T } type NullTracer struct { } func (gt *GenericTracer) Log(msg string, args ...any) { if gt.WithTime { timeStr := time.Now().Format("02-Jan-2006 15:04:05") newArgs := append([]any{timeStr}, args...) fmt.Fprintf(gt.TraceWriter, "%s: "+msg+"\n", newArgs...) } else { fmt.Fprintf(gt.TraceWriter, msg+"\n", args...) } } func (gt *GenericTracer) SaveFile(filename string, data []byte) { if gt.OutDir == "" { return } osutil.MkdirAll(gt.OutDir) osutil.WriteFile(filepath.Join(gt.OutDir, filename), data) } func (tt *TestTracer) Log(msg string, args ...any) { tt.T.Log(msg, args) } func (tt *TestTracer) SaveFile(filename string, data []byte) { // Not implemented. } func (nt *NullTracer) Log(msg string, args ...any) { // Not implemented. } func (nt *NullTracer) SaveFile(filename string, data []byte) { // Not implemented. }