Eu uso o log4j há um bom tempo e geralmente o uso no topo do log4j.xml (provavelmente como muitos outros e de acordo com o Google, esta é a maneira de se fazer):
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Obviamente, isso está funcionando, no entanto, o Eclipse não fornece sua ajuda contextual para escrever o XML e tudo. Além disso, sempre mostra um aviso de que não encontra o log4j.dtd
. Agora estou curioso para saber como consertar isso.
Tentei algumas coisas e estas funcionam:
<!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">
Como você pode ver acima, estamos usando o Maven. Portanto, tentei fazer isso, mas não deu certo:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:${M2_REPO}/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
O Eclipse geralmente sabe como lidar com as variáveis do caminho de classe, mas por que isso não funciona? Eu sei que a referência não funcionará durante o tempo de execução, mas nem um simples log4j.dtd
(se não estou errado), então isso não deve ser um problema.
Alguém pode, por favor, lançar uma luz sobre isso?
fonte
Tente adicionar o log4j.dtd como uma entrada de catálogo XML URI específico do usuário em "Preferências -> XML -> Catálogo XML". Como eu sei, este é o lugar onde o eclipse gerencia as referências aos arquivos de definição / validação (como xsd). Se eles podem ser encontrados aqui, o eclipse não precisa de acesso à Internet para acessá-los em seu local nativo (web).
Fiz assim (para teste) e o eclipse não reclama:
Talvez $ {M2_REPO} também funcione - eu não verifiquei isso.
Use o URL nativo em seu log4j.xml depois
EDITAR
Eu escolheria a solução acima, mas voltando à sua pergunta, acho que as variáveis de caminho de classe 'podem ser usadas em um caminho de construção Java' . Por que eles deveriam trabalhar dentro de uma definição DOCTYPE? "Valide" (menu de contexto do eclipse) o arquivo log4j.xml e você receberá um aviso de que o caminho não pode ser resolvido.
Eu esperava
classpath:org/apache/log4j/xml/log4j.dtd
que desse certo, mas esse protocolo também não é compatível (consulte o erro de validação). Receio que não funcione fora da caixa.E, como eu entendi, a
SYSTEM "log4j.dtd"
notação não é um espaço reservado. É uma referência válida a um documento que se espera encontrar ao lado do dtd (neste caso).fonte
log4j.jar
como um todo. Presumo que "log4j.dtd" seja algum tipo de marcador, pois é um nome tão geral. - Sim, copiar o log4j.dtd ao lado do XML seria uma solução, mas essa é realmente uma maneira comum de fazer isso?SYSTEM "log4j.dtd"
é a forma de fazê-lo .Eu adicionei a pasta DTD no webcontent e copiei o arquivo log4j dtd nela. então eu tentei como abaixo. Está funcionando
Caminho significa aqui o caminho do projeto como
/projectname
fonte
Eu tentei com a resposta de FrVaBe, mas não funcionou para mim e fiz uma pequena alteração no valor da chave e funciona.
"Preferências -> XML -> Catálogo XML"
fonte
@Jack Leow usa uma boa abordagem com o ID PÚBLICO. No entanto, como ele aponta, requer uma conexão de rede.
Eu prefiro uma combinação:
Isso faz referência a um JAR local e oferece suporte a uma declaração DOCTYPE sem o URL completo.
fonte
Normalmente, o Eclipse procura
log4j.dtd
no classpath e não o encontra lá e, portanto, o erro. Podemos resolver esse problema fornecendo o URL dolog4j.dtd
arquivo como abaixo.fonte