Chcę rejestrować instrukcje SQL w pliku.
Mam następujące właściwości wapplication.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
Kiedy uruchamiam moją aplikację
cmd>mvn spring-boot:run
Widzę instrukcje sql w konsoli, ale nie pojawiają się one w pliku app.log. Plik zawiera tylko podstawowe dzienniki z wiosny.
Co powinienem zrobić, aby wyświetlić instrukcje SQL w pliku dziennika?
logging.level.org.hibernate.type=TRACE
Działa to również na standardowe wyjście:
Aby zarejestrować wartości:
Po prostu dodaj to do
application.properties
.źródło
spring.jpa.properties.hibernate.type=trace
?
zamiast parametrów. Czy to rozwiązanie miało mi je pokazać?To działa dla mnie (YAML):
źródło
Proszę użyć:
źródło
logging.level.org.hibernate.SQL=DEBUG
sprawił, że zadziałało dla mnie i brakowało innych odpowiedzi. Dzięki!jeśli masz plik logback-spring.xml lub coś takiego, dodaj do niego następujący kod
pracuje dla mnie.
Aby uzyskać również zmienne powiązania:
źródło
<appender-ref ref="FILE" />
Ustawienia, których należy unikać
Nie należy używać tego ustawienia:
Problem
show-sql
polega na tym, że instrukcje SQL są drukowane w konsoli, więc nie ma możliwości ich filtrowania, jak to zwykle bywa ze strukturą rejestrowania.Korzystanie z rejestrowania hibernacji
Jeśli dodasz następujący rejestrator w pliku konfiguracyjnym dziennika:
Następnie Hibernacja wydrukuje instrukcje SQL podczas tworzenia JDBC
PreparedStatement
. Dlatego instrukcja będzie rejestrowana przy użyciu symboli zastępczych parametrów:Jeśli chcesz rejestrować wartości parametrów wiązania, dodaj również następujący rejestrator:
Po ustawieniu
BasicBinder
rejestratora zobaczysz, że rejestrowane są również wartości parametrów wiązania:Korzystanie z źródła danych proxy
Źródło danych proxy pozwala na proxy rzeczywistego JDBC
DataSource
, jak pokazano na poniższym diagramie:Możesz zdefiniować
dataSource
fasolę, która będzie używana przez Hibernację w następujący sposób:Zauważ, że
actualDataSource
musi to byćDataSource
zdefiniowany przez pulę połączeń, której używasz w swojej aplikacji.Po włączeniu
datasource-proxy
instrukcja SQl będzie rejestrowana w następujący sposób:źródło
Dla sterownika serwera MS-SQL (sterownik JDBC Microsoft SQL Server).
spróbuj użyć:
w pliku application.properties.
Moją osobistą preferencją jest ustawienie:
Możesz spojrzeć na te linki w celach informacyjnych:
źródło
Według dokumentacji jest to:
źródło
Przetłumaczona zaakceptowana odpowiedź na YAML działa dla mnie
źródło
logging.level.org.hibernate.SQL: TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicBinder: TRACE
Możemy użyć dowolnego z nich w pliku application.properties :
lub
źródło
Jeśli chcesz wyświetlić rzeczywiste parametry użyte do zapytania, możesz użyć
Następnie zauważ, że rzeczywista wartość parametru jest pokazana jako
binding parameter......
źródło
Zaloguj się do standardowego wyjścia
Dodać do
application.properties
Jest to najprostszy sposób na wydrukowanie zapytań SQL, chociaż nie rejestruje parametrów przygotowanych instrukcji. Nie jest to zalecane, ponieważ nie jest to zoptymalizowane środowisko rejestrowania.
Korzystanie ze środowiska rejestrowania
Dodać do
application.properties
Określając powyższe właściwości, wpisy w dziennikach będą wysyłane do skonfigurowanego modułu dołączającego dzienniki, takiego jak log-back lub log4j.
źródło
Jeśli masz problemy z tym ustawieniem i wydaje się, że działa ono czasami, a nie innym razem - zastanów się, czy czasy, w których nie działa, występują podczas testów jednostkowych.
Wiele osób deklaruje niestandardowe właściwości czasu testu za pomocą
@TestPropertySources
adnotacji zadeklarowanej gdzieś w hierarchii dziedziczenia testu. Spowoduje to zastąpienie wszystkiego, co wprowadzisz w ustawieniachapplication.properties
produkcyjnych lub innych właściwościach produkcyjnych, dzięki czemu te wartości, które ustawiasz, są skutecznie ignorowane podczas testowania.źródło
Wstawienie
spring.jpa.properties.hibernate.show_sql=true
application.properties nie zawsze pomagało.Możesz spróbować dodać
properties.put("hibernate.show_sql", "true");
do właściwości konfiguracji bazy danych.źródło
Musisz tylko ustawić
źródło