logger.go
Functions
func Enabled
func (nopHandler) Enabled(context.Context, slog.Level) bool { return false }
func Handle
func (nopHandler) Handle(context.Context, slog.Record) error { return nil }
func Logger
func Logger() *slog.Logger {
return loggerPtr.Load()
}
func SetLogger
SetLogger configures the logger for gg and all its sub-packages.
By default, gg produces no log output. Call SetLogger to enable logging.
SetLogger is safe for concurrent use: it stores the new logger atomically.
Pass nil to disable logging (restore default silent behavior).
Log levels used by gg:
- [slog.LevelDebug]: internal diagnostics (GPU pipeline state, buffer sizes)
- [slog.LevelInfo]: important lifecycle events (GPU adapter selected)
- [slog.LevelWarn]: non-fatal issues (CPU fallback, resource release errors)
Example:
// Enable info-level logging to stderr:
gg.SetLogger(slog.Default())
// Enable debug-level logging for full diagnostics:
gg.SetLogger(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
Level: slog.LevelDebug,
})))
func SetLogger(l *slog.Logger) {
if l == nil {
l = newNopLogger()
}
loggerPtr.Store(l)
// Propagate to GPU accelerator if it supports logging.
accelMu.RLock()
a := accel
accelMu.RUnlock()
if a != nil {
propagateLogger(a, l)
}
}
func WithAttrs
func (nopHandler) WithAttrs([]slog.Attr) slog.Handler { return nopHandler{} }
func WithGroup
func (nopHandler) WithGroup(string) slog.Handler { return nopHandler{} }
Logger returns the current logger used by gg.
Sub-packages (gpu/, integration/ggcanvas/) call this to share the same
logger configuration without introducing import cycles.
Logger is safe for concurrent use.