apache / apache/logging-log4j2

Default `protocol` to UDP in the Log4j 1 `SyslogAppender` builder

Open
#4,238 2 comments 0 reactions 1 assignee Claimed by @DragonFSKY View on GitHub
waiting-for-maintainer
Dominant language
Java
Stars
3.6k
Forks
1.7k
Avg merge
21h 30m
Merged PRs (30d)
27

Description

`SyslogAppenderBuilder` currently defaults `protocol` to TCP. Log4j 1's `org.a.l.net.SyslogAppender` only ever supported UDP, and `protocol` has no counterpart in the Log4j 1 configuration format: it is a bridge extension.

This matters beyond fidelity. Over UDP the datagram boundary is the record boundary, so no character in the message requires escaping. Over TCP with RFC 6587 non transparent framing, LF is the record delimiter, and `Log4j1SyslogLayout` provides no mechanism to escape it. Defaulting to TCP therefore silently places legacy configurations on a transport the ported layout was never written for.

**Proposed changes:**

- Default `protocol` to UDP when the appender is built from a Log4j 1 configuration, matching Log4j 1 behaviour.
- Document `protocol` explicitly as a `log4j-1.2-api` extension, and note that non-UDP values are not recommended because `Log4j1SyslogLayout` does not escape newlines.
- Consider emitting a status logger warning when `protocol` is set to a stream transport.

All users should migrate away from a Log4j 1 configuration, but in particular users needing structured syslog over a framed transport should migrate to a Log4j 2 configuration and `Rfc5424Layout`, which implements newline escaping.

This was reported by @August829.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.