2011-02-15 15 views
105

Şu an log4j kullanıyorum ve genellikle log4j.xml'nin üst kısmında bunu kullanıyorum (muhtemelen sadece diğerleri gibi ve Google'a göre bu ) bunu yapmak için yol:Eclipse: log4j.xml dosyasındaki başvuru log4j.dml

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

Açıkçası bu ancak Eclipse XML ve tüm yazma için bağlama duyarlı yardım sağlamaz, çalışıyor. Ayrıca, her zaman log4j.dtd'u bulamadığı konusunda bir uyarı gösterir. Şimdi bunu nasıl düzelteceğimi merak ediyorum.

<!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"> 

biz Maven kullanıyorsanız yukarıdan Gördüğünüz gibi:

bir kaç şey ve bu işi çalıştı. Bu nedenle, bu çalıştı, ama başarısız:

<!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 genellikle sınıf yolu değişkenleri ile başa bilir, ama neden bu iş yapar ki? Referansın çalışma zamanı boyunca çalışmadığını biliyorum, ancak basit bir log4j.dtd (yanlış değilse), bu da sorun olmamalı.

Bu konuda herhangi bir ışık tutabilir mi?

+4

+1 iyi yazılmış! – Nishant

cevap

157

gibi proje yolu yanıtlandı burada demektir, ama benim biraz farklı bir alternatif sunmak istiyorum:

<!DOCTYPE log4j:configuration PUBLIC 
    "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> 

O edilir @FrVaBe's response'a benzer, ancak artı tarafta, herhangi bir Eclipse yapılandırması gerektirmez (örneğin, projenizi başkalarıyla paylaşıyorsanız veya büyük bir ekibiniz varsa, endişelenmeniz gereken bir şey yoktur).

olsa aşağı tarafı, ben (sadece bir defa olsa bile, en azından geliştirme sırasında bir noktada) Eğer bir Internet bağlantısı gerekir demektir inanmamız.

+0

bu yaklaşım dtd dosyasının fiziksel konumu ile uğraşmak zorunda olmadığınız için kabul edilen cevaptan daha iyidir. Bu, projenizi diğer geliştiricilerle paylaşırken yardımcı olur. –

+1

İlginç. Şimdi log4j 2.0 için dtd bulmalıyım - ne ağrı - ne benim özellik dosya yapılandırma geri! – Martin

+0

Bu son zamanlarda – OO7

36

Log4j.dtd dosyasını "Tercihler -> XML -> XML Kataloğu" bölümüne Kullanıcıya Özel URI XML Katalog Girişi olarak eklemeye çalışın. Bildiğim gibi bu eclipse tanımı/doğrulama dosyaları (xsd gibi) referansları yöneten yerdir. Eğer bulunabilirlerse burada tutulma yerel (web) konumunda onlara erişmek için internet erişimi gerektirmez.

I (test için) böyle yaptım ve tutulma şikayet etmiyor:

Entry element: URI 
Location:   C:\Users\me\Desktop\log4j.dtd 
URI:    file:///C:/Users/me/Desktop/log4j.dtd 
Key type:   URI 
Key:    http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd 

{M2_REPO} çalışır Belki de $ - Bunu kontrol etmedi.

sonradan

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> 

DÜZENLEME

Yukarıdaki çözelti ile gider ama Sorunuzun geri gelmek, ben sınıf yolu değişkenleri 'can be used in a Java Build Path' düşündüğünüz log4j.xml yerli URL'yi kullanın. Neden bir DOCTYPE tanımında çalışmalılar? "Validate" (eclipse bağlam menüsü) log4j.xml dosyasını ve yolun çözülemeyeceğine dair bir uyarı alacaksınız.

classpath:org/apache/log4j/xml/log4j.dtd numaranın işe yaramasını umduğum ancak bu protokolün de desteklenmediğini umuyorum (doğrulama hatasına bakın). Korkarım ki kutudan çıkmayacak.

Ve, anladığım gibi, SYSTEM "log4j.dtd" gösterimi yer tutucudur. Dtd'nin yanında bulunması beklenen bir belgenin geçerli bir referansıdır (bu durumda).

+0

Ne söylediğini görüyorum, ama bu genel bir özellik gibi görünüyor. Ancak, farklı projelerimiz var (bazıları Maven-projeleri bile değil) ve farklı log4j sürümlerini kullanıyorlar. Yapılandırmayı projeye biraz bağlayabilirsem harika olurdu. – sjngm

+0

Eğer log4j'nin farklı versiyonlarını söylerseniz - log4j.dtd'in farklı versiyonlarını mı kastediyorsunuz? Her versiyon için bir Katalog girişi tanımlamanız gerek. Yapılandırmayı projeye bağlamak istediğinizde log4j.xml log4j.xml dosyasının (projenin içinde) ve SYSTEM "log4j.dtd"'un (umarım) çalışmasının en iyisi olması en iyisidir. – FrVaBe

+0

Üzgünüm, 'log4j.jar'ın bir bütün olarak farklı bir versiyonunu kastetmiştim. Böyle bir genel isim olduğu gibi "log4j.dtd" bir tür yer tutucu olduğunu varsayalım. - Evet, XML'in yanındaki log4j.dtd dosyasını kopyalamak bir çözüm olurdu, ancak bu gerçekten bunu yapmanın ortak bir yolu mu? – sjngm

2

Webcontent'te DTD klasörünü ekledim ve daha sonra log4j dtd dosyasını bu dosyaya kopyaladım. sonra feryat gibi denedim.Onun çalışma

<!DOCTYPE log4j:configuration SYSTEM "<Path>/DTD/log4j.dtd"> 

Yol Ben bu soruyu biliyorum /projectname

1

FrVaBe'nin yanıtıyla çalıştım ama benim için çalışmadı ve Key değerinde küçük bir değişiklik yaptım ve çalışıyor.

"Tercihler -> XML -> XML Katalog"

Localization: C:\Users\me\Desktop\log4j.dtd 
Key Type: URI 
Key: -//APACHE//DTD LOG4J 1.2//EN 
1

@Jack Leow KAMU kimliği ile iyi bir yaklaşım kullanır. Ancak, işaret ettiği gibi, bir ağ bağlantısı gerektirir.

Entry element:  Public 
Location:   org\apache\log4j\xml\log4j.dtd in jar file C:\Development\lib\external\apache-log4j-1.2.17\log4j-1.2.17.jar 
URI:    jar:file:/C:/Development/lib/external/apache-log4j-1.2.17/log4j-1.2.17.jar!/org/apache/log4j/xml/log4j.dtd 
Key type:   Public ID 
Key:    -//APACHE//DTD LOG4J 1.2//EN 

Bu, yerel bir JAR başvuran ve tam URL olmadan bir DOCTYPE bildirimi destekler:

Bir kombinasyonu tercih ederim.

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> 
-1

Genellikle Eclipse sınıf yolunda log4j.dtd arar ve hatayı orada bulmak ve dolayısıyla gelmez. Aşağıdaki gibi log4j.dtd dosyasına URL sağlayarak bu sorunu çözebiliriz.

<!DOCTYPE log4j:configuration SYSTEM 
     "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> 
+0

Bu, sorumu denediğimin tam bir kopyası. – sjngm

İlgili konular