2009-09-04 27 views
8

Tôi chưa thể nhận thêm bất kỳ đầu ra bàn điều khiển nào (để trợ giúp gỡ lỗi) từ Hibernate mặc dù đã đặt một vài thuộc tính trong tệp hibernate.cfg.xml. Ví dụ, việc thêm dòng <property name="show_sql">true</property> không thực sự hiển thị các câu lệnh SQL trong bảng điều khiển.Làm cách nào để nhận thêm thông báo gỡ lỗi từ Hibernate?

Tôi cũng đã thử phát xung quanh với nội dung của tệp log4j.properties - như cài đặt log4j.logger.org.hibernate=debug - không có may mắn. Tôi đang thiếu gì?


Edit: các nội dung của tập tin ngủ đông-service.xml là

<server> 
    <mbean code="org.jboss.hibernate.jmx.Hibernate" 
     name="jboss.har:service=Hibernate_SMS"> 
     <attribute name="DatasourceName">java:/SMS_DS</attribute> 
     <attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute> 
     <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute> 
     <attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute> 
     <attribute name="ShowSqlEnabled">true</attribute> 
    </mbean> 
</server> 

Tôi không chắc chắn 100% nếu điều này thực sự có tác dụng, mặc dù. Tệp XML đó nằm trong dự án Eclipse xử lý các công cụ cơ sở dữ liệu của tôi, nhưng dường như không nằm trong thư mục triển khai JBoss.


Chỉnh sửa 2: này chắc chắn triển khai như một HAR. Điều đó nói rằng, tôi khá chắc chắn rằng tôi cần hibernate.cfg.xml - Tôi nhớ có vấn đề khi một tài liệu lập bản đồ được bỏ qua như là một mục trong tập tin đó. Tôi nghĩ rằng HAR được tạo ra sử dụng kiến ​​- có một mục tiêu cho nó trong file build.xml:

<target name="har" depends="prepare" description="Builds the Hibernate HAR file"> 
    <mkdir dir="${class.root}" /> 
    <mkdir dir="${distribution.dir}" /> 

    <jar destfile="${distribution.dir}/${har.name}">      
     <!-- include the hbm.xml files --> 
     <fileset dir="${class.root}"> 
      <include name="**/*.hbm.xml"/> 
      <include name="com/[redacted]/sms/data/dto/*.class"/> 
      <include name="com/[redacted]/sms/data/dto/base/*.class"/> 
     </fileset> 

     <!-- include jboss-service.xml --> 
     <metainf dir="${hibernate.dir}"> 
      <include name="hibernate-service.xml"/> 
     </metainf> 
    </jar> 
</target> 

nhưng khi tôi làm kiến ​​xây dựng với xml sai-hình thành trong tập tin ngủ đông-service.xml, nó không thất bại. Cập nhật Ngay cả việc xóa hoàn toàn tệp cũng không gây ra lỗi xây dựng. Có ý tưởng nào ở đây không? Cập nhật cuối

Nghe có vẻ như Hibernate để xuất các câu lệnh SQL nên (nếu mọi thứ được thiết lập chính xác) sẽ xử lý hoàn toàn - điều đó có nghĩa là các cài đặt trong log4j.properties sẽ không tạo sự khác biệt ở đây? - bởi vì thực tế hiện thay đổi đầu ra khi chạy ant.

Sửa 3: Sau khi chạy vào các vấn đề khác lạ với dữ liệu của tôi har, tôi đã xóa các tập tin har hoàn toàn và xây dựng lại nó bằng cách sử dụng har kiến ​​xây dựng mục tiêu. Đột nhiên mọi thứ đều hoạt động! Nhờ chơi cờ cho sự hữu ích tuyệt vời của mình. Không thể nói rằng tôi biết chính xác những gì đã làm nó cuối cùng, nhưng tôi muốn thừa nhận những nỗ lực của mình hơn là viết và chấp nhận câu trả lời của riêng tôi; Lời xin lỗi của tôi nếu bạn không phải là "anh ấy".

+0

'hibernate.show_sql' (hoặc, 'ShowSqlEnabled' trong JBoss MBean) không phụ thuộc vào cấu hình khai thác gỗ; nếu được bật, nó sẽ luôn in SQL để điều khiển. Việc đặt 'org.hibernate.SQL = DEBUG' trong cấu hình trình ghi nhật ký thích hợp sẽ thực hiện tương tự nhưng với bất kỳ đầu ra nào được cấu hình cho trình ghi nhật ký. Cả hai phương pháp đều độc lập với nhau (ví dụ: nếu bạn đặt cả hai bạn sẽ nhận được sql được in hai lần) – ChssPly76

