[AI-8th]Add structured logging support to SOFABoot#1417
Conversation
There was a problem hiding this comment.
Pull request overview
This PR ports Spring Boot’s structured logging capability into SOFABoot by introducing a Logback encoder that can switch between classic pattern output and structured JSON (ECS/Logstash), and wiring environment properties so SOFA-managed log files can emit structured logs (optionally enriched with tracer context).
Changes:
- Added
SofaStructuredLogEncoderand updated SOFABoot + RPC Logback templates to enable pattern/structured output switching vialogging.structured.*. - Extended
LogEnvironmentPostProcessorto propagatelogging.structured.*,logging.sofa.tracer.*, andspring.application.*into SOFA logging configuration space. - Introduced Jakarta Validation-based fail-fast validation for several SOFABoot configuration properties, plus tests and required validation dependencies.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| sofa-boot-project/sofaboot-dependencies/pom.xml | Adds dependency management for spring-boot-starter-validation. |
| sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/logging/logback/SofaStructuredLogEncoder.java | New encoder to support structured logging with pattern fallback and optional tracer context injection. |
| sofa-boot-project/sofa-boot/src/main/resources/sofa-boot/log/logback/log-conf.xml | Switches file appenders from PatternLayoutEncoder to SofaStructuredLogEncoder. |
| sofa-boot-project/sofa-boot-core/rpc-sofa-boot/src/main/resources/com/alipay/sofa/rpc/boot/log/logback/log-conf.xml | Switches RPC file appenders to SofaStructuredLogEncoder. |
| sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/logging/LogEnvironmentPostProcessor.java | Bridges structured logging/tracer/app metadata properties into SOFA logging configs and adds structured format placeholders. |
| sofa-boot-project/sofa-boot/src/test/java/com/alipay/sofa/boot/logging/logback/SofaStructuredLogEncoderTests.java | Adds tests for pattern fallback, ECS output, and tracer context injection. |
| sofa-boot-project/sofa-boot/src/test/java/com/alipay/sofa/boot/logging/LogEnvironmentPreparingListenerTests.java | Adds a test to verify structured logging/tracer/app metadata property propagation. |
| sofa-boot-project/sofa-boot/pom.xml | Adds optional logback-classic dependency and adds tracer-core for tests. |
| sofa-boot-project/sofa-boot-autoconfigure/pom.xml | Adds spring-boot-starter-validation dependency. |
| sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerProperties.java | Adds @Validated and field constraints (e.g., sampler percentage bounds). |
| sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/runtime/SofaRuntimeProperties.java | Adds @Validated, numeric constraints, and a cross-field pool-size validation. |
| sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/isle/SofaModuleProperties.java | Adds @Validated and positive constraints for parallel refresh config. |
| sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/rpc/SofaBootRpcProperties.java | Enables validation and adds a class-level constraint to validate related RPC properties together. |
| sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/rpc/ValidSofaBootRpcProperties.java | New Jakarta Validation constraint annotation for RPC properties. |
| sofa-boot-project/sofa-boot-autoconfigure/src/main/java/com/alipay/sofa/boot/autoconfigure/rpc/SofaBootRpcPropertiesValidator.java | New validator implementing detailed RPC property validation rules. |
| sofa-boot-project/sofa-boot-autoconfigure/src/test/java/com/alipay/sofa/boot/autoconfigure/tracer/SofaTracerAutoConfigurationTests.java | Adds test asserting invalid tracer properties fail fast. |
| sofa-boot-project/sofa-boot-autoconfigure/src/test/java/com/alipay/sofa/boot/autoconfigure/runtime/SofaRuntimeAutoConfigurationTests.java | Adds test asserting invalid async-init executor sizing fails fast. |
| sofa-boot-project/sofa-boot-autoconfigure/src/test/java/com/alipay/sofa/boot/autoconfigure/rpc/SofaRpcAutoConfigurationTests.java | Adds test asserting invalid RPC properties fail fast with expected messages. |
| sofa-boot-project/sofa-boot-autoconfigure/src/test/java/com/alipay/sofa/boot/autoconfigure/isle/SofaModuleAutoConfigurationTests.java | Adds test asserting invalid module parallel refresh config fails fast. |
| sofa-boot-project/sofa-boot-actuator-autoconfigure/pom.xml | Adds spring-boot-starter-validation dependency. |
| sofa-boot-project/sofa-boot-actuator-autoconfigure/src/main/java/com/alipay/sofa/boot/actuator/autoconfigure/health/HealthProperties.java | Adds @Validated and positive constraints for health timeouts. |
| sofa-boot-project/sofa-boot-actuator-autoconfigure/src/test/java/com/alipay/sofa/boot/actuator/autoconfigure/health/ReadinessAutoConfigurationTests.java | Adds test asserting invalid health properties fail fast. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @ConfigurationProperties("sofa.boot.tracer") | ||
| @Validated | ||
| public class SofaTracerProperties { | ||
|
|
||
| /** | ||
| * Disable digest log. | ||
| */ | ||
| @Pattern(regexp = "^(?i:true|false)$", message = "disableDigestLog 必须为 true 或 false") | ||
| private String disableDigestLog = "false"; |
| * switches to Spring Boot's structured logging formatters when a structured format is | ||
| * configured for SOFA logger spaces. | ||
| * | ||
| * @author OpenAI |
| static final String CONSOLE_LOG_STRUCTURED_FORMAT = "CONSOLE_LOG_STRUCTURED_FORMAT"; | ||
|
|
||
| static final String FILE_STRUCTURED_FORMAT_PROPERTY = "logging.structured.format.file"; | ||
|
|
||
| static final String CONSOLE_STRUCTURED_FORMAT_PROPERTY = "logging.structured.format.console"; | ||
|
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #1417 +/- ##
============================================
- Coverage 82.94% 82.80% -0.14%
- Complexity 2975 3033 +58
============================================
Files 340 342 +2
Lines 9833 10149 +316
Branches 1178 1204 +26
============================================
+ Hits 8156 8404 +248
- Misses 1163 1215 +52
- Partials 514 530 +16 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Related #1402
Added SofaStructuredLogEncoder to support switching SOFA Logback outputs between pattern logging and structured logging (ecs / logstash).
Extended LogEnvironmentPostProcessor to bridge logging.structured., logging.sofa.tracer., and spring.application.* into SOFA logger spaces.
Updated SOFABoot runtime and RPC Logback templates to use the new encoder, enabling structured output in SOFA-managed log files.
Added tracer-context injection support so structured application logs can include trace.id, span.id, and parent.id when logging.sofa.tracer.output-structured=true.
Added focused tests covering pattern fallback, ECS output, property propagation, and tracer context injection.