Documentation
¶
Index ¶
- Constants
- func AnyPointerSlice[T any](name string, ptrs []*T) slog.Attr
- func DefaultLogDir(server bool, override string) string
- func RedirectStderrToCrashFile(logDir string) string
- func RemoveCurrentCrashStderrFile()
- type CrashReport
- type Logger
- func (l *Logger) CatchAndReportCrash() any
- func (l *Logger) Debug(msg string, args ...any)
- func (l *Logger) Debugf(msg string, args ...any)
- func (l *Logger) Error(msg string, args ...any)
- func (l *Logger) Errorf(msg string, args ...any)
- func (l *Logger) Info(msg string, args ...any)
- func (l *Logger) Infof(msg string, args ...any)
- func (l *Logger) ReportCrash(err any)
- func (l *Logger) SetCrashReportClient(client *rpc.Client)
- func (l *Logger) SetGPUInfo(vendor, renderer string)
- func (l *Logger) UploadAndDeleteCrashStderrFiles() <-chan struct{}
- func (l *Logger) Warn(msg string, args ...any)
- func (l *Logger) Warnf(msg string, args ...any)
- func (l *Logger) With(args ...any) *Logger
- type StackFrame
- type StackFrames
- type SystemInfo
Constants ¶
const RaceEnabled = false
RaceEnabled is false when the race detector is not active.
const ReportCrashRPC = "SimManager.ReportCrash"
ReportCrashRPC is the RPC method name for crash reports.
Variables ¶
This section is empty.
Functions ¶
func AnyPointerSlice ¶
AnyPointerSlice is similar to slog.Any but takes a slice of pointers; unlike passing a slice of pointers to slog.Any, it logs the values pointed-to by the pointers rather than the pointer values themselves.
func DefaultLogDir ¶ added in v0.14.4
DefaultLogDir returns the log directory the logger would pick given these inputs, without actually constructing a logger. Callers need this when they want to do something with the log directory (such as redirecting stderr into it) before log.New runs.
func RedirectStderrToCrashFile ¶ added in v0.14.4
RedirectStderrToCrashFile is a no-op on non-Windows platforms: vice is built as a console program there, so stderr already has a reasonable destination (terminal or systemd journal).
func RemoveCurrentCrashStderrFile ¶ added in v0.14.4
func RemoveCurrentCrashStderrFile()
RemoveCurrentCrashStderrFile is a no-op on non-Windows platforms.
Types ¶
type CrashReport ¶ added in v0.14.0
type CrashReport struct {
Report string
System SystemInfo
Timestamp time.Time
}
CrashReport is sent via RPC when a crash occurs.
type Logger ¶
type Logger struct {
*slog.Logger
LogFile string
LogDir string
Start time.Time
// contains filtered or unexported fields
}
func (*Logger) CatchAndReportCrash ¶
func (*Logger) Debug ¶
Debug wraps slog.Debug to add call stack information (and similarly for the following Logger methods...) Note that we do not wrap the entire slog logging interface, so, for example, WarnContext and Log do not have callstacks included.
We also wrap the logging methods to allow a nil *Logger, in which case debug and info messages are discarded (though warnings and errors still go through to slog.)
func (*Logger) Debugf ¶
Debugf is a convenience wrapper that logs just a message and allows printf-style formatting of the provided args.
func (*Logger) ReportCrash ¶ added in v0.13.0
func (*Logger) SetCrashReportClient ¶ added in v0.14.0
SetCrashReportClient sets the RPC client to use for sending crash reports to the server. This should be called after connecting to the server.
func (*Logger) SetGPUInfo ¶ added in v0.14.0
SetGPUInfo sets the GPU information for crash reports. This should be called after OpenGL is initialized.
func (*Logger) UploadAndDeleteCrashStderrFiles ¶ added in v0.14.4
func (l *Logger) UploadAndDeleteCrashStderrFiles() <-chan struct{}
UploadAndDeleteCrashStderrFiles spawns a background goroutine that scans LogDir for any crash-stderr-*.txt files left over from prior runs, uploads each via the existing crash report RPC, and deletes the file on success. The returned channel is closed once the work is finished (whether the upload succeeded, failed, or timed out), so callers can gate further risky initialization on the upload completing — important for the case where a recurring init-time crash would otherwise kill the next run before the prior report reaches the server.
The current run's file (if any) is skipped so we don't ship a still- being-written log. Empty files (created but never written to because the run exited cleanly before any crash) are deleted without uploading.
type StackFrame ¶
type StackFrame struct {
File string `json:"file"`
Line int `json:"line"`
Function string `json:"function"`
}
func (StackFrame) String ¶
func (f StackFrame) String() string
type StackFrames ¶
type StackFrames []StackFrame
func Callstack ¶
func Callstack(fr []StackFrame) StackFrames
func (StackFrames) String ¶
func (f StackFrames) String() string
func (StackFrames) Strings ¶
func (f StackFrames) Strings() []string