Trả lời

10

Tên thuộc tính chính xác là hibernate.show_sql và chắc chắn nó hoạt động.

Đảm bảo rằng hibernate.cfg.xml của bạn là đúng và nó đang được chọn; tương tự với tệp log4j.properties của bạn. Tôi biết những điều đó có vẻ như những lời đề nghị ngớ ngẩn, nhưng chúng chiếm tới 98% các vấn đề "thiếu đăng xuất đầu ra".

Cập nhật: Tôi sẽ cập nhật câu trả lời thay vì tiếp tục thêm nhận xét. Bạn cần đảm bảo rằng bạn đã nhận được hibernate-service.xml bởi JBoss. Cách dễ dàng để kiểm tra là thêm lỗi cú pháp vào nó (giống như bỏ một dấu ngoặc đóng trên một phần tử nào đó) và xem JBoss có nổ tung trong khi khởi động lại :-) Nó phải được đóng gói thành har và được triển khai như một phần của quá trình xây dựng của bạn, nếu bạn nhận ra rằng đó là không phải là đang được JBoss chọn, đó là nơi để xem xét.Tôi sẽ loại bỏ cài đặt xung đột trong hibernate.cfg.xml (ví dụ: mọi thứ bạn chỉ định làm thuộc tính mbean sẽ không được sao chép trong hibernate.cfg.xml). Cho rằng vấn đề, thậm chí bạn cần hibernate.cfg.xml? Nếu được triển khai dưới dạng HAR, ánh xạ của bạn sẽ tự động được quét/chọn.

+0

Tôi có cần đặt mức nhật ký trong log4j.properties không? - Tôi đã tìm thấy lúc đầu, tôi đã làm việc với các bản sao sai của hai tập tin, nhưng chuyển sang dụng cụ với các bản sao chính xác trước khi tôi hỏi ở đây. –

+0

Đặt hibernate.show_sql thành true nên in SQL để điều khiển _irregardless_ của cấu hình ghi nhật ký. Ngoài ra, bạn có thể đặt mức nhật ký 'org.hibernate.SQL' thành DEBUG để chuyển nó sang tệp nhật ký bạn chọn (như được định cấu hình trong cấu hình đăng nhập của bạn) – ChssPly76

+0

Tôi đã thay đổi dòng thành' true 'nhưng vẫn không có gì. : \ –

6

Tôi chỉ sử dụng tệp log4j.properties để ghi nhật ký Hibernate. Đối với câu lệnh SQL, các log4j.logger.org.hibernate.SQL tài sản cần phải được thiết lập để debug, và cho các thông số SQL giá trị/trả lại log4j.logger.org.hibernate.type tài sản cần phải được đặt đến theo dõi.

Dưới đây là file log4j.properties tôi sử dụng:

### direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

### Root logger 
log4j.rootLogger=debug, stdout 

### Main Hibernate 
log4j.logger.org.hibernate=debug 

### log just the SQL 
log4j.logger.org.hibernate.SQL=debug 

### log JDBC bind parameters 
log4j.logger.org.hibernate.type=trace 
+0

Vì lý do gì đó, tệp 'log4j.properties' của tôi dường như không ảnh hưởng đến đầu ra của bàn điều khiển khi JBoss thực sự đang chạy. Tuy nhiên, nó dường như kiểm soát mức đầu ra khi tôi chạy kịch bản xây dựng kiến ​​của tôi. –

1

Ngoài ra hãy shure bạn đang sử dụng đúng log4j-cấu hình.

Khi chạy trong jboss (bạn đang làm điều đó, phải không?), Bạn định cấu hình log4j-logging trong $JBOSS_HOME/server/<config>/conf/jboss-log4j.xml.

Có hai ứng dụng mặc định; FILE ghi vào log/server.logCONSOLE đến stdout (đôi khi được chuyển hướng log/console.log). Điều chỉnh ngưỡng trên appender thành DEBUG trong tệp hoặc bằng cách thiết lập systemproperty jboss.server.log.threshold (phụ thuộc vào phiên bản jboss bạn đang sử dụng).

Bạn cũng sẽ cần phải điều chỉnh ưu tiên khai thác gỗ của Hibernate bằng cách thêm một thể loại:

<category name="org.hibernate"> 
    <priority value="DEBUG"/> 
</category> 
Các vấn đề liên quan