Part of the multi-sink logging effort (meta issue below). Builds on the core pipeline and
BatchingSink issues.
Why syslog
It is the one integration that needs no vendor at all: rsyslog, syslog-ng, journald's
forwarder, Papertrail and a long tail of network appliances all speak it. One sink covers
all of them.
Scope
src/logging/SyslogSink.ts + options family, extends BatchingSink.
RFC 5424 frame:
<134>1 2026-08-12T09:41:02.113Z host app-name 1234 - - order placed {orderId=42}
PRI = facility * 8 + severity; severity mapped Debug → 7, Info → 6, Warn → 4,
Error → 3; facility defaults to 16 (local0)
- RFC 3339 timestamp with millisecond precision
HOSTNAME from options or the OS hostname; APP-NAME defaults to the system name;
PROCID is the process id where available, else -; MSGID is -
- the structured-data element is deliberately
- in v1: a well-formed SD-ID needs an IANA
private enterprise number. Fields are appended to MSG as the same {k=v} suffix the
text formatter uses. Documented, and revisitable if someone wants an enterprise id.
Transports:
- UDP via the same lazy
node:dgram module type the GELF sink uses
- TCP / TLS via
getTcpBackend().connect(...), with framing octet-counting
(RFC 6587, <length> <frame>) or lf
Options: transport (udp | tcp | tls), host, port (514), facility, appName,
hostName, framing, tls (code-only), delivery. HOCON block
actor-ts.logger.sinks.syslog.
Acceptance criteria
Reference
Part of #1150.
Part of the multi-sink logging effort (meta issue below). Builds on the core pipeline and
BatchingSinkissues.Why syslog
It is the one integration that needs no vendor at all: rsyslog, syslog-ng, journald's
forwarder, Papertrail and a long tail of network appliances all speak it. One sink covers
all of them.
Scope
src/logging/SyslogSink.ts+ options family,extends BatchingSink.RFC 5424 frame:
PRI=facility * 8 + severity; severity mapped Debug → 7, Info → 6, Warn → 4,Error → 3;
facilitydefaults to 16 (local0)HOSTNAMEfrom options or the OS hostname;APP-NAMEdefaults to the system name;PROCIDis the process id where available, else-;MSGIDis--in v1: a well-formed SD-ID needs an IANAprivate enterprise number. Fields are appended to
MSGas the same{k=v}suffix thetext formatter uses. Documented, and revisitable if someone wants an enterprise id.
Transports:
node:dgrammodule type the GELF sink usesgetTcpBackend().connect(...), with framingoctet-counting(RFC 6587,
<length> <frame>) orlfOptions:
transport(udp|tcp|tls),host,port(514),facility,appName,hostName,framing,tls(code-only),delivery. HOCON blockactor-ts.logger.sinks.syslog.Acceptance criteria
observability/logging/integrations, EN + DE, noting the omittedstructured-data element and why
bun run typecheck+bun testgreen on every commit; coverage gate before mergeReference
Part of #1150.