Java: 예기치 않은 로그 메시지의 근본 원인 찾기
예시
데이터 소스 구성이 URL
jdbc:h2:mem:ksch
로 구성된 경우에도 여전히 기본 URLjdbc:h2:mem:testdb
이 사용되고 있습니다.2022-04-02 09:53:26.037 INFO 27600 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory :
Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
JAR 검색
Maven 캐시의 모든 JAR 파일에서 로그 메시지를 검색하는 도구가 있다면 좋을 것입니다. 그리고 그것을 할 수 있는 도구가 있다는 것이 밝혀졌습니다.
https://github.com/Genivia/ugrep
설치
ugrep
는 다양한 운영 체제에서 사용할 수 있습니다. 그러나 사용 가능한 Ubuntu 패키지가 없습니다. 그러나 프로젝트의 Dockerfile은 Ubuntu를 기반으로 합니다. 따라서 여기에서 도구를 수동으로 컴파일하는 데 필요한 단계를 얻을 수 있습니다.sudo apt-get install -y \
nmake \
vim \
git \
clang \
wget \
unzip \
libpcre2-dev \
libz-dev \
libbz2-dev \
liblzma-dev \
liblz4-dev \
libzstd-dev \
git clone https://github.com/Genivia/ugrep
cd ugrep/
./build.sh
sudo make install
검색어
이제 프로젝트의 모든 종속성을 포함하는 Maven 캐시에서 의심스러운 로그 메시지를 검색할 수 있습니다.
$ cd ~/.m2/repository/
$ ugrep -z "Starting embedded database"
Binary file org/springframework/spring-jdbc/5.2.7.RELEASE/spring-jdbc-5.2.7.RELEASE.jar{org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.class} matches
따라서 "spring-jdbc"프로젝트에서 오고 로그 메시지가 발생한 파일과 줄을 검색할 수 있습니다.
https://github.dev/spring-projects/spring-framework/tree/971f665eb1e8cd9e8a0c788a8f5612f815894082/spring-jdbc
면책 조항: 원본 로그 메시지에서 로거 이름을 자세히 살펴보면 검사할 올바른 소스 파일을 더 빨리 찾을 수 있습니다. 하지만 그건 너무 쉽죠?
디버그
소스 코드에서 로그 메시지를 찾은 후 중단점을 설정하고 디버그 모드에서 앱을 시작할 수 있습니다. IDE에서 추가 탐색을 통해 데이터 흐름을 따라가면 문제의 근본 원인을 논리적으로 추론할 수 있습니다.
해결책
이 경우 근본 원인은 자동 구성을 취소한 사용자 지정 데이터 소스인 것으로 밝혀졌습니다.
@Configuration
class BffConfig {
@Bean
public EmbeddedDatabase dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2).addScript("org/springframework/session/jdbc/schema-h2.sql").build();
}
}
솔루션은 사용자 정의 데이터 소스 빌더를 삭제하고 초기화 스크립트를 프로필 구성으로 이동하는 것입니다.
spring:
datasource:
data: classpath:org/springframework/session/jdbc/schema-h2.sql
참조
Searching for a string on multiple zip files
Spring Boot default H2 jdbc connection (and H2 console)
Spring Boot - Loading Initial Data
Reference
이 문제에 관하여(Java: 예기치 않은 로그 메시지의 근본 원인 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/janux_de/java-finding-out-the-root-cause-of-an-unexpected-log-message-2n5g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)