Beginilah cara Anda melakukan aplikasi baru. Anda akan mengalami berbagai masalah. Kemarin, saya baru saja memecahkan masalah kelas tidak terlihat dari class loader saat memuat kelas tertentu. Hari ini, saya mengalami masalah karena tidak menemukan file log, yang terkait dengan perpustakaan pihak kedua. Mari kita bicarakan satu per satu.
Dalam keadaan normal, letakkan file konfigurasi Logback-Spring.xml di direktori SRC/Main/Resources (menggunakan sistem log logback), seperti yang ditunjukkan pada gambar di bawah ini
Setel spring.application.name = spring-boot-demo-aplikasi di application.properties
Paket dua partai memiliki logback.xml di dalamnya
Menurut konfigurasi di atas, setelah berjalan, dalam keadaan normal, kami berharap file log application.log harus dimasukkan dalam direktori pengguna. Bahkan folder Applikasi Spring-Boot-Demo belum dihasilkan.
Jadi mari kita lihat bagaimana sistem log menemukan dan mem -parsing file konfigurasi log. Springboot menggunakan kelas LoggingApplicationListener untuk menginisialisasi sistem log. LoggingApplicationListener mengimplementasikan antarmuka ApplicationListener. Kemudian kita dapat melihat apa yang dilakukan oleh metode OnApplicationEvent LoggingApplicationListener melalui bagan waktu:
Kode (8) Temukan file konfigurasi log standar. Apa standarnya? Kemudian lihat kode kode (9):
string yang dilindungi [] getStandardConfigLocations () {return string baru [] {"logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml"}; }Seperti "logback-test.groovy", "logback-test.xml", "logback.groovy", "logback.xml" Ini adalah standar.
Jadi bagaimana menemukannya tergantung pada kode (10):
Private String FindConfig (String [] Lokasi) {untuk (Lokasi String: Lokasi) {ClassPathResource Resource = new ClassPathResource (Lokasi, this.classLoader); if (resource.exists ()) {return "classpath:" + location; }} return null; }Dapat dilihat bahwa menggunakan kelas ClassPathResource untuk mencari, mari kita lihat metode yang ada dari ClassPathResource:
Boolean publik ada () {return (resolveUrl ()! = null); } lindung URL resolveUrl () {if (this.clazz! = null) {return this.clazz.getResource (this.path); } lain if (this.classLoader! = null) {return this.classLoader.getResource (this.path); } else {return classloader.getSystemResource (this.path); }}Dapat dilihat bahwa this.classloader.getResource (this.path); Untuk menemukan ClassLoader sebagai AppClassLoader.
Jika kode (8) tidak menemukan konfigurasi, maka titik eksekusi (12). Logika dan kode (8) serupa, tetapi nama file berbeda. Mari kita lihat:
string yang dilindungi [] getSpringConfigLocations () {string [] lokasi = getStandardConfigLocations (); untuk (int i = 0; i <locations.length; i ++) {string extension = stringutils.getFileNextension (lokasi [i]); Lokasi [i] = lokasi [i] .substring (0, lokasi [i] .length () - extension.length () - 1) + "-spring." + ekstensi; } mengembalikan lokasi; }Dapat dilihat bahwa musim semi disambung pada nama file getStandardConfiglocations, dan nama file yang disambung adalah:
"` "Logback-Test-Spring.groovy", "Logback-Test-Spring.xml", "Logback-Spring.groovy", "Logback-Spring.xml"
Singkatnya, Springboot pertama mencari file konfigurasi log standar. Jika Anda tidak dapat menemukan file yang menyambung konfigurasi pegas.
Jadi di atas kami mengatakan bahwa paket JAR yang berisi Logback.xml diperkenalkan ke dalam aplikasi, dan paket JAR ini juga dimuat menggunakan AppClassLoader. Oleh karena itu, ketika mengeksekusi langkah (8), logback.xml dalam paket JAR ditemukan, jadi kami tidak akan lagi menjalankan langkah (12) untuk menemukan logback-spring.xml yang disesuaikan.
Solusi 1: Ubah file konfigurasi kami menjadi logback.xml, sehingga pada langkah (8), Anda pertama -tama akan mencari Logback.xml, yang harus ditemukan.
Solusi 2: Hindari paket dua partai yang berisi logback.xml. Dalam hal ini, tidak akan ada masalah apakah konfigurasi kami sendiri adalah logback-spring.xml atau logback.xml.
Dalam pengembangan harian, paket pihak kedua tidak boleh berisi file konfigurasi log. Log yang digunakan di pustaka pihak kedua umumnya dibuat menggunakan kode.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.