Skip to content

Commit ad1d404

Browse files
authored
feat(GH-226): Support logging of the generated JPQL query string with debug log level (#227)
* feat: Added JPQL query string debug logging * fix: removed canAccess check for Java 8 support * fix: enable DEBUG logging level for Merge example app * fix: polish log output formatting * fix: Enabled JPQL query string debug logging for test coverage
1 parent b235ee8 commit ad1d404

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

graphql-jpa-query-example-merge/src/main/resources/application.yml

+4
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,7 @@ books:
3131
username: sa
3232
password:
3333
driverClassName: org.h2.Driver
34+
35+
logging:
36+
level:
37+
com.introproventures.graphql.jpa.query.schema: DEBUG

graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaQueryDataFetcher.java

+28
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@
3030
import javax.persistence.criteria.Root;
3131
import javax.persistence.metamodel.EntityType;
3232

33+
import org.slf4j.Logger;
34+
import org.slf4j.LoggerFactory;
35+
36+
import com.introproventures.graphql.jpa.query.introspection.ReflectionUtil;
37+
3338
import graphql.language.Argument;
3439
import graphql.language.BooleanValue;
3540
import graphql.language.Field;
@@ -44,6 +49,8 @@
4449
*
4550
*/
4651
class GraphQLJpaQueryDataFetcher extends QraphQLJpaBaseDataFetcher {
52+
53+
private final static Logger logger = LoggerFactory.getLogger(GraphQLJpaQueryDataFetcher.class);
4754

4855
private boolean defaultDistinct = true;
4956

@@ -125,6 +132,9 @@ public Object get(DataFetchingEnvironment environment) {
125132
if(isDistinct) {
126133
query.setHint(HIBERNATE_QUERY_PASS_DISTINCT_THROUGH, false);
127134
}
135+
if (logger.isDebugEnabled()) {
136+
logger.info("\nGraphQL JPQL Query String:\n {}", getJPQLQueryString(query));
137+
}
128138

129139
// Let's execute query
130140
List<?> resultList = query.getResultList();
@@ -239,4 +249,22 @@ public Page(Integer page, Integer size) {
239249
}
240250
}
241251

252+
protected String getJPQLQueryString(TypedQuery<?> query) {
253+
try {
254+
Object queryImpl = query.unwrap(TypedQuery.class);
255+
256+
java.lang.reflect.Field queryStringField = ReflectionUtil.getField(queryImpl.getClass(),
257+
"queryString");
258+
259+
ReflectionUtil.forceAccess(queryStringField);
260+
261+
return queryStringField.get(queryImpl)
262+
.toString();
263+
264+
} catch (Exception ignored) {
265+
logger.error("Error getting JPQL string", ignored);
266+
}
267+
268+
return null;
269+
}
242270
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
logging.level.com.introproventures.graphql.jpa.query.schema=DEBUG

0 commit comments

Comments
 (0)