2012-03-15 33 views
24

Tôi muốn kiểm tra những câu lệnh SQL được tạo ra bởi Ebean để tìm hiểu tại sao một số ngoại lệ nhất định (liên quan đến cú pháp SQL) đang xảy ra trong ứng dụng Play 2.0 của tôi. Có cách nào để ghi lại các câu lệnh SQL được tạo ra bởi Ebean trong Play Framework 2.0 không?Chơi Framework 2.0 và ghi nhật ký SQL của ebay

Trong Play 1.x, có tùy chọn cấu hình jpa.debugSQL, nếu được đặt thành true, sẽ thực hiện chính xác việc này. Có một thiết lập tương tự cho Ebean tồn tại cho Play 2.0 không? Các documentation page about Ebean of Play 2.0 vẫn còn một chút khan hiếm.


Những gì tôi đã cố gắng cho đến nay:

Tôi đã thêm các cuộc gọi phương pháp trong điều khiển của tôi và onStart/onRequest method của đối tượng toàn cầu, nhưng nó không có bất kỳ tác:

Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL); 
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(Play.isDev()); 

Tôi đã sửa đổi cấp độ nhật ký từ application.conf, nhưng không giúp được gì (ngay cả với mức nhật ký TRACE).

Trả lời

53

lỗi cho tôi nếu muộn để đảng, nhưng tôi sử dụng này trong phát triển:

db.default.logStatements=true 

logger.com.jolbox=DEBUG 

Thêm hai dòng để các application.conf và bạn tốt để đi.

Kết quả đầu ra tất cả các câu lệnh sql. Hy vọng nó giúp.

+0

Đẹp, nó hoạt động! –

+0

cảm ơn đã làm việc cho tôi quá! – David

4

Bạn có thể bật SQL đăng nhập bằng cách sử dụng câu lệnh sau

Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true); 

Sử dụng lệnh này trong onRequest chặn ví dụ

Trong một thông cáo hôm sau, bạn chắc chắn sẽ có thể cấu hình này trong file ebean.properties.

// Tips : use Play.isDev() to log only in dev mode 
+0

Cảm ơn. Tôi đã thử đề xuất của bạn (tôi đã thêm câu lệnh trên vào cả hai phương thức 'onStart' và' onRequest' trong đối tượng Toàn cầu của tôi), nhưng tôi vẫn không thấy bất kỳ câu lệnh SQL nào trong nhật ký ứng dụng của mình. – Tommi

+0

Tôi đã không thử trong Play2.0 cuối cùng, tôi sẽ thử lại sớm (RC3 thử nghiệm cuối cùng). Cố gắng thay đổi cấp độ Đăng nhập trong tệp tin application.conf hoặc trong phiên bản AdminLogging. Bạn có sử dụng "mặc định" làm nguồn cơ sở dữ liệu không? –

+0

Có, nguồn dữ liệu "mặc định". Đã cố đặt mức nhật ký trong tệp application.conf và AdminLogging. Rất nhiều công cụ khác xuất hiện trong nhật ký, nhưng than ôi, không có câu lệnh SQL, ngay cả với cấp độ đăng nhập 'TRACE'. – Tommi

0

Ngoài ra, bạn có thể lấy SQL ngay tại chỗ bằng cách sử dụng phương thức getGeneratedSQL. Mẫu mã bên dưới

 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());