Отладка весенней конфигурации - PullRequest
57 голосов
/ 20 октября 2011

Я работаю над приложением Java, которое использует Spring и Hibernate и работает в Websphere.Я столкнулся с проблемой, когда я ожидаю, что Spring загрузит Dao в мой объект, но по какой-то причине этого не происходит.(Другой Dao, который указан почти таким же образом, загружается нормально.)

Вопрос - как мне отладить, как Spring решает, что загружать?Можно ли включить ведение журнала для Spring и где?

Ответы [ 2 ]

61 голосов
/ 20 октября 2011

Да, логирование Spring Framework очень подробно, вы не упомянули в своем посте, используете ли вы уже фреймворк или нет. Если вы используете log4j, просто добавьте подпружиненные приложения в конфигурацию log4j (то есть в log4j.xml или log4j.properties), если вы используете конфигурацию log4j xml, вы можете сделать что-то вроде этого

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

или

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

Я бы посоветовал вам протестировать эту проблему изолированно с помощью теста JUnit. Это можно сделать с помощью модуля тестирования пружины в сочетании с Junit . Если вы используете весенний тестовый модуль, он выполнит большую часть работы за вас, загрузит файл контекста на основе вашей конфигурации контекста и запустит контейнер, чтобы вы могли просто сосредоточиться на тестировании своей бизнес-логики. У меня есть маленький пример здесь

@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

Я не советую вам менять способ загрузки журналов, но попробуйте это в вашей среде разработки. Добавьте этот фрагмент в файл web.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>

ОБНОВЛЕНИЕ файла конфигурации log4j


Я проверил это на своем локальном tomcat, и это вызвало много регистрации при запуске приложения. Я также хочу внести исправление: используйте debug , а не info , как упоминал @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>
5 голосов
/ 22 сентября 2018

Если вы используете Spring Boot, вы также можете включить режим «отладки», запустив ваше приложение с флагом --debug.

java -jar myapp.jar --debug

Вы также можете указать debug = true в вашем application.properties.

Когда включен режим отладки, набор основных логгеров (встроенный контейнер, Hibernate и Spring Boot) настраивается для вывода дополнительной информации. Включение режима отладки не настраивает ваше приложение для регистрации всех сообщений с уровнем DEBUG.

Кроме того, вы можете включить режим «трассировки», запустив ваше приложение с флагом --trace (или trace = true в ваших application.properties). Это позволяет регистрировать трассировку для выбора основных регистраторов (встроенный контейнер, генерация схемы Hibernate и весь портфель Spring).

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

...