2017-09-12 21 views
8

Đang cố gắng sử dụng Log4j để ghi vào tệp nhật ký cục bộ trong hệ thống tệp của tôi.log4J không ghi vào tệp nhật ký cụ thể trong Spring Boot Microservice

Thực tế đã sử dụng tệp thuộc tính chính xác từ một dự án khác và chỉ thay đổi tên của thư mục cấp cao nhất để khớp với tên ứng dụng của tôi. Các dự án khác nhau ghi vào tệp logs.log nhưng điều này không in bất kỳ nội dung nào cả. Cả hai dự án đều sử dụng cùng một phiên bản của log4j.

pom.xml

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
</dependency> 

Trên Unix dựa MacOS, tôi cd'ed vào/var/log/và đã làm như sau: thiết lập

sudo mkdir myapp 
chmod 777 myapp 

Có bên trong myapp, sau tất cả khắp nơi:

if (log.isDebugEnabled() { 
    log.debug("print something"); 
} 

myapp/src/main/nguồn/log4j.properties:

log4j.rootCategory=DEBUG, RF 

log4j.category.your.category.name=DEBUG 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

log4j.appender.stdout.layout.ConversionPattern=%-5p [%F]: %m [%d{ISO8601}]%n 
log4j.logger.com.amazonaws=DEBUG RF 

log4j.appender.RF=org.apache.log4j.RollingFileAppender 
log4j.appender.RF.File=/var/log/myapp/logs.log 

log4j.appender.RF.MaxFileSize=10MB 
log4j.appender.RF.MaxBackupIndex=30 
log4j.appender.RF.layout=org.apache.log4j.PatternLayout 
log4j.appender.RF.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 
Threshold=DEBUG 

Không hiểu tại sao bên trong:

/var/log/myapp/ 

Không có tập tin logs.log hiện tại!

Am sử dụng này bên trong một Boot mùa xuân 1.5.4.RELEASE mà tôi xây dựng sử dụng:

mvn clean install 

Và sau đó chạy bằng cách sử dụng:

java -jar myapp.jar 

hoặc

mvn spring-boot:run 

Would đánh giá cao nếu ai đó có thể cung cấp cho tôi một tệp thuộc tính tốt hơn hoặc xem tôi đang làm gì sai?

Cảm ơn bạn đã dành thời gian đọc nội dung này.

+2

Bạn phải loại trừ ghi nhật ký khởi động mùa xuân (đăng nhập mặc định) để cho phép ghi log4j. Xem ở đây để biết cách [loại trừ] (https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging) – Veeram

Trả lời

3

@Veeram là đúng - nhật ký được in bằng logback, đi kèm với Khởi động mùa xuân. Bạn cần phải thay thế nó bằng Log4j. Tuy nhiên, bây giờ nó không phải là một lựa chọn:

Từ Spring Boot 1.4.0 Release Notes:

Log4j 1 hỗ trợ đã được gỡ bỏ sau khi công bố Apache EOL.

Vì vậy, tôi có thể đề nghị bạn xem xét nâng cấp lên Log4j 2.

P.S. Tôi nghĩ bạn vẫn có thể sử dụng Log4j 1.2, nhưng trong trường hợp này, bạn phải xác định và chỉ định phụ thuộc nào sẽ bị loại trừ khỏi mô-đun spring-boot-starter-logging và thay vào đó sẽ được thêm vào. Tôi đã thiết lập một dự án demo để tái tạo vấn đề của bạn và đây là danh sách các phụ thuộc trong việc xây dựng .gradle (tôi sử dụng Gradle, nhưng tôi nghĩ rằng bạn sẽ có được một điểm):

dependencies { 
    compile('org.springframework.boot:spring-boot-starter') { 
     exclude group: 'ch.qos.logback' 
     exclude group: 'org.slf4j', module: 'log4j-over-slf4j' 
    } 
    compile('commons-logging:commons-logging:1.2') 
    compile('log4j:log4j:1.2.17') 
    compile('org.slf4j:slf4j-log4j12:1.7.25') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 
1

Như @mxf nói logback bây giờ là khai thác gỗ mặc định hệ thống phụ trong mùa xuân Boot.

Mặc dù bạn có thể định cấu hình các trình ghi nhật ký khác, tôi khuyên bạn nên ở lại với logback vì nó thực sự là một thế giới chuyển đổi logger đau.

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