Play Framework 2.0 and Ebean SQL logging
-
16-12-2019 - |
문제
I want to examine what SQL statements are generated by Ebean to find out why certain exceptions (related to SQL syntax) are occurring in my Play 2.0 application. Is there a way to log the SQL statements generated by Ebean in Play Framework 2.0?
In Play 1.x, there is a jpa.debugSQL
config option, which if set to true, will do exactly this. Does a similar setting for Ebean exist for Play 2.0? The documentation page about Ebean of Play 2.0 is still a bit scarce.
What I have tried so far:
I have added these method calls in my controllers and the onStart
/ onRequest
methods of the Global object, but it doesn't have any effect:
Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL);
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(Play.isDev());
I have modified the log levels from application.conf
, but it didn't help either (even with log level TRACE
).
해결책
Sorry to be late to the party, but I use this in development:
db.default.logStatements=true
logger.com.jolbox=DEBUG
Add those two lines to the application.conf and you are good to go.
It outputs all the sql statements. Hope it helps.
다른 팁
You can enable SQL logging by using the following statement
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true);
Use this command in the onRequest interceptor for example
In a next release, you will certainly be able to configure this in the file ebean.properties.
// Tips : use Play.isDev() to log only in dev mode
Also you can get SQL on the spot by using method getGeneratedSQL. Code sample below
Query<PreventionActivity> where = find.where(
and(
and(
ge("Age_FROM", age)
, or(le("Age_TO", age), eq("Age_TO", 0))
)
, or(eq("Gender_CD", genderCd), eq("Gender_CD", "*"))
)
);
List<PreventionActivity> list = where.findList();
Logger.info("sql ");
Logger.info(where.getGeneratedSql());