log4j:WARN web.xml에서 로거용 부록을 찾을 수 없습니다.
web.xml에 log4jConfigLocation을 이미 넣었는데도 다음 경고가 나타납니다.
log4j:WARN No appenders could be found for logger ⤦
⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
내가 뭘 놓쳤지?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>suara2</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>suara2</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
이것이 log4j.properties 파일 전체라면 실제로는 로거를 작성하지 않은 것 같습니다.다음과 같은 행이 필요합니다.
log4j.rootLogger=debug,A1
클래스 패스의 올바른 위치에 log4j.properties가 있는데도 이를 직접 사용한 경우에는 이 경고가 표시됩니다.commons-logging을 통해 log4j를 사용한 코드는 어떤 이유에서든 문제가 없을 것 같습니다.
다음과 같은 경우:
log4j.rootLogger=WARN
변경 내용:
log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
http://logging.apache.org/log4j/1.2/manual.html에 따르면:
루트 로거는 익명이지만 Logger.getRootLogger() 메서드를 사용하여 액세스할 수 있습니다.루트에 연결된 기본 Appender는 없습니다.
즉, 로깅을 수행하려면 루트 로거에 appender(임의의 appender)를 지정해야 합니다.
rootLogger에 콘솔어펜더를 추가하면 이 불만이 사라집니다.
는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 이런 오류가 발생할 수 있어요.log4j.properties
클래스 패스에 존재하지 않습니다.
은 'VIP, VIP'를 뜻입니다.log4j.properties
시 src가 bin이 되도록 합니다.log4j.properties
쉽게 됩니다.bin 폴 、 will 、 will 、 will will will will will 。
log4j가 "log4j.properties" 또는 "log4j.xml" 파일을 찾을 수 없는 경우 이 경고가 표시됩니다.
또는 로그 컨피규레이션파일이 로드되기 전에 로거를 정의해 둘 수도 있습니다."말보다 본말이 먼저다"라는 말이 나올 것이다.
코드:
public static Logger logger = Logger.getLogger("RbReport");
...나중에
PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");
수정은 설정이 로드된 후에 로거를 초기화하는 것이었습니다.
괴짜들에게 그것은 "Putting Descarte b4 d horse"였다.
스탠드아론 log4j 어플리케이션용으로 설정하는 경우는, Basic Configurator 를 사용할 수 있습니다.이 솔루션은 Spring 환경과 같은 웹 애플리케이션에는 적합하지 않습니다.
편지를 쓰셔야...
BasicConfigurator.configure();
또는
ServletContext sc = config.getServletContext();
String log4jLocation = config.getInitParameter("log4j-properties-location");
String webAppPath = sc.getRealPath("/");
String log4jProp = webAppPath + log4jLocation;
PropertyConfigurator.configure(log4jProp);
그래도 도움말이 있는 경우 아카이브 이름을 확인하십시오. "log4j.properties" 또는 "log4j.xml"(대문자와 소문자가 구분됨)로 정확한 이름을 지정하고 "Alain O'Dea"의 힌트를 따르십시오.같은 에러가 발생하고 있습니다만, 이러한 변경을 실시한 후에는 정상적으로 동작합니다.마치 마법처럼 :-)이게 도움이 되길 바라
저 같은 경우에는 해결이 쉬웠어요.신고할 필요가 없습니다.web.xml
.
프로젝트가 웹 응용 프로그램이기 때문에 컨피규레이션파일이 켜져 있어야 합니다.WEB-INF/classes
를 참조해 주세요.Java 리소스 폴더를 만드는 것이 좋습니다.src/main/resources
(best pratice)를 사용합니다.또 다른 접근법은 컨피규레이션파일을 RPM에 저장하는 것입니다.src/main/java
.
설정 파일명에 주의해 주세요.XML 을 사용하고 있는 경우는, 파일명은 다음과 같습니다.log4j.xml
,그렇지않으면log4j.properties
.
web.xml 의 선두에 다음 행을 입력합니다.
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:/main/resources/log4j.xml</param-value>
</context-param>
네, 정답이 많네요.하지만 아무도 제 문제를 해결해주지 못했어요.제 경우 UNIX 파일 시스템 권한에는 서버에서 편집하고 있던 log4j.properties 파일이 root에 의해 소유되며 root에 의해서만 읽을 수 있다는 문제가 있었습니다.다만, 전개하고 있던 Web 애플리케이션은, Linux 시스템상에서 디폴트로 유저 Tomcat 로서 Tomcat 가 실행되고 있기 때문에, Tomcat 가 파일을 읽어낼 수 없었습니다.이것이 도움이 되기를 바랍니다.그러면 솔루션은 log4j.properties 파일이 있는 디렉토리에 'chown tomcat:tomcat log4j.properties'를 입력하고 있었습니다.
log4j 추가web.xml에서 WebAppRoot -> false를 표시합니다.나랑은 잘 돼 :)
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>path/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
같은 문제가 발생하였습니다.동일한 설정과 동일한 경고 메시지가 표시됩니다.나에게 효과가 있었던 것은, 엔트리의 순서를 변경하는 것입니다.
- 로그 설정 [context param and listener]엔트리를 [applicationContext.xml]엔트리 앞에 배치하면 동작합니다.
주문은 중요한 것 같습니다.
언급URL : https://stackoverflow.com/questions/1266139/log4jwarn-no-appenders-could-be-found-for-logger-in-web-xml
'programing' 카테고리의 다른 글
빈 ng-src는 이미지를 갱신하지 않습니다. (0) | 2023.03.26 |
---|---|
ESLint: 'cy'가 정의되어 있지 않습니다(Cypress). (0) | 2023.03.26 |
comet/server push iframe을 로드하는 동안 브라우저 "throuber of doom"을 중지합니다. (0) | 2023.03.26 |
Oracle에서 내부 Join을 사용하여 문 (0) | 2023.03.26 |
JavaScriptSerializer에서 null/default 값을 가진 속성을 제외할 수 있습니까? (0) | 2023.03.26 |