Saya telah menggunakan log4j untuk beberapa waktu sekarang dan saya biasanya menggunakan ini di bagian atas log4j.xml (mungkin seperti banyak orang lain dan menurut Google ini adalah yang cara untuk melakukannya):
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Jelas ini berfungsi, namun Eclipse tidak menyediakan bantuan sensitif konteksnya untuk menulis XML dan semuanya. Selain itu, selalu muncul peringatan bahwa ia tidak menemukan file log4j.dtd
. Sekarang saya penasaran bagaimana cara memperbaikinya.
Saya mencoba beberapa hal dan pekerjaan ini:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:/path/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
Seperti yang Anda lihat dari atas, kami menggunakan Maven. Karena itu, saya mencoba ini, tetapi gagal:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:${M2_REPO}/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
Eclipse biasanya tahu bagaimana menangani variabel classpath, tapi mengapa ini tidak berhasil? Saya tahu bahwa referensi tidak akan berfungsi selama runtime, tetapi juga tidak sederhana log4j.dtd
(jika saya tidak salah), jadi itu seharusnya tidak menjadi masalah.
Adakah yang bisa menjelaskan hal ini?
sumber
Coba tambahkan log4j.dtd sebagai Entri Katalog XML URI Khusus Pengguna di "Preferensi -> XML -> Katalog XML". Seperti yang saya tahu ini adalah tempat dimana eclipse mengelola referensi ke file definisi / validasi (seperti xsd). Jika mereka dapat ditemukan di sini, gerhana tidak memerlukan akses internet untuk mengaksesnya di lokasi (web) asalnya.
Saya melakukannya seperti ini (untuk ujian) dan gerhana tidak mengeluh:
Mungkin juga $ {M2_REPO} berfungsi - Saya tidak memeriksa ini.
Gunakan URL asli di log4j.xml Anda sesudahnya
EDIT
Saya akan menggunakan solusi di atas tetapi untuk kembali ke pertanyaan Anda, saya pikir variabel jalur kelas 'dapat digunakan dalam Jalur Build Java' . Mengapa mereka harus bekerja di dalam definisi DOCTYPE? "Validasi" (menu konteks gerhana) file log4j.xml dan Anda akan mendapatkan peringatan bahwa jalur tidak dapat diselesaikan.
Saya berharap
classpath:org/apache/log4j/xml/log4j.dtd
akan melakukan trik tetapi protokol itu juga tidak mendukung (lihat kesalahan validasi). Saya khawatir itu tidak akan berhasil di luar kotak.Dan, seperti yang saya pahami,
SYSTEM "log4j.dtd"
notasi bukanlah placeholder. Ini adalah referensi yang valid ke dokumen yang diharapkan dapat ditemukan di sebelah dtd (dalam kasus ini).sumber
log4j.jar
secara keseluruhan. Saya berasumsi bahwa "log4j.dtd" adalah semacam placeholder karena ini adalah nama yang umum. - Ya, menyalin log4j.dtd di sebelah XML akan menjadi solusi, tetapi apakah ini benar-benar cara yang umum untuk melakukannya?SYSTEM "log4j.dtd"
adalah cara melakukannya .Saya menambahkan folder DTD di konten web dan kemudian saya menyalin file log4j dtd di dalamnya. lalu saya coba seperti di bawah ini. Bekerja
Path artinya disini jalan proyek seperti
/projectname
sumber
Saya telah mencoba dengan jawaban FrVaBe tetapi tidak berhasil untuk saya dan saya melakukan sedikit perubahan pada nilai Kunci dan berhasil.
"Preferensi -> XML -> Katalog XML"
sumber
@Jack Leow menggunakan pendekatan yang baik dengan ID PUBLIK. Namun, seperti yang dia tunjukkan, itu membutuhkan koneksi jaringan.
Saya lebih suka kombinasi:
Ini mereferensikan JAR lokal, dan mendukung deklarasi DOCTYPE tanpa URL lengkap.
sumber
Biasanya, Eclipse mencari
log4j.dtd
di classpath dan tidak menemukannya di sana dan karenanya error. Kami dapat mengatasi masalah ini dengan memberikan URL untuklog4j.dtd
file seperti di bawah ini.sumber