Tidak ada solusi yang memberikan hasil bagi saya. Saya menulis ini hanya untuk memberi tahu semua orang betapa saya putus asa.
Andrea
Jawaban:
131
Pengaturan
datasource {
...
logSql = true
}
di DataSource.groovy (sesuai petunjuk ini ) sudah cukup untuk membuatnya berfungsi di lingkungan saya. Tampaknya bagian dari FAQ sudah usang (mis. Pertanyaan "banyak-ke-banyak kolom mundur") jadi ini mungkin juga sesuatu yang berubah untuk sementara.
logSql=truesaja tidak cukup. Hibernate logging juga harus diaktifkan. Lihat jawaban @ Pete.
Jason
2
Saya telah memperhatikan bahwa ini tidak termasuk nilai-nilai yang masuk dalam pernyataan SQL di mana "?" Berada.
Jason
1
Ini berfungsi, tetapi untuk semua kueri. Apakah mungkin juga untuk mencetak sql yang dihasilkan untuk Kriteria tertentu tanpa harus menyetel logSql = true?
Agustus
@Guus bagaimana cara mencetak sql yang dihasilkan untuk Kriteria tertentu?
biniam
@biniam_Ethiopia Sejauh yang saya tahu, ini tidak mungkin. Saya ingin ini juga mengganggu untuk men-debug kelas tertentu dan tidak ingin melihat kueri lain juga.
Agustus
91
Saya merasa lebih berguna untuk melakukan hal berikut, yaitu mengaktifkan logging Hibernate untuk mencatat SQL bersama dengan variabel bind (sehingga Anda dapat melihat nilai yang diteruskan ke panggilan Anda, dan dengan mudah mereplikasi SQL di editor Anda atau sebaliknya).
Di Anda Config.groovy, tambahkan yang berikut ini ke blok log4j Anda:
log4j = {
// Enable Hibernate SQL logging with param valuestrace'org.hibernate.type'
debug 'org.hibernate.SQL'
//the rest of your logging config
// ...
}
Saya telah menggunakan ini berkali-kali. Satu hal yang perlu diperhatikan: mengeluarkan parameter sangat mahal. Saya akan merekomendasikan melakukan ini hanya di kotak dev Anda.
John Gordon
2
Anda juga dapat menambahkan format_sql = trueke dalam hibernateblok Anda DataSource.groovyuntuk keluaran yang diformat dengan baik.
Gregor Petrin
1
Catatan: Ini akan mencatat baik di mana parameter klausa dan nilai kolom diekstrak dari kumpulan hasil kueri. Untuk mencatat hanya di mana parameter klausa, gunakantrace 'org.hibernate.type.BasicBinder'
GreenGiant
Adakah yang tahu padanan untuk grails 3.3.8?
John Little
Untuk beberapa alasan, kueri yang tidak valid secara sintaksis (yang dibuat oleh Hibernate sendiri, sayangnya!) Tidak dicatat - semua kueri lain dicatat ... Mungkinkah ada masalah dengan Hibernate itu sendiri?
Ini menghindari masalah kinerja pelacakan logging typepaket Hibernate . Ini berfungsi dengan Hibernate 3.6 dan yang lebih baru. Saya mendapatkan ini dari: https://burtbeckwith.com/blog/?p=1604
Semua jawaban di atas berfungsi dan benar. Tapi mereka tidak menampilkan kueri lengkap dengan cara yang mudah dibaca manusia. Jika ingin melihat kueri akhir (tanpa?,?), Anda memiliki dua opsi.
A) proxy koneksi jdbc Anda dengan log4jdbc atau p6Spy.
B) melihatnya di tingkat database. Misalnya sangat mudah dilakukan dengan mysql.
Cari tahu di mana Anda general_log_file berada. Log umum aktif jika belum diaktifkan.
mysql command line> showvariableslike"%general_log%";
mysql command line> setglobal general_log = true;
Sekarang semuanya sudah masuk ke file log Anda. Contoh Mac / linux untuk menunjukkan aliran kueri Anda yang bagus.
Murni untuk referensi saja, tetapi saya menggunakan p6spy untuk mencatat kueri SQL. Ini adalah driver jdbc menengah kecil. Kueri yang tepat dicatat seperti yang akan dikirim ke server (dengan parameter disertakan).
sertakan dalam proyek Anda:
runtime 'p6spy:p6spy:3.0.0'
Ubah driver sumber data Anda:
driverClassName: com.p6spy.engine.spy.P6SpyDriver
Dan url jdbc Anda:
url: jdbc:p6spy:mysql://
Konfigurasikan menggunakan spy.properties (di grails-app / conf).
Saya tahu ini telah ditanyakan dan dijawab sejak lama. Tetapi saya kebetulan melihat pertanyaan ini dan tidak dapat menahan diri untuk menjawab atau membagikan pendekatan implementasi sql logging kami dalam proyek kami. Semoga bisa membantu.
Saat ini dalam lingkungan pembangunan. Kami menggunakan "log4jdbc Driver Spy" untuk log sql.
Konfigurasi:
Di BuildConfig.groovy Anda: tambahkan dependensi di bawah ini:
Dari pengalaman pribadi saya, saya merasa cukup berguna dan membantu saat debugging. Juga informasi lebih lanjut dapat Anda temukan di situs ini. https://code.google.com/p/log4jdbc-remix/
Ini adalah variasi dari banyak solusi di atas, tetapi memungkinkan Anda mengubah nilai pada waktu proses. Dan seperti solusi lain yang mengatasinya logToStdouthanya menampilkan kueri dan bukan nilai mengikat.
Ide itu dicuri dari burtbeckdengan posting yang saya baca beberapa tahun yang lalu yang tidak dapat saya temukan sekarang. Ini telah diedit untuk bekerja dengan grails 3.3.
Teknik serupa dapat digunakan untuk mengaktifkan logging untuk pengujian integrasi tertentu:
Jawaban:
Pengaturan
di DataSource.groovy (sesuai petunjuk ini ) sudah cukup untuk membuatnya berfungsi di lingkungan saya. Tampaknya bagian dari FAQ sudah usang (mis. Pertanyaan "banyak-ke-banyak kolom mundur") jadi ini mungkin juga sesuatu yang berubah untuk sementara.
sumber
logSql=true
saja tidak cukup. Hibernate logging juga harus diaktifkan. Lihat jawaban @ Pete.Saya merasa lebih berguna untuk melakukan hal berikut, yaitu mengaktifkan logging Hibernate untuk mencatat SQL bersama dengan variabel bind (sehingga Anda dapat melihat nilai yang diteruskan ke panggilan Anda, dan dengan mudah mereplikasi SQL di editor Anda atau sebaliknya).
Di Anda
Config.groovy
, tambahkan yang berikut ini ke blok log4j Anda:log4j = { // Enable Hibernate SQL logging with param values trace 'org.hibernate.type' debug 'org.hibernate.SQL' //the rest of your logging config // ... }
sumber
format_sql = true
ke dalamhibernate
blok AndaDataSource.groovy
untuk keluaran yang diformat dengan baik.trace 'org.hibernate.type.BasicBinder'
Untuk grails 3. *
Opsi # 1 tambahkan berikut ini ke logback.groovy
atau
Opsi # 2 tambahkan berikut ini ke dataSource di application.yml. Namun pendekatan ini tidak mencatat nilai parameter
sumber
Coba ini:
Ini menghindari masalah kinerja pelacakan logging
type
paket Hibernate . Ini berfungsi dengan Hibernate 3.6 dan yang lebih baru. Saya mendapatkan ini dari: https://burtbeckwith.com/blog/?p=1604sumber
Solusi hanya untuk pengembangan, bukan produksi.
Semua jawaban di atas berfungsi dan benar. Tapi mereka tidak menampilkan kueri lengkap dengan cara yang mudah dibaca manusia. Jika ingin melihat kueri akhir (tanpa?,?), Anda memiliki dua opsi.
A) proxy koneksi jdbc Anda dengan log4jdbc atau p6Spy.
B) melihatnya di tingkat database. Misalnya sangat mudah dilakukan dengan mysql.
Cari tahu di mana Anda general_log_file berada. Log umum aktif jika belum diaktifkan.
mysql command line> show variables like "%general_log%"; mysql command line> set global general_log = true;
Sekarang semuanya sudah masuk ke file log Anda. Contoh Mac / linux untuk menunjukkan aliran kueri Anda yang bagus.
sumber
Murni untuk referensi saja, tetapi saya menggunakan p6spy untuk mencatat kueri SQL. Ini adalah driver jdbc menengah kecil. Kueri yang tepat dicatat seperti yang akan dikirim ke server (dengan parameter disertakan).
sertakan dalam proyek Anda:
Ubah driver sumber data Anda:
Dan url jdbc Anda:
Konfigurasikan menggunakan spy.properties (di grails-app / conf).
Jangan lupa untuk menonaktifkan ini untuk produksi!
sumber
Berikutnya bekerja untuk saya:
grails-app / conf / application.yml
# ... hibernate: format_sql: true # <<<<<<< ADD THIS <<<<<<< cache: queries: false use_second_level_cache: true # ... environments: development: dataSource: logSql: true // <<<<<<< ADD THIS <<<<<<< dbCreate: create-drop url: jdbc:h2:mem:... # ...
grails-app / conf / logback.groovy
// ... appender('STDOUT', ConsoleAppender) { encoder(PatternLayoutEncoder) { pattern = "%level %logger - %msg%n" } } // >>>>>>> ADD IT >>>>>>> logger 'org.hibernate.type.descriptor.sql.BasicBinder', TRACE, ['STDOUT'] logger 'org.hibernate.SQL', TRACE, ['STDOUT'] // <<<<<<< ADD IT <<<<<<< root(ERROR, ['STDOUT']) def targetDir = BuildSettings.TARGET_DIR // ...
Sumber: http://sergiodelamo.es/log-sql-grails-3-app/
sumber
Saya tahu ini telah ditanyakan dan dijawab sejak lama. Tetapi saya kebetulan melihat pertanyaan ini dan tidak dapat menahan diri untuk menjawab atau membagikan pendekatan implementasi sql logging kami dalam proyek kami. Semoga bisa membantu.
Saat ini dalam lingkungan pembangunan. Kami menggunakan "log4jdbc Driver Spy" untuk log sql.
Konfigurasi:
Di BuildConfig.groovy Anda: tambahkan dependensi di bawah ini:
Dan di Sumber Data Anda atau konfigurasi lain yang terkait: [di mana pun Anda telah menentukan konfigurasi terkait sumber data], Tambahkan:
Dari pengalaman pribadi saya, saya merasa cukup berguna dan membantu saat debugging. Juga informasi lebih lanjut dapat Anda temukan di situs ini. https://code.google.com/p/log4jdbc-remix/
Salam Raja
sumber
Untuk Blok kode tertentu kita juga dapat membuat metode yang menerima penutupan. misalnya.
sumber
Jika Anda telah menginstal plugin konsol , Anda bisa mendapatkan sql logging dengan potongan kode kecil ini.
Ini adalah variasi dari banyak solusi di atas, tetapi memungkinkan Anda mengubah nilai pada waktu proses. Dan seperti solusi lain yang mengatasinya
logToStdout
hanya menampilkan kueri dan bukan nilai mengikat.Ide itu dicuri dari burtbeckdengan posting yang saya baca beberapa tahun yang lalu yang tidak dapat saya temukan sekarang. Ini telah diedit untuk bekerja dengan grails 3.3.
Teknik serupa dapat digunakan untuk mengaktifkan logging untuk pengujian integrasi tertentu:
Ini akan mengaktifkan sql logging hanya untuk tes dalam satu file ini.
sumber