2014-09-05 8 views
0

Я использую log4j 2 с MongoDBAppender в webapp (спецификация сервлета 2.5).Log4j2 в webapp: поток MongoCleaner создает утечки памяти

Здесь web.xml:

<listener> 
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> 
</listener> 
<filter> 
    <filter-name>log4jServletFilter</filter-name> 
    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>log4jServletFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
    <dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization 
     only; not supported in 2.5 --> 
</filter-mapping> 

Здесь конфигурации log4j2:

<Configuration status="warn"> 
    <Properties> 
     <Property name="MongoDbServer">$${jndi:MongoDB.serverAddress.1.host}:$${jndi:MongoDB.serverAddress.1.port}</Property> 
     <Property name="MongoDbPassword">$${jndi:MongoDB.password}</Property> 
    </Properties> 
    <Appenders> 
     <NoSql name="databaseAppender"> 
      <MongoDb databaseName="LOGS" collectionName="test" 
       server="${MongoDbServer}" username="LOGS" password="${MongoDbPassword}" /> 
     </NoSql> 
     <Async name="Async"> 
      <AppenderRef ref="databaseAppender" /> 
     </Async> 
    </Appenders> 
    <Loggers> 
     <Root level="info"> 
      <AppenderRef ref="Async" /> 
     </Root> 
    </Loggers> 
</Configuration> 

Когда я undeply на веб-приложение, появляется этот журнал ошибок:

SEVERE: A web application appears to have started a thread named [MongoCleaner665622824] but has failed to stop it. This is very likely to create a memory leak. 

Любое предложение?

Спасибо.

ответ

0

Возможно, вы обнаружили ошибку. Можете ли вы поднять это в трекер log4j2 Jira?

+0

Выполнено, создана проблема https://issues.apache.org/jira/browse/LOG4J2-817. – fmerighi

0

Обязательно закрывайте все экземпляры com.mongodb.MongoClient. например:

MongoClient mongoClient= new MongoClient(); 

// Do something 

mongoClient.close(); 
Смежные вопросы