Eclipse : log4j.xml에서 log4j.dtd 참조
나는 지금 꽤 오랫동안 log4j를 사용해 왔으며 보통 log4j.xml의 맨 위에 이것을 사용합니다 (아마도 다른 많은 사람들처럼 아마 Google에 따르면 이것이 할 수 있는 방법입니다).
<!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">
위에서 볼 수 있듯이 Maven을 사용하고 있습니다. 따라서 이것을 시도했지만 실패합니다.
<!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의 response 와 비슷 하지만 더하기 측면에서 더 이상 Eclipse 구성이 필요하지 않습니다 (즉, 프로젝트를 다른 사람들과 공유하거나 큰 팀을 가지고 있다면 걱정할 필요가 없습니다).
그러나 단점은 인터넷 연결이 필요하다는 것을 의미한다고 생각합니다 (적어도 한 번이라도 개발 중 어느 시점에서는).
"환경 설정-> XML-> XML 카탈로그"에서 log4j.dtd를 사용자 특정 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 Build Path에서 사용할 수 있습니다' 라고 생각 합니다. 왜 DOCTYPE 정의 내에서 작동해야합니까? "유효성 검증"(Eclipse 컨텍스트 메뉴) log4j.xml 파일에 경로를 해석 할 수 없다는 경고가 표시됩니다.
나는 희망 classpath:org/apache/log4j/xml/log4j.dtd
(유효성 검사 오류 참조) 트릭을 할 것입니다하지만 프로토콜은하지 지원입니다. 나는 그것이 상자 밖으로 작동하지 않을 것을 두려워합니다.
그리고 내가 이해 SYSTEM "log4j.dtd"
했듯이 표기법은 자리 표시자가 아닙니다. dtd (이 경우) 옆에있는 문서에 대한 유효한 참조입니다.
webcontent에 DTD 폴더를 추가 한 다음 log4j dtd 파일을 복사했습니다. 그런 다음 벨로우즈처럼 시도했습니다. 작동
<!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없이 DOCTYPE 선언을 지원합니다.
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
일반적으로 Eclipse는 log4j.dtd
클래스 경로에서 찾고 그것을 찾지 못하므로 오류가 발생합니다. log4j.dtd
아래와 같이 파일의 URL을 제공하여이 문제를 해결할 수 있습니다.
<!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
'development' 카테고리의 다른 글
C ++에서 변수를 캐시하거나 컴파일러가 최적화하도록해야합니까? (0) | 2020.07.24 |
---|---|
Asp.net MVC ModelState.Clear (0) | 2020.07.24 |
순진하고 인식하는 datetime.now () <= challenge.datetime_end를 비교할 수 없습니다 (0) | 2020.07.24 |
Jquery에서 모든 Click 이벤트 핸들러를 제거하는 방법 (0) | 2020.07.24 |
과도한 요소를 제거하는 고정 크기의 큐가 있습니까? (0) | 2020.07.24 |