2026-10-25 Release of logback version 1.6.6
• LoggingEventVO now rejects, during deserialization, throwable proxies whose cause or suppressed entries point back into the graph of proxies, for example to their own parent. Such graphs cannot be produced by logback itself. However, a crafted stream sent to a socket receiver could use serialization back-references to build them, after which DefaultThrowableRenderer and SyslogAppender would loop forever and the recursive converters would overflow the stack. These streams are now rejected with an InvalidObjectException. Circular exceptions logged by the application are still transmitted correctly. This issue was reported and fixed in PR #1079 by arfa-21.
• FileNamePattern now escapes characters with a special meaning in regular expressions, such as (, [ or +, when converting the literal parts of a file name pattern into a regex. Previously, RollingFileAppender failed to start when the path contained an unbalanced parenthesis, as in C:/Users/Michael(Financ. This issue was reported in issues/914 by danamlund. Moreover, with SizeAndTimeBasedRollingPolicy and a pattern such as app.%d.(%i).log, existing archives were not recognized. After a restart within the same period, the next rollover could overwrite an existing archive, and maxHistory and totalSizeCap never removed such archives. This issue was reported in issues/933 by GeoffreyBoulay. The fix was contributed in PR #1077 by Jialin Chen. Regex metacharacters in %d{...} date patterns are now escaped as well.
• The conversion of date patterns into regular expressions now follows the rules of DateTimeFormatter, which logback uses to format dates, instead of those of SimpleDateFormat. In particular, the L (stand-alone month) pattern letter is now supported.
• SyslogOutputStream now connects its DatagramSocket to the syslog host. Previously, the socket was bound to the wildcard address, so that hardened environments saw an unconnected UDP listener on all interfaces for as long as the application ran. This issue was reported in issues/939 by joao-rebelo. The fix was contributed in PR #1076 by Lyin-OTTF.
If the socket cannot be connected, for example because the network is not yet available, SyslogOutputStream falls back to an unconnected socket and SyslogAppenderBase emits a warning. When a datagram sent on a connected socket fails due to an ICMP "port unreachable" message caused by an earlier datagram, the datagram is sent once more so that no message is lost. If the retry also fails, a single warning is emitted instead of one error per event.
• OutputStreamAppender now stops its encoder when the appender is stopped. Previously, encoders holding resources until they were stopped, such as those of logstash-logback-encoder, were never released, causing heap growth at each reconfiguration. This issue was fixed in PR #1072 by Samuel Fernandes.
• During variable substitution, an unmatched right curly brace now causes an error to be reported, with the original value left unchanged. Previously, the brace and all subsequent characters were silently dropped, so that %m}some text became %m. This issue was reported in issues/836 by philsttr.
• LogbackMDCAdapter now stores MDC entries in a LinkedHashMap, so that the %X converter outputs them in insertion order. This issue was reported in LOGBACK-1337 and fixed by Craig P. Motlin.
• A bit-wise identical binary of this version can be reproduced by building from source code at commit a9ee801 associated with the tag v_1.6.6. The release was built using Java "21" 2023-10-17 LTS build 21.0.1.+12-LTS-29 under Linux Debian 11.6.