Skip to content

SQLのログ出力機能の追加 #69

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 6 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ include::how2entity/index.adoc[leveloffset=+1]
include::metamodel/index.adoc[leveloffset=+1]
include::transaction/index.adoc[leveloffset=+1]
include::event/index.adoc[leveloffset=+1]
include::showsql/index.adoc[leveloffset=+1]
include::release/index.adoc[leveloffset=+1]
23 changes: 22 additions & 1 deletion docs/setup/properties.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,25 @@
| ``sqlmapper.sql-template.encoding``
| ``UTF-8``
| SQLテンプレートのファイルの文字コード。
|===
|===

.SQLログ出力の設定
|===
| キー | デフォルト値 | 説明

| ``sqlmapper.show-sql.enabled``
| ``false``
| 実行するSQLをログ出力するかどうか。``true`` のときログ出力します。

| ``sqlmapper.show-sql.log-level``
| ``DEBUG``
| SQLをログ出力するときのログレベル。Slf4jのログレベル( `TRACE` / `DEBUG` / `INFO` / `WARN` / `ERROR` ) の何れかを指定できます。

| ``sqlmapper.show-sql.bind-param.enabled``
| ``false``
| 実行するSQLのバインド変数をログ出力するかどうか。``true`` のときログ出力します。

| ``sqlmapper.show-sql.bind-param.log-level``
| ``DEBUG``
| SQLのバインド変数をログ出力するときのログレベル。Slf4jのログレベル( `TRACE` / `DEBUG` / `INFO` / `WARN` / `ERROR` ) の何れかを指定できます。
|===
44 changes: 44 additions & 0 deletions docs/showsql/index.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
[[showsql]]
= SQLのログ出力

* 実行するSQLをログ出力したい場合は、プロパティファイルにて機能の有効に設定します。
** 詳細は、<<available_properties,SQLログ出力の設定可能なプロパティ>> を参照して設定変更をしてください。
* クラス `com.github.mygreen.sqlmapper.core.query.SqlLogger` に対してログ出力設定を追加します。
** ログレベルは、プロパティファイルに定義した値と対応する必要があります。
** ログレベルの初期値は、`DEBUG` です。

.SQLのログ出力の有効化
[source,yaml]
----
sqlmapper:
show-sql:
enabled: true # ログ出力機能を有効にします。
bind-param:
enabled: true # バインド変数のログ出力機能を有効にします。
----

.SQLのロガー設定(例.logback.xml)
[source,xml]
----
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>.%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
</appender>

<!-- SQLのログ出力設定 -->
<logger name="com.github.mygreen.sqlmapper.core.query.SqlLogger" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>

<root>
<level value="WARN" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
----
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.github.mygreen.sqlmapper.core.meta.EntityMetaFactory;
import com.github.mygreen.sqlmapper.core.meta.StoredParamMetaFactory;
import com.github.mygreen.sqlmapper.core.naming.NamingRule;
import com.github.mygreen.sqlmapper.core.query.SqlLogger;
import com.github.mygreen.sqlmapper.core.type.ValueTypeRegistry;

