복붙노트

[SPRING] 스프링 설정 디버깅

SPRING

스프링 설정 디버깅

Spring과 Hibernate를 사용하고 Websphere에서 실행되는 Java 응용 프로그램에서 작업하고 있습니다. 나는 Spring이 내 객체에 Dao를로드 할 것을 기대하지만 문제가 발생했다.하지만 어떤 이유로 그것이 발생하지 않는다. (같은 방식으로 지정된 다른 DAO는 잘로드됩니다.)

질문은 - Spring이 어떻게로드 할 것인지를 어떻게 디버깅 할 수 있습니까? Spring 용 로깅을 켤 수 있습니까?

해결법

  1. ==============================

    1.예, Spring 프레임 워크 로깅은 매우 자세합니다. 이미 로깅 프레임 워크를 사용하고 있는지 여부는 귀하의 게시물에서 언급하지 않았습니다. log4j를 사용하는 경우 log4j 구성에 spring appender를 추가하십시오 (예 : log4j.xml 또는 log4j.properties). log4j xml 구성을 사용하는 경우 다음과 같이 할 수 있습니다

    예, Spring 프레임 워크 로깅은 매우 자세합니다. 이미 로깅 프레임 워크를 사용하고 있는지 여부는 귀하의 게시물에서 언급하지 않았습니다. log4j를 사용하는 경우 log4j 구성에 spring appender를 추가하십시오 (예 : 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);
        }
    }
    

    로깅을로드하는 방법을 변경하도록 권장하지는 않지만 dev 환경에서이 방법을 사용해보십시오.이 스 니펫을 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 설정 파일

    내 로컬 바람둥이에 이것을 테스트하고 그것은 응용 프로그램 시작에 많은 로깅을 생성. @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>
    
  2. ==============================

    2.Spring Boot를 사용하는 경우 --debug 플래그로 응용 프로그램을 시작하여 "디버그"모드를 활성화 할 수도 있습니다.

    Spring Boot를 사용하는 경우 --debug 플래그로 응용 프로그램을 시작하여 "디버그"모드를 활성화 할 수도 있습니다.

    java -jar myapp.jar --debug
    

    application.properties에서 debug = true를 지정할 수도 있습니다.

    디버그 모드가 활성화되면 코어 로거 (임베디드 컨테이너, Hibernate 및 Spring Boot) 중 일부가 자세한 정보를 출력하도록 구성됩니다. 디버그 모드를 활성화해도 DEBUG 수준의 모든 메시지를 기록하도록 응용 프로그램이 구성되지 않습니다.

    또는 응용 프로그램을 --trace 플래그 (또는 application.properties에서 trace = true)로 시작하여 "추적"모드를 활성화 할 수 있습니다. 이렇게하면 코어 로거 (임베디드 컨테이너, Hibernate 스키마 생성 및 전체 Spring 포트폴리오) 중 일부에 대한 추적 로깅을 사용할 수 있습니다.

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

  3. from https://stackoverflow.com/questions/7840088/debugging-spring-configuration by cc-by-sa and MIT license