Files
fleetd/bridged/src/main/resources/logback.xml
T
Dai Ha 46fa4f38d5
CI / build (pull_request) Successful in 49s
CI / contract (pull_request) Successful in 1m1s
CB-575: filter MCP cancellation warnings
2026-08-15 05:57:45 +02:00

54 lines
2.5 KiB
XML

<configuration>
<!--
CB-575: MCP SDK 2.0.0 has no public notification registration API. It registers only
notifications/initialized and notifications/roots/list_changed, so other client notifications
still warn when unhandled. Clients may legitimately send notifications/cancelled; suppress only
that SDK WARN because it would devalue the action-needed WARN level used by M4 fleet health.
If a later SDK handles cancellation, this filter simply stops matching and can be removed.
-->
<turboFilter class="dev.ltms.bridged.logging.McpCancelledNotificationFilter"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{28} - %msg%n</pattern>
</encoder>
</appender>
<!--
CB-505 audit trail. Its own file, deliberately not the app log: privileged actions
(spawn/stop/send/reply/drain) must stay greppable and shippable without dragging DEBUG noise
along. AuditLog emits a complete JSON object including its own ISO-8601 "ts" field, so the
pattern is a bare %msg — a pattern that spliced literal braces around the message would
collide with logback's own variable substitution. Rolls daily, 30 days retained, 100MB cap.
NOTE: records carry who/what/target/outcome only. Message CONTENT is never written here —
this bridge carries source code and prompts, and an audit log that accumulated them would be
a transcript archive rather than a control.
-->
<appender name="AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/audit.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/audit.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>100MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="dev.ltms.bridged" level="DEBUG"/>
<logger name="io.javalin" level="INFO"/>
<logger name="org.eclipse.jetty" level="WARN"/>
<!-- additivity=false keeps the audit stream out of stdout; it is its own record. -->
<logger name="audit" level="INFO" additivity="false">
<appender-ref ref="AUDIT"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>