2013-05-24 25 views
5

Có vẻ như câu hỏi này đã được hỏi nhiều lần. Nhưng tất cả các giải pháp tôi đã cố gắng (chủ yếu là chắc chắn rằng các tập tin log4j.properties là ở vị trí chính xác và nó gõ chính xác) không làm việc trong trường hợp của tôi.log4j: WARN Không tìm thấy appender nào cho logger - Sử dụng slf4j-log4j12

Tôi có dự án quạ. Tôi muốn sử dụng log4j cho các bài kiểm tra của mình. Lớp thử nghiệm sử dụng một phương thức trợ giúp được định nghĩa trong src/main/java, nơi mà trình ghi nhật ký được sử dụng.

Trong lớp helper của tôi (trong src/main/java /) Tôi đã nhập

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

và tôi đã khởi tạo các logger

private static final String TAG = Helper.class.getSimpleName(); 
private static final Logger logger = LoggerFactory.getLogger(TAG); 

Tôi đã bao gồm cả trong src/main/resources và src/test/resources tệp log4j.properties sau đây

### set log levels - for more verbose logging change 'info' to 'debug' ### 
### Also add logfile to the root, if need stdout then add stdout appender here### 
log4j.rootLogger=debug, stdout 

### direct log messages to stdout ### 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{dd-mm HH:mm:ss,SSS} %p/%c{1}:%L - %m%n 

Trong POM của tôi, tôi đã bao gồm sự phụ thuộc vào slf4j

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
</dependency> 

Trong mã trong lớp helper của tôi, tôi sử dụng logger theo cách này

logger.debug("logger test..."); 

Không thông điệp được in trong giao diện điều khiển và tôi nhận được thông báo cảnh báo sau đây

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

gì tôi có bị mất không?

Cập nhật

Vấn đề này có liên quan đến một lựa chọn dự án mà bộ tài sản log4j.configuration để log4j-test.xml. Tôi đã thêm vào các plugin sau đây để dự án maven pom và điều này cố định vấn đề.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.14.1</version> 
    <configuration> 
     <systemPropertyVariables> 
     <log4j.configuration>log4j.properties</log4j.configuration> 
     </systemPropertyVariables> 
    </configuration> 
    </plugin> 
+4

Add '-Dlog4j.debug' đối số JVM để xem chính xác tệp cấu hình nào log4j đang chọn –

Trả lời

5

Từ các phần bạn đã đăng, có vẻ ổn. Vì vậy, chúng ta hãy điều tra vấn đề. tôi đã làm một dự án đơn giản (chỉ có 2 lớp Helper: có một phương pháp để gọi tuyên bố logger của bạn, AppTest: một thử nghiệm JUnit để gọi phương thức trong Helper)

  1. dọn dẹp tạo ra mã
    mvn sạch
    sau file tồn tại
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main/resources/log4j.properties
    ./src/test/java/sub/optimal/ mavenexample/AppTest.java
    ./src/test /resources/log4j.properties

  2. biên dịch mã
    mvn biên dịch
    file sau đây tồn tại
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main /resources/log4j.properties
    ./src/test/java/sub/optimal/mavenexample/AppTest.java
    ./src/test/resources/log4j.tính
    ./target/classes/log4j.properties
    ./target/classes/sub/optimal/mavenexample/Helper.class

    nếu các tập tin thuộc tính không được sao chép vào thư mục mục tiêu mà bạn cần phải tìm ra lý do

  3. một số điểm khởi đầu, kiểm tra đầu ra của

    mvn -debug biên dịch
    mvn -Dlog4j.debug kiểm tra
+0

Hi SubOptimal, Log4j.properties được sao chép chính xác trong thư mục đích/lớp. Tuy nhiên khi tôi chạy lệnh kiểm tra mvn -Dlog4j.debug tôi nhận được kết quả sau: log4j: Cố gắng tìm [log4j-test.xml] bằng cách sử dụng trình nạp lớp ngữ cảnh [email protected] log4j: Cố gắng tìm [log4j-test.xml] bằng cách sử dụng bộ nạp lớp [email protected] log4j: Cố gắng tìm [log4j-test.xml] bằng cách sử dụng ClassLoader.getSystemResource(). log4j: Không thể tìm thấy tài nguyên: [log4j-test.xml]. Dường như nó không tìm kiếm tệp .properties. Tôi không thể hiểu tại sao – Piero

+1

Xin chào Piero, vì nó tìm kiếm tệp log4j-test.xml, không phải là tên tệp cấu hình log4j mặc định, nó phải được định cấu hình ở mọi nơi. Có lẽ có một tùy chọn '-Dlog4j.configuration = log4j-test.xml' trong cấu hình của bạn hoặc thuộc tính hệ thống được đặt theo chương trình. Có một cái nhìn cho nó. – SubOptimal

+0

Hi SubOptimal. Có, tôi vẫn không biết tại sao và nơi biến cấu hình này được đặt. Nhưng tôi đã tìm ra cách để sửa nó. Xem cập nhật của tôi. Cảm ơn bạn đã tip về cách hiển thị đầu ra gỡ lỗi log4j. – Piero

0

hãy thử thes e Commands ...

$ unset FLUME_HOME

và sau đó thử .....

Nó làm việc cho tôi ....