2013-07-03 37 views
7

Tôi gặp sự cố với đăng nhập. Tôi thiết lập nó (sử dụng maven) và mọi thứ có vẻ tốt, ngoại trừ các báo cáo Logback nó không thể tìm thấy tập tin cấu hình (nhưng tôi có thể đăng nhập vào giao diện điều khiển bằng cách sử dụng cấu hình logger mặc định).Đăng nhập không thể tìm thấy logback.xml mặc dù nó tồn tại (trên đường dẫn lớp)

[# | 2013-07-03T07: 55: 30.843 + 0200 | INFO | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 124; _ThreadName = Thread-2; | 07: 54: 39,844 | -INFO trong ch.qos.logback.classic.LoggerContext [mặc định] - KHÔNG tìm thấy tài nguyên [logback.groovy]

07: 54: 39,844 | -INFO in ch.qos.logback.classic.LoggerContext [mặc định] - KHÔNG thể tìm thấy tài nguyên [logback-test.xml]

07: 54: 39,844 | -INFO trong ch.qos.logback.classic.LoggerContext [default] - KHÔNG thể tìm thấy tài nguyên [logback.xml]

07: 54: 39,847 | -INFO trong ch.qos.logback.classic.LoggerContext [mặc định] - Thiết lập cấu hình mặc định. | #]

tôi đặt các tập tin cấu hình (gọi là logback.xml) vào thư mục src/main/resources artifact Maven của tôi (mà là một WAR). Điều thú vị là, nếu tôi cố gắng để nạp cấu hình từ classpath, tôi thành công:

Reader r = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("logback.xml")); 
StringWriter sw = new StringWriter(); 
char[] buffer = new char[1024]; 
for (int n; (n = r.read(buffer)) != -1;) 
    sw.write(buffer, 0, n); 
String str = sw.toString(); 
System.out.println(str); 

nào in tập tin của tôi mẫu cấu hình:

[#|2013-07-03T07:55:30.844+0200|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=124;_ThreadName=Thread-2;|<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <!-- encoders are assigned the type 
      ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <root level="debug"> 
     <appender-ref ref="STDOUT" /> 
    </root> </configuration>|#] 

pom.xml có các mục sau đây của tôi:

 <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.0.13</version> 
     </dependency> 

     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
      <version>1.0.13</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.5</version> 
     </dependency> 

Được đóng gói dưới dạng tệp tin WAR (bên trong tệp EAR). Vị trí của logback.xml bên trong tệp WAR như sau: WEB-INF/classes/logback.xml

Có ai có ý tưởng gì về thiết lập của tôi không?

Rất cám ơn sự giúp đỡ của bạn

stupidSheep

+0

Bạn có chắc chắn rằng bạn đang sử dụng logback từ chiến tranh của mình chứ không phải từ máy chủ ứng dụng? –

Trả lời

5

Vị trí trong tập tin WAR là đúng, WEB-INF/classes.

logback configuration documentation nói về nơi tệp logback.xml có thể được đặt trong một cuộc chiến, nhưng nó không đề cập đến bất kỳ điều gì về một EAR.

Bạn có thể thử thông tin tại liên kết này không? Tôi tự hỏi nếu nó cần phải được đóng gói vào EAR một cách cụ thể.

  1. Glassfish 3 + ear + logback.xml

(chỉnh sửa: liên kết thứ hai loại bỏ, không làm việc).

+0

Vâng, đó là một lỗi đánh máy (tôi đã sửa nó trong câu hỏi). Giải pháp được đề xuất trong liên kết đầu tiên của bạn (Glassfish 3 + ear + logback.xml) đã hoạt động !! Cảm ơn nhiều! Tôi chỉ cần thêm một mô-đun Maven mới và thêm "logback.xml" vào thư mục src/main/resources. Sau đó, tôi đã phải thêm mô-đun maven mới được tạo ra như là một phụ thuộc biên dịch vào mô-đun WAR của tôi. Điều đó đã làm các trick! Liên kết thứ hai không hoạt động đối với tôi (mặc dù tôi đã tạo các tệp MANIFEST.MF và thêm các mục đường dẫn lớp, logback vẫn báo cáo rằng nó không thể tìm thấy cấu hình .. Anway, cảm ơn nhiều lần! – stupidSheep

+0

Bạn đang Chào mừng mister cừu, và cảm ơn cho câu hỏi, tôi không bao giờ nghĩ về nơi logback.xml nên được đặt trong một EAR, và vì vậy bây giờ tôi cũng biết :) – vikingsteve

3

Logback gọi mã rất giống với mã trong ví dụ của bạn, tức là getClassLoader() getResourceAsStream ("logback .xml "). Nếu logback không thể tìm thấy logback.xml, thì nó phải là tài nguyên không hiển thị cho trình nạp lớp đã nạp lớp logback. Trình nạp lớp này có lẽ khác với trình nạp lớp đã tải mã kiểm thử của bạn, có thể tìm thấy logback.xml.

+0

Hm, tôi không biết nhiều về cách thức các trình nạp lớp làm việc. Nhưng cả hai lần (một lần trong khi khởi động, một lần sau khi triển khai) mã đã được thực thi bên trong thùng chứa (GlassFish 3). Một lần trong quá trình khởi động/triển khai tệp EAR, lần thứ hai khi ứng dụng được tải (bởi một JSF @ManagedBean - trong cùng một lớp mà tôi đã sử dụng trình ghi nhật ký). Anway, workaround với một tập tin jar thêm làm việc (xem câu trả lời được chấp nhận). Dù sao cũng cảm ơn bạn! – stupidSheep

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