Debugowanie konfiguracji sprężyny

Pracuję nad aplikacją Java, która używa Springa i Hibernate i działa na Websphere. Natknąłem się na problem, w którym spodziewam się, że wiosna załaduje Dao do mojego obiektu, ale z jakiegoś powodu tak się nie dzieje. (Inny Dao, który jest określony w podobny sposób, jest ładowany dobrze.)

Pytanie brzmi - jak Mogę debugować jak Spring decyduje w co się załadować? Czy Mogę włączyć logowanie na wiosnę i gdzie?

Author: ArtB, 2011-10-20

2 answers

Tak, Spring Framework logging jest bardzo szczegółowy, nie wspomniałeś w swoim poście, czy używasz już frameworka logging, czy nie. Jeśli używasz log4j to wystarczy dodać spring appenders do konfiguracji log4j (czyli do log4j.xml lub log4j. properties), jeśli używasz log4j XML config możesz zrobić coś takiego

<category name="org.springframework.beans">
    <priority value="debug" />
</category>

Lub

<category name="org.springframework">
    <priority value="debug" />
</category>

Radziłbym przetestować ten problem w izolacji za pomocą testu JUnit, można to zrobić za pomocą spring testing module w koniunkcja z Junit . Jeśli używasz modułu spring test to zrobi większość pracy dla Ciebie ładuje plik kontekstowy na podstawie konfiguracji kontekstu i uruchamia kontener, dzięki czemu możesz po prostu skupić się na testowaniu logiki biznesowej. Mam tu mały przykład

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:springContext.xml"})
@Transactional
public class SpringDAOTest 
{
    @Autowired
    private SpringDAO dao;

    @Autowired
    private ApplicationContext appContext;

    @Test
    public void checkConfig()
    {
        AnySpringBean bean =  appContext.getBean(AnySpringBean.class);
        Assert.assertNotNull(bean);
    }
}

UPDATE

Nie radzę ci zmieniać sposobu ładowania logowania, ale spróbuj tego w środowisku deweloperskim, Dodaj ten fragment do swojej sieci.plik xml

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

Zaktualizuj konfigurację log4j plik


Przetestowałem to na moim lokalnym tomcacie i wygenerowało to dużo logowania podczas uruchamiania aplikacji. Chcę też dokonać korekty: użyj debug a nie info jak wspomniał @Rayan Stewart.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{HH:mm:ss} %p [%t]:%c{3}.%M()%L - %m%n" />
        </layout>
    </appender>

    <appender name="springAppender" class="org.apache.log4j.RollingFileAppender"> 
        <param name="file" value="C:/tomcatLogs/webApp/spring-details.log" /> 
        <param name="append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{MM/dd/yyyy HH:mm:ss}  [%t]:%c{5}.%M()%L %m%n" />
        </layout>
    </appender>

    <category name="org.springframework">
        <priority value="debug" />
    </category>

    <category name="org.springframework.beans">
        <priority value="debug" />
    </category>

    <category name="org.springframework.security">
        <priority value="debug" />
    </category>

    <category
        name="org.springframework.beans.CachedIntrospectionResults">
        <priority value="debug" />
    </category>

    <category name="org.springframework.jdbc.core">
        <priority value="debug" />
    </category>

    <category name="org.springframework.transaction.support.TransactionSynchronizationManager">
        <priority value="debug" />
    </category>

    <root>
        <priority value="debug" />
        <appender-ref ref="springAppender" />
        <!-- <appender-ref ref="STDOUT"/>  -->
    </root>
</log4j:configuration>
 55
Author: Prasanna Talakanti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-23 11:32:07

Jeśli używasz Spring Boot, możesz również włączyć tryb "debug", uruchamiając aplikację z flagą --debug.

java -jar myapp.jar --debug

Można również określić debug = true w aplikacji.właściwości.

Gdy tryb debugowania jest włączony, wybór podstawowych rejestratorów (wbudowany kontener, Hibernate i Spring Boot) jest skonfigurowany tak, aby wysyłać więcej informacji. Włączenie trybu debugowania nie skonfiguruje aplikacji do rejestrowania wszystkich wiadomości z poziomem debugowania.

Alternatywnie możesz włącz tryb "śledzenia", uruchamiając aplikację z flagą --trace (lub trace=true w aplikacji.właściwości). Umożliwia to rejestrowanie śledzenia dla wybranych podstawowych loggerów (wbudowany kontener, generowanie schematu Hibernate i cały portfel Spring).

Https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

 1
Author: Anton Yuriev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-22 08:53:43