The class org.apache.logging.log4j.core.jmx.Server creates an ExecutorService at construction time and and stores it as an instance variable of type Executor (named executor).
This executor service is never shut down (I guess the unregisterMBeans() methods may be good candidates, with some care for unregisterMBeans(MBeanServer) which performs unregistration only for a single MBeanServer). This causes a memory leak if Log4j is used in a web application (under Tomcat, for instance) and the JMX services have been used (i.e.: the Server class has been instantiated).
But even worse, what I'm observing is that a notification Job may be submitted to that executor by javax.management.NotificationBroadcasterSupport.sendNotification(Notification), invoked by org.apache.logging.log4j.core.jmx.StatusLoggerAdmin.log(StatusData) in certain circumstances exactly during Tomcat shutdown process: since the executor is using non-daemon threads to execute tasks, this eventually prevents the application server to shutdown (I have to kill it).