Open sdavids opened 3 months ago
I think we might want to do something here, but I'm not sure we should tie things with spring.jmx.enabled
since that property is really supposed to turn off Spring specific JXM features.
I wonder if we should wait to see how https://github.com/apache/logging-log4j2/issues/1229 plays out. If Log4J flip the default then we might be able to provide a quick way to turn it back on for users that need it.
Log4j2 has flipped the default so we can consider an option to flip it back as and when we upgrade to a version with the change. That said, I learned from https://github.com/apache/logging-log4j2/pull/2468#pullrequestreview-1999738929 that Log4j 3.0 won't have any JMX support at all so I wonder if this is really worth it. The log4j2.disableJmx=false
system property will be available irrespective of what we do here.
I suggest having no code changes but a documentation improvement.
https://docs.spring.io/spring-boot/reference/actuator/jmx.html
Add something along the lines of:
[NOTE]
====
`spring.jmx.enabled` affects only the management beans provided by Spring.
The enablement of management beans provided by other frameworks, e.g. https://logging.apache.org/log4j/2.x/manual/jmx.html[Log4j2], https://www.quartz-scheduler.org/api/2.3.0/constant-values.html#org.quartz.impl.StdSchedulerFactory.PROP_SCHED_JMX_EXPORT[Quartz], or https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html#configurations-jmx[Hibernate], is independent.
====
Expose management beans to the JMX domain.
⇓
Expose Spring's management beans to the JMX domain.
@wilkinsona,
Log4j2 has flipped the default so we can consider an option to flip it back as and when we upgrade to a version with the change. That said, I learned from apache/logging-log4j2#2468 (review) that Log4j 3.0 won't have any JMX support at all so I wonder if this is really worth it. The
log4j2.disableJmx=false
system property will be available irrespective of what we do here.
I think it would make sense for a Spring Application to use !spring.jmx.enabled
as default value for log4j2.disableJmx
regardless of the version of Log4j Core used. Adding the appropriate logic to SpringEnvironmentPropertySource
should be enough to accomplish this.
There are not many users that use Log4j JMX, there are probably even less users that enable JMX in Log4j, but not in Spring Boot, so it might even be safe to do it in a patch release.
https://logging.apache.org/log4j/2.x/manual/jmx.html#enabling-jmx
Related
Spring Boot - Disable JMX by default
JUnit 5 - Disable Log4J JMX beans creation in tests
Ideally the auto-configuration would set
log4j2.disableJmx=true
ifspring.jmx.enabled=false
thereby no log4j2 JMX beans would be created.Alternatively, the
log4j2.disableJmx
property should be mentioned in at least these two places: