2015-02-05 14 views
9

Log4j2 hoạt động tốt với Spring Boot thông qua tệp cấu hình log4j2.xml trong đường dẫn lớp gốc, chính xác như trạng thái tài liệu.Làm cách nào để thay đổi vị trí mặc định của log4j2.xml trong Java Spring Boot?

Khi cố di chuyển tệp này đến một vị trí khác, tôi không thể chuyển vị trí mới sang Spring lúc khởi động. Từ the documentation:

Các hệ thống khai thác gỗ khác nhau có thể được kích hoạt bằng cách bao gồm các thư viện thích hợp trên classpath, và tiếp tục tùy chỉnh bởi cung cấp một tập tin phù hợp cấu hình trong thư mục gốc của classpath, hoặc ở một vị trí cụ thể bởi thuộc tính Môi trường Mùa xuân logging.config.

tôi đã cố gắng thiết lập các vị trí mới với một tài sản hệ thống Java

java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar 

hoặc sử dụng một bên ngoài application.properties chứa thuộc tính

logging.config=classpath:/config/log4j2.xml 

liên quan Nhưng tôi thường xuyên chào đón bởi các thông báo lỗi sau .

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
+0

Bạn có thể vui lòng xác nhận nếu '/ config' nằm trong classpath không?nếu bạn đang sử dụng dự án dựa trên maven, hãy đặt tệp xml trong 'src/main/resources' – Mithun

+0

Thư mục' config' (gói) nằm trong classpath và nó đã chứa 'application.yml', được chọn đúng và thành công được sử dụng trong ứng dụng. – micpalmia

+0

Bạn có thể vui lòng đặt tệp xml trong 'src/main/resources' và thử để chúng tôi có thể thu hẹp sự cố không? – Mithun

Trả lời

14

Như quy định trong Spring reference documentation, các logging.config bất động sản không thể được thiết lập giữa các thuộc tính ứng dụng, vì chúng đã được đọc sau khi khai thác gỗ đã được khởi tạo.

Giải pháp là để cung cấp đường dẫn đến các cấu hình khai thác gỗ bên ngoài theo cách này:

java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar 
1

Câu trả lời của micpalmia là hoàn toàn chính xác.

Tôi cần đặt cấu hình bên ngoài classpath mà tôi không muốn truyền tệp cấu hình dưới dạng tham số. Vì vậy, tôi đặt một cấu hình khai thác gỗ rất đơn giản trong các nguồn classpath và có reconfigure mùa xuân ứng dụng khởi động đăng nhập khi bắt đầu, như vậy:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... param) throws UnsupportedEncodingException { 
     Configurator.initialize(null, "config/log4j2.xml"); 
     // ... 
    } 
} 

Cách tiếp cận này có một nhược điểm đáng kể: Quá trình toàn bộ khởi động ứng dụng sẽ không được ghi lại như được định cấu hình bên ngoài. Nhưng khi mã tùy chỉnh được chạy thì trình ghi nhật ký hoạt động như dự định. Trong khi bạn có thể không, tôi thấy điều này là một sự thỏa hiệp tôi có thể sống với.

1

Tôi có cùng một vấn đề trong dự án của mình, ngoài log4j2.xml tôi cũng cần các tệp cấu hình khác trong đường dẫn lớp. Đây là 2 giải pháp của tôi mà làm việc:

Soluation 1: Khởi động ứng dụng khởi động mùa xuân với org.springframework.boot.loader.JarLauncher

java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher 

Giải pháp 2: Viết một './config' nhập đường dẫn lớp trong MANIFEST.MF trong bình

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifestEntries> 
       <Class-Path>./config/</Class-Path> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.5.3.RELEASE</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
Các vấn đề liên quan