programing

이클립스:log4j.xml의 log4j.dtd 참조

powerit 2023. 5. 28. 21:05
반응형

이클립스:log4j.xml의 log4j.dtd 참조

저는 지금까지 log4j를 꽤 오랫동안 사용해 왔고 보통 log4j.xml의 맨 위에 이것을 사용합니다(아마도 다른 많은 사람들과 마찬가지로 구글에 따르면 이것이 그것을 하는 방법일 것입니다).

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

분명히 이것은 효과가 있지만 Eclipse는 XML 등을 작성할 때 상황에 맞는 도움말을 제공하지 않습니다.게다가, 그것은 항상 그것이 그것을 찾지 못한다는 경고를 보여줍니다.log4j.dtd이제 이걸 어떻게 고치는지 궁금합니다.

저는 몇 가지를 시도했고 다음과 같은 작업을 했습니다.

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

위에서 보시는 것처럼 메이븐을 사용하고 있습니다.따라서, 저는 이것을 시도했지만 실패했습니다.

<!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는 보통 클래스 경로 변수를 처리하는 방법을 알고 있지만, 왜 이것이 작동하지 않습니까?런타임 중에 참조가 작동하지 않는다는 것을 알고 있지만 간단한 것도 마찬가지입니다.log4j.dtd(내가 틀리지 않았다면), 그래서 그것은 문제가 되지 않을 것입니다.

누가 이것을 밝혀줄 수 있습니까?

이 질문에 대한 답변이 이루어졌다는 것을 알고 있지만, 저는 약간 다른 대안을 제시하고 싶습니다.

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

@FrVaBe의 응답과 비슷하지만, 긍정적인 측면에서는 더 이상 Eclipse 구성이 필요하지 않습니다(즉, 프로젝트를 다른 사람과 공유하거나 대규모 팀이 있는 경우에는 걱정할 필요가 없습니다).

하지만 단점은 인터넷 연결이 필요하다는 것을 의미한다고 생각합니다(적어도 개발 중 어느 시점에서는 한 번이라도).

log4j.dtd를 "환경설정 -> XML -> XML 카탈로그"에서 사용자별 URI XML 카탈로그 항목으로 추가합니다.제가 알기로는 이클립스는 xsd와 같은 정의/검증 파일에 대한 참조를 관리하는 곳입니다.여기에서 이클립스를 찾을 수 있으면 기본(웹) 위치에서 이클립스에 액세스하기 위해 인터넷에 액세스할 필요가 없습니다.

저는 (테스트를 위해) 이렇게 했고 일식은 불평하지 않습니다.

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}도 작동할 수 있습니다 - 저는 이것을 확인하지 않았습니다.

나중에 log4j.xml의 기본 URL을 사용합니다.

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

편집

위의 솔루션으로 가겠지만 다시 질문으로 돌아가자면 클래스 경로 변수는 'Java 빌드 경로에서 사용할 수 있습니다'라고 생각합니다.DOCYPE 정의 내에서 작업해야 하는 이유는 무엇입니까?log4j.xml 파일을 "검증"(이클립스 컨텍스트 메뉴)하면 경로를 확인할 수 없다는 경고가 표시됩니다.

나는 희망했습니다.classpath:org/apache/log4j/xml/log4j.dtd이 프로토콜은 지원되지 않습니다(검증 오류 참조).유감스럽게도 그것은 개봉 후에는 작동하지 않을 것입니다.

제가 그고리, 제이한바로는해,SYSTEM "log4j.dtd"표기법은 자리 표시자가 없습니다.이는 dtd 옆에 있을 것으로 예상되는 문서에 대한 유효한 참조입니다(이 경우).

저는 웹 콘텐츠에 DTD 폴더를 추가하고 거기에 log4jdtd 파일을 복사했습니다.그리고 나서 나는 벨로우처럼 노력했습니다.효과가 있습니다

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

경로는 다음과 같은 프로젝트 경로를 의미합니다./projectname

저는 FrVaBe의 답변으로 시도해 보았지만 저를 위해 일하지 않았고 Key 값을 조금 변경했는데 효과가 있었습니다.

"환경설정 -> XML -> XML 카탈로그"

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

@Jack Leow는 PUBLIC ID로 좋은 접근 방식을 사용합니다.하지만, 그가 지적했듯이, 그것은 네트워크 연결을 필요로 합니다.

조합을 선호합니다.

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

이는 로컬 JAR을 참조하며 전체 URL이 없는 DOCYPE 선언을 지원합니다.

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

log4j.dtd를 log4j.xml과 동일한 위치에 배치하면 다음과 같이 선언합니다.

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

일식(최소한 2020-06년 일식)에 좋습니다.

BTW: 이클립스 오류가 바로 사라지지는 않지만, log4j.xml 파일 내에서 일부 편집을 수행한 후에 사라집니다.

일반적으로 이클립스는 다음을 찾습니다.log4j.dtd클래스 경로에서 찾을 수 없으므로 오류가 발생합니다.는 이 하기 위해 다에을 URL 공하이있에 할 수 .log4j.dtd아래와 같은 파일입니다.

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

언급URL : https://stackoverflow.com/questions/5000884/eclipse-referencing-log4j-dtd-in-log4j-xml

반응형