import lombok.Getter;
Expand Down Expand Up @@ -87,6 +88,11 @@ public class SqlMapperContext {
*/
private SqlTemplateEngine sqlTemplateEngine;

/**
* SQLログ出力
*/
private SqlLogger sqlLogger;

/**
* トランザクションの伝搬タイプが {@link TransactionDefinition#PROPAGATION_REQUIRES_NEW} のトランザクションテンプレートを作成します。
* <p>ID生成用のトランザクションテンプレートとして使用します。
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package com.github.mygreen.sqlmapper.core;

import com.github.mygreen.sqlmapper.core.util.NameUtils;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
* ストアドプロシージャ/ストアドファンクションの名称を指定するためのクラス。
* <p>スキーマ/カタログを指定する際に利用します。
*
* @version 0.4
* @since 0.3
* @author T.TSUCHIE
*
Expand Down Expand Up @@ -52,4 +55,13 @@ public StoredName withCatalog(String catalog) {
return this;
}

/**
* スキーマ名/カタログ名を考慮したフルネームを取得します。
* @since 0.4
* @return フルネームを取得します。
*/
public String toFullName() {
return NameUtils.tableFullName(name, catalog, schema);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.github.mygreen.sqlmapper.core.config;

import org.slf4j.event.Level;

import lombok.Data;

/**
* SQLをログに出力する設定。
*
* @since 0.4
* @author T.TSUCHIE
*
*/
@Data
public class ShowSqlProperties {

/** SQLのログ出力機能を有効にするかどうか。 */
private boolean enabled;

/** SQL出力時のログレベル */
private Level logLevel;

/** SQLのバインド変数に関するSQLの出力設定 */
private BindParamProperties bindParam;

/**
* SQLログ出力のバインドパラメータ設定
*
* @since 0.4
* @author T.TSUCHIE
*
*/
@Data
public static class BindParamProperties {

/** バインド変数を出力するかどうか */
private boolean enabled;

/** バインド変数出力時のログレベル */
private Level LogLevel;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import javax.sql.DataSource;

import org.slf4j.event.Level;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
Expand All @@ -26,13 +27,15 @@
import com.github.mygreen.sqlmapper.core.SqlMapper;
import com.github.mygreen.sqlmapper.core.SqlMapperContext;
import com.github.mygreen.sqlmapper.core.audit.AuditingEntityListener;
import com.github.mygreen.sqlmapper.core.config.ShowSqlProperties.BindParamProperties;
import com.github.mygreen.sqlmapper.core.dialect.Dialect;
import com.github.mygreen.sqlmapper.core.meta.EntityMetaFactory;
import com.github.mygreen.sqlmapper.core.meta.PropertyMetaFactory;
import com.github.mygreen.sqlmapper.core.meta.StoredParamMetaFactory;
import com.github.mygreen.sqlmapper.core.meta.StoredPropertyMetaFactory;
import com.github.mygreen.sqlmapper.core.naming.DefaultNamingRule;
import com.github.mygreen.sqlmapper.core.naming.NamingRule;
import com.github.mygreen.sqlmapper.core.query.SqlLogger;
import com.github.mygreen.sqlmapper.core.type.ValueTypeRegistry;

/**
Expand Down Expand Up @@ -93,6 +96,7 @@ public SqlMapperContext sqlMapperContext() {
context.setDataSource(dataSource());
context.setJdbcTemplateProperties(jdbcTemplateProperties());
context.setTransactionManager(transactionManager());
context.setSqlLogger(sqlLogger());

return context;

Expand Down Expand Up @@ -137,6 +141,22 @@ public TableIdGeneratorProperties tableIdGeneratorProperties() {
return prop;
}

@Bean
@Description("SQLのログ出力設定")
public ShowSqlProperties showSqlProperties() {

ShowSqlProperties prop = new ShowSqlProperties();
prop.setEnabled(Boolean.parseBoolean(env.getProperty("sqlmapper.show-sql.enabled")));
prop.setLogLevel(Level.valueOf(env.getProperty("sqlmapper.show-sql.log-level").toUpperCase()));

BindParamProperties bindProp = new BindParamProperties();
bindProp.setEnabled(Boolean.parseBoolean(env.getProperty("sqlmapper.show-sql.bind-param.enabled")));
bindProp.setLogLevel(Level.valueOf(env.getProperty("sqlmapper.show-sql.bind-param.log-level").toUpperCase()));
prop.setBindParam(bindProp);

return prop;
}

@Bean
@Description("エンティティの対応クラスからメタ情報を作成するBean。")
public EntityMetaFactory entityMetaFactory() {
Expand Down Expand Up @@ -238,4 +258,10 @@ public AuditingEntityListener auditingEntityListener() {
return new AuditingEntityListener();
}

@Bean
@Description("SQLのログ出力処理")
public SqlLogger sqlLogger() {
return new SqlLogger(showSqlProperties());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ public InsertClause(final int capacity) {
}

/**
* INTO句をSQLに変換します
* INTO句({@literal (col1, col2...)をSQLに変換します
* @return SQL
*/
public String toIntoSql() {
return intoSql.toString();
}

/**
* VALUES句をSQLに変換します。
* VALUES句({@literal values (exp1, exp2, ...)}
* @return SQL
*/
public String toValuesSql() {
Expand Down
Loading