juicedata/juicefs · warning

buffer is full

Error message

buffer is full

What it means

The syslog hook Fire() pushes log lines into a bounded buffer; when the buffer is full the line is dropped (printed to stderr) and the error 'buffer is full' is returned to the logger. It means syslog consumption is slower than log production, so messages are being lost to syslog.

Source

Thrown at pkg/utils/logger_syslog.go:78

		if err != nil {
			fmt.Fprintf(os.Stderr, "write to syslog: %v, level: %s, line: %s", err, l.level, line)
		}
	}
}

func (hook *SyslogHook) Fire(entry *logrus.Entry) error {
	line, err := entry.String()
	if err != nil {
		fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
		return err
	}

	select {
	case hook.buffer <- logLine{entry.Level, line[27:]}: // drop the timestamp
		return nil
	default:
		fmt.Fprintf(os.Stderr, "buffer of syslog is full, drop: %s", line)
		return fmt.Errorf("buffer is full")
	}
}

var once sync.Once

func InitLoggers(logToSyslog bool) {
	if logToSyslog {
		once.Do(func() {
			hook, err := logrus_syslog.NewSyslogHook("", "", syslog.LOG_DEBUG|syslog.LOG_USER, "")
			if err != nil {
				// println("Unable to connect to local syslog daemon")
				return
			}
			syslogHook = &SyslogHook{hook, make(chan logLine, 1024)}
			go syslogHook.(*SyslogHook).flush()

			for _, l := range loggers {
				l.AddHook(syslogHook)

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Fix/restart the local syslog daemon
  2. Increase the hook buffer size or log level filtering to reduce volume
  3. Disable syslog logging (InitLoggers with logToSyslog=false) if not needed
  4. Check /dev/log or configured socket availability
Defensive patterns

Strategy: fallback

Validate before calling

// check syslog socket before enabling
if _, err := net.Dial("unix", "/dev/log"); err != nil { logToSyslog = false }

Try / catch

if err := log.Fire(entry); err != nil { log.Printf("syslog unavailable: %v", err) } // rely on stderr fallback

Prevention

When it happens

Trigger: Logging to syslog with logToSyslog enabled while the syslog daemon is slow, blocked, or unreachable, producing log volume faster than the hook drains its buffer.

Common situations: rsyslog/syslog-ng down or overloaded; very chatty workloads (GC logs, hot-path errors); container syslog socket latency.

Related errors


AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06). Data as JSON: /api/errors/6aad80385040eb63. Report an issue: GitHub.