2010-12-31 41 views
58

Đột nhiên điều này sẽ xảy ra trong khi kiểm tra JUnit. Tất cả mọi thứ đã được làm việc, tôi đã viết một số xét nghiệm mới và lỗi này xảy ra. Nếu tôi hoàn nguyên nó, nó sẽ không biến mất. Tại sao vậy?Cách định cấu hình log4j.properties cho SpringJUnit4ClassRunner?

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Trả lời

66

Các thử nghiệm mới, bạn viết (trực tiếp hoặc gián tiếp) sử dụng lớp log sử dụng Log4j.

Log4J cần được định cấu hình để nhật ký này hoạt động bình thường.

Đặt tệp log4j.properties (hoặc log4j.xml) vào gốc của đường dẫn thử nghiệm của bạn.

Nó cần phải có một số cấu hình cơ bản như

# Set root logger level to DEBUG and its only appender to A1. 
log4j.rootLogger=DEBUG, A1 

# A1 is set to be a ConsoleAppender. 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 

# A1 uses PatternLayout. 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

# An alternative logging format: 
# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n 

Một kết quả đầu ra appender ra cửa sổ Console theo mặc định, nhưng bạn cũng có thể thiết lập một cách rõ ràng mục tiêu như thế này:

log4j.appender.A1.Target=System.out 

này sẽ chuyển hướng tất cả đầu ra ở định dạng đẹp cho bảng điều khiển. Bạn có thể tìm thêm thông tin tại đây trong Log4J manual,

Log4J Logging sau đó sẽ được định cấu hình đúng và cảnh báo này sẽ biến mất.

+1

Chỉ cần để tham khảo, đây là một liên kết cho việc chuyển đổi mô hình tham khảo: http: //logging.apache. org/log4j/1.2/apidocs/org/apache/log4j/EnhancedPatternLayout.html – lanoxx

+0

Bạn có thể giải thích lý do tại sao chúng tôi làm điều này? – iLoveCamelCase

+0

project/src/test/resources/log4j.properties –

8

Thêm tệp log4j.properties (log4j.xml) có ít nhất một trình bổ sung trong thư mục gốc của đường dẫn lớp của bạn.

Nội dung của tập tin (log4j.properties) có thể đơn giản như

log4j.rootLogger=WARN,A1 

# A1 is set to be a ConsoleAppender. 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n 

này sẽ cho phép log4j khai thác gỗ với mức độ đăng nhập mặc định như WARN và sử dụng java console để đăng nhập các thông điệp.

3

Tôi có cấu hình log4j.properties được định cấu hình đúng cách. Đó không phải là vấn đề. Sau một thời gian, tôi phát hiện ra rằng vấn đề nằm trong IDE Eclipse có một phiên bản cũ trong bộ nhớ đệm "" và không tạo ra một vấn đề mới (vấn đề phụ thuộc Maven). Tôi đã phải xây dựng các dự án bằng tay và bây giờ nó hoạt động.

+0

Xin chào Tom, bạn có thể giải thích chi tiết về vấn đề này và giải quyết được không- nghĩ rằng tôi cũng đang trải nghiệm nó! Cảm ơn – VLostBoy

+0

@vlostboy: và làm sạch dự án không giúp được gì? – user219882

+0

@vlostboy: Giải pháp làm việc cho tôi là xây dựng nó từ dòng lệnh: 'mvn clean package' – user219882

44

Nếu bạn không muốn bận tâm với một tập tin, bạn có thể làm một cái gì đó như thế này trong mã của bạn:

static 
{ 
    Logger rootLogger = Logger.getRootLogger(); 
    rootLogger.setLevel(Level.INFO); 
    rootLogger.addAppender(new ConsoleAppender(
       new PatternLayout("%-6r [%p] %c - %m%n"))); 
} 
+0

Đã lưu một ngày! Cảm ơn @tster. –

3

Tôi đã sử dụng Maven trong nhật thực và tôi không muốn có một bản sao bổ sung tệp thuộc tính trong thư mục gốc. Bạn có thể làm như sau trong nhật thực:

  1. thoại Open chạy (nhấp vào mũi tên nhỏ bên cạnh nút play và đi để chạy cấu hình)
  2. Chuyển đến "classpath" tab
  3. Chọn "User Mục nhập "và nhấp vào nút" Nâng cao "ở bên phải.
  4. Bây giờ, hãy chọn nút radio "Thêm thư mục bên ngoài".
  5. Chọn thư mục tài nguyên
1

Tôi biết điều này là cũ, nhưng tôi cũng gặp sự cố.Đối với Spring 3 sử dụng Maven và Eclipse, tôi cần phải đặt log4j.xml trong src/test/resources cho bài kiểm tra Unit để đăng nhập đúng. Việc đặt trong thư mục gốc của bài kiểm tra không hiệu quả với tôi. Hy vọng rằng điều này sẽ giúp người khác.

2

Vì tôi không thích có các tệp trùng lặp (log4j.properties trong thử nghiệm và chính) và tôi có nhiều lớp thử nghiệm, mỗi lớp đều chạy với lớp SpringJUnit4ClassRunner, vì vậy tôi phải tùy chỉnh nó. Đây là những gì tôi sử dụng:

import java.io.FileNotFoundException; 

import org.junit.runners.model.InitializationError; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.util.Log4jConfigurer; 

public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner { 

    static { 
     String log4jLocation = "classpath:log4j-oops.properties"; 
     try { 
      Log4jConfigurer.initLogging(log4jLocation); 
     } catch (FileNotFoundException ex) { 
      System.err.println("Cannot Initialize log4j at location: " + log4jLocation); 
     } 
    } 

    public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError { 
     super(clazz); 
    } 
} 

Khi bạn sử dụng nó, thay thế SpringJUnit4ClassRunner với MySpringJUnit4ClassRunner

@RunWith(MySpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:conf/applicationContext.xml") 
public class TestOrderController { 
    private Logger LOG = LoggerFactory.getLogger(this.getClass()); 

    private MockMvc mockMvc; 
... 
} 
Các vấn đề liên quan