2016-06-22 28 views
5

In un'applicazione Java molto semplice, con il logback utilizzando i valori predefiniti (no logback.xml in src/main/resources), l'applicazione si avvia in circa 400 ms. Non appena aggiungiamo un logback.xml di base al classpath (src/main/resources), il tempo di avvio aumenta a circa 5500 ms. Lo abbiamo visto in più progetti. La configurazione è la seguente:Orari di avvio lento di logback

<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%date{HH:mm:ss.SSS} %-7level - %-50logger{36} - %message%n</pattern> 
     </encoder> 
    </appender> 

    <logger name="com.zaxxer.hikari" level="ERROR"> 
     <appender-ref ref="STDOUT"/> 
    </logger> 

    <logger name="org.sql2o" level="ERROR"> 
     <appender-ref ref="STDOUT"/> 
    </logger> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT"/> 
    </root> 

</configuration> 
+0

ciò che è la parte più dettagliata del codice secondo la vostra console? –

+0

@NicolasFilotto - Durante l'avvio ci sono letteralmente solo 6 stampe INFO. Questa è un'applicazione Spark Java standard, Hello World. –

+0

Impossibile riprodurre utilizzando il logback 1.1.7/slf4j 1.7.21 su jdk 1.8.0_91. Senza 'logback.xml' ottengo 75 ms di tempo di esecuzione, e con' logback.xml' ottengo 160 ms di tempo di esecuzione, quando si registrano 10 messaggi di informazione. Codice di prova: 'Logger logger = LoggerFactory.getLogger (Test.class); for (int i = 0; i <10; i ++) logger.info ("Hello world" + i); 'BTW: Questo è ciò che viene chiamato un [MCVE] (http://stackoverflow.com/help/mcve) . – Andreas

risposta

10

5 secondi sembra un timeout di query DNS. È stato il caso per me. Basta essere sicuri che il nome host del tuo computer risolva in un ip. È possibile verificare che facendo un ping:

ping `hostname` 

Se risolve il nome e avvia il ping, il problema è un'altra cosa. Ma se vedi un messaggio che dice "indirizzo errato", questo potrebbe spiegare il tuo problema.

Per risolvere il problema in modo semplice, è sufficiente aggiungere il nome host al file /etc/hosts. Basta aggiungere il nome host alla fine della riga a partire da 127.0.0.1. La modifica dovrebbe essere applicata immediatamente. Potrebbe non essere il modo più pulito per risolverlo, specialmente su Linux moderni con dhcp e così via. Ma se funziona, avrai un buon puntatore su come risolvere questo problema di risoluzione dei nomi in modo permanente.

+0

Quanto sopra non ha funzionato per me, anche se dopo aver aggiunto 127.0.0.1 il comando ping sopra funzionava, dove era scaduto prima della modifica a/etc/hosts. Ho passato un po 'di tempo con il debugger e su Sierra (OS X 10.12) il lungo timeout è in risoluzione localhost via ipv6. Non sono in grado di disabilitare ipv6, quindi non posso confermare che risolverà il problema. Ma potrebbe essere una briciola di pane da seguire. –

6

Per me il problema era la risoluzione ipv6. La risposta di Damien sopra era azzeccata, solo bisogno di aggiungere una voce ipv6 a etc/hosts. Qualcosa di simile:

::1  ${your.host.name} 
+0

Conferma: solo applicando la soluzione accettata e questo ha risolto il mio problema. Sono su macOS Sierra, se è importante. – Uniqus