스프링 구성 디버깅
저는 스프링과 하이버네이트를 사용하고 웹사이트에서 실행되는 자바 어플리케이션을 작업하고 있습니다.문제가 생겼습니다. Spring이 Dao를 내 객체에 로드할 것으로 예상하지만 어떤 이유로 그렇게 되지 않습니다. (같은 방식으로 지정된 다른 Dao는 로드가 잘 됩니다.)
문제는 - Spring이 적재할 내용을 결정하는 방법을 어떻게 디버깅할 수 있느냐는 것입니다.봄에 쓸 로깅을 어디서 켜도 됩니까?
예, 스프링 프레임워크 로깅은 매우 상세합니다. 이미 로깅 프레임워크를 사용하고 있는지 여부에 대해 게시물에 언급하지 않았습니다.log4j를 사용하는 경우 spring appenders를 log4j config에 추가하면 됩니다(즉 log4j.xml 또는 log4j.properties에). log4j xml config를 사용하는 경우 다음과 같은 작업을 수행할 수 있습니다.
<category name="org.springframework.beans">
<priority value="debug" />
</category>
아니면
<category name="org.springframework">
<priority value="debug" />
</category>
Junit test를 사용하여 이 문제를 분리하여 테스트하는 것을 권장합니다. Junit과 함께 spring testing module을 사용하면 됩니다.스프링 테스트 모듈을 사용하면 컨텍스트 구성을 기반으로 컨텍스트 파일을 로드하고 컨테이너를 시작하므로 비즈니스 로직 테스트에만 집중할 수 있습니다.여기 작은 예시가 있습니다.
@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);
}
}
갱신하다
로그를 로드하는 방법을 변경하는 것이 아니라 개발 환경에서 시도해 보십시오. 이 토막글을 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>
UPDATE log4j 구성 파일
로컬 Tomcat에서 테스트를 해보니 애플리케이션 시작 시 많은 로그온이 발생했습니다.@Rayan Stewart가 언급한 것처럼 debug not info를 사용하는 것도 수정하고 싶습니다.
<?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>
Spring Boot을 사용하는 경우 --debug 플래그로 응용프로그램을 시작하여 "debug" 모드를 활성화할 수도 있습니다.
java -jar myapp.jar --debug
application.properties에서 debug=true를 지정할 수도 있습니다.
디버그 모드가 활성화된 경우 코어 로거(embedded container, Hibernate, Spring Boot)를 선택하여 더 많은 정보를 출력하도록 구성합니다.디버그 모드를 활성화한다고 해서 모든 메시지가 디버그 수준으로 기록되도록 응용프로그램이 구성되지는 않습니다.
또는 --trace 플래그(또는 application.properties에서 trace=true)로 응용 프로그램을 시작하여 "trace" 모드를 활성화할 수 있습니다.이렇게 하면 코어 로거(embedded container, Hibernate 스키마 생성 및 전체 Spring 포트폴리오) 선택에 대한 추적 기록이 가능합니다.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html
언급URL : https://stackoverflow.com/questions/7840088/debugging-spring-configuration
'programing' 카테고리의 다른 글
nginx: 모든 요청을 단일 html 페이지로 보냅니다. (0) | 2023.10.03 |
---|---|
인터페이스 오류:Oracle 환경 핸들을 가져올 수 없습니다. ORACLE_HOME이 올바르고 SQL*Plus가 연결됩니다. (0) | 2023.10.03 |
구문 오류 또는 액세스 위반: 1059 식별자 이름이 너무 깁니다. (0) | 2023.10.03 |
(dom4j를 대체할) 어떤 Java XML 라이브러리를 추천하십니까? (0) | 2023.10.03 |
진자에서 문자열을 목록으로 분할? (0) | 2023.10.03 |