# Query Logging

본 문서에서는 log4jdbc 를 이용한 쿼리 로깅 방법에 대하여 기술합니다.

## log4jdbc 라이브러리 추가

* pom.xml 파일에 log4jdbc 라이브러리 의존성을 추가합니다.

{% code title="pom.xml" %}

```xml
<dependencies>
    ....
    <dependency>
        <groupId>org.bgee.log4jdbc-log4j2</groupId>
        <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
        <version>1.16</version>
    </dependency>
</dependencies>
```

{% endcode %}

* Gradle 사용 시 build.gradle에 의존성 추가:

{% code title="build.gradle" %}

```gradle
dependencies {
    ....
    implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
}
```

{% endcode %}

## log4jdbc 설정 파일 추가

* resources 폴더 하위에 **log4jdbc.log4j2.properties** 파일명으로 설정 파일을 추가합니다.

{% code title="log4jdbc.log4j2.properties" %}

```
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
```

{% endcode %}

## DB 연결 정보 수정

* driver-class-name에 다음을 추가합니다:
  * net.sf.log4jdbc.sql.jdbcapi.DriverSpy
* URL에 log4jdbc를 추가합니다.

예시 application.yml:

{% code title="application.yml" %}

```yaml
spring:
  config:
    datasource:
      testdb:
        url: dbc:log4jdbc:postgresql://xxx.xx.xx.xx:xxxx:xxxx
        driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
```

{% endcode %}

## logback 설정에 관련 로거 추가

log4jdbc 로그를 제어하기 위해 logback 설정 파일에 아래 로거들을 추가합니다. (파일명은 환경에 따라 logback.xml 또는 logback.yml을 사용)

{% code title="logback.yml / logback.xml (예시)" %}

```xml
<!-- log4jdbc 옵션 설정 -->
<logger name="jdbc" level="off"/>

<!-- 커넥션 open close 이벤트 로그로 남김 -->
<logger name="jdbc.connection" level="off"/>

<!-- SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여짐 -->
<logger name="jdbc.sqlonly" level="off"/>

<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함 -->
<logger name="jdbc.sqltiming" level="debug"/>

<!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남김. 방대한 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않음-->
<logger name="jdbc.audit" level="off"/>

<!-- ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 방대한 양의 로그가 생성됨 -->
<logger name="jdbc.resultset" level="off"/>

<!-- SQL 결과 조회된 데이터의 table을 로그로 남김 -->
<logger name="jdbc.resultsettable" level="debug"/>
```

{% endcode %}

(위 설정에서 level 값은 필요에 따라 조정해서 사용하세요. 일부 로거는 대량의 로그를 생성하므로 운영 환경에서는 주의가 필요합니다.)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tech.x2bee.com/dev-guide/pjt-prepare/framework/query-logging.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
