Saya ingin mencatat pernyataan SQL dalam file.
Saya memiliki properti berikut diapplication.properties
spring.datasource.url=...
spring.datasource.username=user
spring.datasource.password=1234
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
security.ignored=true
security.basic.enabled=false
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.file=c:/temp/my-log/app.log
Ketika saya menjalankan aplikasi saya
cmd>mvn spring-boot:run
Saya bisa melihat pernyataan sql di konsol tetapi tidak muncul di file app.log. File hanya berisi log dasar dari pegas.
Apa yang harus saya lakukan untuk melihat pernyataan sql dalam file log?
logging.level.org.hibernate.type=TRACE
Ini juga berfungsi untuk stdout:
Untuk mencatat nilai:
Cukup tambahkan ini ke
application.properties
.sumber
spring.jpa.properties.hibernate.type=trace
?
parameter saja. Apakah solusi itu seharusnya menunjukkannya kepada saya?Ini bekerja untuk saya (YAML):
sumber
Mohon gunakan:
sumber
logging.level.org.hibernate.SQL=DEBUG
membuatnya bekerja untuk saya dan tidak ada jawaban lain. Terima kasih!jika Anda memiliki logback-spring.xml atau sesuatu seperti itu, tambahkan kode berikut untuk itu
bekerja untukku.
Untuk mendapatkan variabel ikat juga:
sumber
<appender-ref ref="FILE" />
Pengaturan yang harus dihindari
Anda seharusnya tidak menggunakan pengaturan ini:
Masalahnya
show-sql
adalah bahwa pernyataan SQL dicetak di konsol, jadi tidak ada cara untuk memfilternya, seperti yang biasanya Anda lakukan dengan kerangka Logging.Menggunakan Hibernate logging
Di file konfigurasi log Anda, jika Anda menambahkan logger berikut:
Kemudian, Hibernate akan mencetak pernyataan SQL ketika JDBC
PreparedStatement
dibuat. Itu sebabnya pernyataan akan dicatat menggunakan penampung parameter:Jika Anda ingin mencatat nilai parameter bind, tambahkan juga logger berikut:
Setelah Anda mengatur
BasicBinder
logger, Anda akan melihat bahwa nilai parameter bind juga dicatat:Menggunakan sumber data-proxy
Data -proxy-proksi memungkinkan Anda untuk mem-proxy JDBC yang sebenarnya
DataSource
, seperti yang diilustrasikan oleh diagram berikut:Anda bisa mendefinisikan
dataSource
kacang yang akan digunakan oleh Hibernate sebagai berikut:Perhatikan bahwa
actualDataSource
harusDataSource
ditentukan oleh kumpulan koneksi yang Anda gunakan dalam aplikasi Anda.Setelah Anda mengaktifkan
datasource-proxy
, pernyataan SQl akan dicatat sebagai berikut:sumber
Untuk pengandar server MS-SQL (Microsoft SQL Server JDBC Driver).
coba gunakan:
dalam file application.properties Anda.
Preferensi pribadi saya adalah untuk mengatur:
Anda dapat melihat tautan ini untuk referensi:
sumber
Menurut dokumentasi itu adalah:
sumber
Jawaban yang diterima yang diterjemahkan ke YAML bekerja untuk saya
sumber
logging.level.org.hibernate.SQL: TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
Kita dapat menggunakan salah satu dari ini di file application.properties :
atau
sumber
Jika Anda ingin melihat parameter aktual yang digunakan untuk kueri, Anda dapat menggunakan
Kemudian perhatikan bahwa nilai parameter aktual ditampilkan sebagai
binding parameter......
sumber
Masuk ke output standar
Tambahkan
application.properties
Ini cara termudah untuk mencetak kueri SQL meskipun tidak mencatat parameter pernyataan yang disiapkan. Dan ini tidak direkomendasikan karena tidak seperti kerangka logging yang dioptimalkan.
Menggunakan Logging Framework
Tambahkan
application.properties
Dengan menentukan properti di atas, entri log akan dikirim ke appender log yang dikonfigurasi seperti log-back atau log4j.
sumber
Jika Anda mengalami masalah dengan pengaturan ini dan sepertinya berfungsi kadang-kadang dan tidak di waktu lain - pertimbangkan jika waktu di mana itu tidak berhasil adalah selama unit test.
Banyak orang menyatakan properti waktu pengujian khusus melalui
@TestPropertySources
anotasi yang dinyatakan di suatu tempat di hierarki warisan pengujian Anda. Ini akan mengesampingkan apa pun yang Anda masukkan keapplication.properties
pengaturan properti produksi Anda atau lainnya sehingga nilai-nilai yang Anda setel secara efektif diabaikan pada saat pengujian.sumber
Menempatkan
spring.jpa.properties.hibernate.show_sql=true
di application.properties tidak selalu membantu.Anda dapat mencoba menambahkan
properties.put("hibernate.show_sql", "true");
properti konfigurasi database.sumber
Anda hanya perlu mengatur
sumber