2010-03-29 39 views
12

Tôi đang tạo mô-đun bổ sung cho dự án maven đa mô-đun. Và với điều này, tôi muốn mọi thứ giống như trong các mô-đun khác (có nghĩa là phụ thuộc) chỉ để kiểm tra thế giới hello, sau đó tôi sẽ làm một số thứ phức tạp hơn. Và nó in hello thế giới như nó nên khi triển khai vào máy chủ jboss, nhưng tôi nhận được một số lỗi lạ trên console, có ai có kinh nghiệm tương tự? và làm thế nào tôi có thể sửa nó? Ở đây là:Lỗi giao diện điều khiển lạ jboss

15:48:35,789 ERROR [STDERR] log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a "org.apache.log4j.Appender" variable. 
15:48:35,789 ERROR [STDERR] log4j:ERROR The class "org.apache.log4j.Appender" was loaded by 
15:48:35,790 ERROR [STDERR] log4j:ERROR [[email protected]{vfszip:/C:/jboss-5.1.0.GA/server/default/deploy/new-module-0.0.1-SNAPSHOT.war/}] whereas object of type 
15:48:35,790 ERROR [STDERR] log4j:ERROR "org.jboss.logging.appender.FileAppender" was loaded by [[email protected]]. 
15:48:35,790 ERROR [STDERR] log4j:ERROR Could not instantiate appender named "FILE". 

đây là một phần của appender xml

http://pastebin.com/X7Dgdrki

Trả lời

16

Trước tiên kiểm tra <server>/conf/jboss-log4j.xml của bạn cho cấu hình của appender tên FILE (và đăng nó ở đây nếu bạn có thể - mà có thể cung cấp cho chúng tôi nhiều manh mối hơn).

Điều tra thêm cho thấy rằng org.jboss.logging.appender.FileAppender thực sự triển khai giao diện org.apache.log4j.Appender. Vì vậy, đây rõ ràng là một xung đột bộ nạp lớp. Cùng một định nghĩa lớp (trong trường hợp này là org.apache.log4j.Appender), khi được nạp bởi hai trình nạp lớp khác nhau, được tính là hai lớp riêng biệt cho JVM.

Có bao gồm log4j.jar trong chiến tranh của bạn hay trong thư mục máy chủ/lib của bạn không? Nếu có, bạn có thể thử xóa nó và xem liệu nó có giải quyết được vấn đề hay không.

Cập nhật: Thực ra giải pháp đơn giản nhất có thể là chỉ cần thay đổi loại trình phụ thành org.apache.log4j.FileAppender trong tệp jboss-log4j.xml.

Về log4j.jar, ý tôi là nếu nó có mặt trong chiến tranh của bạn, nó (và một bản sao của org.apache.log4j.Appender) được tải bởi bộ nạp lớp chiến tranh ([email protected] trong thông báo lỗi của bạn). Và điều này gây ra xung đột bộ nạp lớp. Vì vậy, nếu bạn không triển khai log4j.jar với chiến tranh của bạn, lỗi có thể biến mất. Điều này liên quan đến Maven chỉ trong đó phụ thuộc được cấu hình trong pom của bạn. Đối với thử nghiệm nhỏ này, bạn có thể chỉ cần xóa log4j.jar khỏi chiến tranh của bạn bằng tay; nếu điều này giải quyết vấn đề này, cấu hình phụ thuộc log4j trong pom của bạn là "cung cấp", ví dụ:

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.12</version> 
     <scope>provided</scope> 
    </dependency> 

Nếu log4j.jar không có trong chiến tranh của bạn, nó vẫn có thể là trong các máy chủ/default thư mục/lib - hãy kiểm tra và nếu nó ở đó, hãy thử gỡ bỏ nó.

+0

@ Péter Török cảm ơn câu trả lời của bạn Tôi đã cập nhật câu hỏi của mình, tôi đang xây dựng dự án với maven nên tôi không gặp vấn đề gì với các bình .. – ant

+0

@ c0mrade xem cập nhật của tôi. –

+1

thêm được cung cấp đã thực hiện thủ thuật, quan tâm giải thích tại sao? – ant

3

Gần đây, chúng tôi đã gặp phải vấn đề này. Chúng tôi đã thử các đề xuất ở trên và chúng không hoạt động. Vì vậy, chúng tôi đã xử lý vấn đề này bằng cách thay thế tất cả nhập khẩu log4j bằng giao diện ghi nhật ký trừu tượng (chúng tôi đã chọn org.apache.commons.logging cho việc này) và xóa log4j khỏi depdenancies. Sau đó, những gì xảy ra là việc thực hiện đăng nhập cơ bản thực sự hỗ trợ bất cứ điều gì JBoss đã thiết lập. Và nếu chúng ta muốn quay trở lại Tomcat (không có JBoss), chúng ta có thể thêm jar log4j hoặc bất kỳ việc thực hiện logger nào trở lại vào cuộc chiến.

Các vấn đề liên quan