{"record":{"id":"6aad80385040eb63","repo":"juicedata/juicefs","slug":"buffer-is-full","errorCode":null,"errorMessage":"buffer is full","messagePattern":"buffer is full","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"pkg/utils/logger_syslog.go","lineNumber":78,"sourceCode":"\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"write to syslog: %v, level: %s, line: %s\", err, l.level, line)\n\t\t}\n\t}\n}\n\nfunc (hook *SyslogHook) Fire(entry *logrus.Entry) error {\n\tline, err := entry.String()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Unable to read entry, %v\", err)\n\t\treturn err\n\t}\n\n\tselect {\n\tcase hook.buffer <- logLine{entry.Level, line[27:]}: // drop the timestamp\n\t\treturn nil\n\tdefault:\n\t\tfmt.Fprintf(os.Stderr, \"buffer of syslog is full, drop: %s\", line)\n\t\treturn fmt.Errorf(\"buffer is full\")\n\t}\n}\n\nvar once sync.Once\n\nfunc InitLoggers(logToSyslog bool) {\n\tif logToSyslog {\n\t\tonce.Do(func() {\n\t\t\thook, err := logrus_syslog.NewSyslogHook(\"\", \"\", syslog.LOG_DEBUG|syslog.LOG_USER, \"\")\n\t\t\tif err != nil {\n\t\t\t\t// println(\"Unable to connect to local syslog daemon\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsyslogHook = &SyslogHook{hook, make(chan logLine, 1024)}\n\t\t\tgo syslogHook.(*SyslogHook).flush()\n\n\t\t\tfor _, l := range loggers {\n\t\t\t\tl.AddHook(syslogHook)","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/pkg/utils/logger_syslog.go#L60-L96","documentation":"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.","triggerScenarios":"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.","commonSituations":"rsyslog/syslog-ng down or overloaded; very chatty workloads (GC logs, hot-path errors); container syslog socket latency.","solutions":["Fix/restart the local syslog daemon","Increase the hook buffer size or log level filtering to reduce volume","Disable syslog logging (InitLoggers with logToSyslog=false) if not needed","Check /dev/log or configured socket availability"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// check syslog socket before enabling\nif _, err := net.Dial(\"unix\", \"/dev/log\"); err != nil { logToSyslog = false }","typeGuard":null,"tryCatchPattern":"if err := log.Fire(entry); err != nil { log.Printf(\"syslog unavailable: %v\", err) } // rely on stderr fallback","preventionTips":["Monitor syslog daemon health","Raise buffer size for high-volume logging","Filter log levels before syslog delivery"],"tags":["logging","syslog","buffer"],"backgroundTag":"buffer-full","analyzedSha":"c9a67b23e8e08ec23ec331aa6f1675e2319e921c","analyzedAt":"2026-09-06T17:55:48.476Z","contentChangedAt":"2026-09-06T17:55:48.476Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}