Skip to content

Commit f3c313a

Browse files
authored
Add logging filter support for datasource-proxy (#149)
1 parent de7bd4c commit f3c313a

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public ConnectionIdManagerProvider connectionIdManagerProvider() {
187187
```
188188
You can configure logging, query/slow query listeners and more using your `application.properties`:
189189
> [!NOTE]
190-
> Configuration below indicates al possible parameters together with their default values and **does not** need to be set explicitly
190+
> Configuration below indicates all possible parameters together with their default values and **does not** need to be set explicitly
191191
```properties
192192
# One of logging libraries (slf4j, jul, common, sysout)
193193
decorator.datasource.datasource-proxy.logging=slf4j
@@ -214,6 +214,14 @@ decorator.datasource.datasource-proxy.json-format=false
214214
decorator.datasource.datasource-proxy.count-query=false
215215
```
216216

217+
Optionally, configure a `LoggingFilter` to control the output of query logging:
218+
```java
219+
@Bean
220+
public LoggingFilter loggingFilter() {
221+
return MyLoggingFilter();
222+
}
223+
```
224+
217225
#### Flexy Pool
218226

219227
If the `flexy-pool-spring-boot-starter` is added to the classpath your datasource will be wrapped to the `FlexyPoolDataSource`.

datasource-decorator-spring-boot-autoconfigure/src/main/java/com/github/gavlyukovskiy/boot/jdbc/decorator/dsproxy/ProxyDataSourceBuilderConfigurer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import net.ttddyy.dsproxy.listener.QueryCountStrategy;
2121
import net.ttddyy.dsproxy.listener.QueryExecutionListener;
2222
import net.ttddyy.dsproxy.listener.logging.CommonsLogLevel;
23+
import net.ttddyy.dsproxy.listener.logging.LoggingFilter;
2324
import net.ttddyy.dsproxy.listener.logging.SLF4JLogLevel;
2425
import net.ttddyy.dsproxy.proxy.ResultSetProxyLogicFactory;
2526
import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
@@ -70,6 +71,9 @@ public class ProxyDataSourceBuilderConfigurer {
7071
@Autowired(required = false)
7172
ProxyDataSourceBuilder.FormatQueryCallback formatQueryCallback;
7273

74+
@Autowired(required = false)
75+
private LoggingFilter loggingFilter;
76+
7377
public void configure(ProxyDataSourceBuilder proxyDataSourceBuilder, DataSourceProxyProperties datasourceProxy) {
7478
var query = datasourceProxy.getQuery();
7579
var slowQuery = datasourceProxy.getSlowQuery();
@@ -126,6 +130,10 @@ public void configure(ProxyDataSourceBuilder proxyDataSourceBuilder, DataSourceP
126130
log.warn("Found opposite format-sql and json format, json format will be used (may depend on library version)");
127131
}
128132

133+
if (loggingFilter != null) {
134+
proxyDataSourceBuilder.loggingFilter(loggingFilter);
135+
}
136+
129137
if (datasourceProxy.isMultiline()) {
130138
proxyDataSourceBuilder.multiline();
131139
}

datasource-decorator-spring-boot-autoconfigure/src/test/java/com/github/gavlyukovskiy/boot/jdbc/decorator/dsproxy/ProxyDataSourceConfigurationTests.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323
import net.ttddyy.dsproxy.QueryInfo;
2424
import net.ttddyy.dsproxy.listener.ChainListener;
2525
import net.ttddyy.dsproxy.listener.QueryExecutionListener;
26+
import net.ttddyy.dsproxy.listener.logging.AbstractQueryLoggingListener;
2627
import net.ttddyy.dsproxy.listener.logging.CommonsQueryLoggingListener;
2728
import net.ttddyy.dsproxy.listener.logging.CommonsSlowQueryListener;
2829
import net.ttddyy.dsproxy.listener.logging.JULQueryLoggingListener;
2930
import net.ttddyy.dsproxy.listener.logging.JULSlowQueryListener;
31+
import net.ttddyy.dsproxy.listener.logging.LoggingFilter;
3032
import net.ttddyy.dsproxy.listener.logging.SLF4JQueryLoggingListener;
3133
import net.ttddyy.dsproxy.listener.logging.SLF4JSlowQueryListener;
3234
import net.ttddyy.dsproxy.listener.logging.SystemOutQueryLoggingListener;
@@ -227,6 +229,19 @@ void testCustomConnectionIdManager() {
227229
});
228230
}
229231

232+
@Test
233+
void testCustomLoggingFilter() {
234+
ApplicationContextRunner contextRunner = this.contextRunner.withUserConfiguration(CustomLoggingFilterConfiguration.class);
235+
236+
contextRunner.run(context -> {
237+
DataSource dataSource = context.getBean(DataSource.class);
238+
ProxyDataSource proxyDataSource = (ProxyDataSource) ((DecoratedDataSource) dataSource).getDecoratedDataSource();
239+
LoggingFilter loggingFilter = context.getBean(LoggingFilter.class);
240+
var queryListener = findListener(proxyDataSource, AbstractQueryLoggingListener.class);
241+
assertThat(queryListener.getLoggingFilter()).isSameAs(loggingFilter);
242+
});
243+
}
244+
230245
@Configuration(proxyBeanMethods = false)
231246
static class CustomDataSourceProxyConfiguration {
232247

@@ -264,4 +279,13 @@ public void afterQuery(ExecutionInfo execInfo, List<QueryInfo> queryInfoList) {
264279
};
265280
}
266281
}
282+
283+
@Configuration(proxyBeanMethods = false)
284+
static class CustomLoggingFilterConfiguration {
285+
286+
@Bean
287+
public LoggingFilter loggingFilter() {
288+
return (execInfo, queryInfoList) -> true;
289+
}
290+
}
267291
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[versions]
22
spring-boot = "3.5.3"
33
p6Spy = "3.9.1"
4-
datasource-proxy = "1.10.1"
4+
datasource-proxy = "1.11.0"
55
flexy-pool = "3.0.2"
66

77
[libraries]

0 commit comments

Comments
 (0)