Umieściłem już log4jConfigLocation w web.xml, ale nadal otrzymuję następujące ostrzeżenie:
log4j:WARN No appenders could be found for logger ⤦
⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
Co mnie ominęło?
<?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>
java
spring
spring-mvc
log4j
cometta
źródło
źródło
Odpowiedzi:
Jeśli to cały plik log4j.properties, wygląda na to, że nigdy nie tworzysz programu rejestrującego. Potrzebujesz linii takiej jak:
źródło
log4j.properties
plik w ścieżce klasy, nadal ostrzegam wyświetla w konsoli.Miałem log4j.properties we właściwym miejscu w ścieżce klas i nadal otrzymałem to ostrzeżenie ze wszystkim, co użyło go bezpośrednio. Kod wykorzystujący log4j przez wspólne logowanie wydawał się z jakiegoś powodu w porządku.
Jeśli masz:
Zmień to na:
Według http://logging.apache.org/log4j/1.2/manual.html :
Oznacza to, że aby rejestracja się odbyła, musisz określić jakiś program dołączający, dowolny program dołączający, do głównego programu rejestrującego.
Dodanie tego programu dołączającego konsolę do rootLoggera powoduje zniknięcie tej skargi.
źródło
Możesz otrzymać ten błąd, jeśli
log4j.properties
nie ma Cię w ścieżce klas.Oznacza to, że musisz przenieść
log4j.properties
do folderu src i ustawić dane wyjściowe do folderu bin, aby w czasie wykonywanialog4j.properties
odczytywać z folderu bin, a błąd zostanie łatwo rozwiązany.źródło
To ostrzeżenie zostanie wyświetlone, jeśli program log4j nie może nigdzie znaleźć pliku „log4j.properties” lub „log4j.xml”.
źródło
Lub możesz zrobić to, co zrobiłem i zdefiniować rejestrator przed załadowaniem pliku konfiguracyjnego dziennika. Byłoby tak, jak mówią: „Stawianie wozu przed koniem”.
W kodzie:
public static Logger logger = Logger.getLogger("RbReport");
... później
PropertyConfigurator.configure(l4j); logger = Logger.getLogger("RbReport");
Naprawiono zainicjowanie rejestratora po załadowaniu konfiguracji.
Dla geeków było to „Putting Descarte b4 d horse”.
źródło
Jeśli chcesz skonfigurować samodzielne aplikacje log4j, możesz użyć BasicConfigurator. To rozwiązanie nie będzie dobre dla aplikacji internetowych, takich jak środowisko Spring.
Musisz napisać-
lub
ServletContext sc = config.getServletContext(); String log4jLocation = config.getInitParameter("log4j-properties-location"); String webAppPath = sc.getRealPath("/"); String log4jProp = webAppPath + log4jLocation; PropertyConfigurator.configure(log4jProp);
źródło
Jeśli nadal potrzebujesz pomocy, sprawdź nazwę archiwum, musi to być dokładnie „log4j.properties” lub „log4j.xml” (z uwzględnieniem wielkości liter) i postępuj zgodnie z podpowiedzią „Alain O'Dea”. Otrzymałem ten sam błąd, ale po wprowadzeniu tych zmian wszystko działa dobrze. po prostu jak urok :-). mam nadzieję że to pomoże.
źródło
W moim przypadku rozwiązanie było łatwe. Nie musisz niczego deklarować w swoim
web.xml
.Ponieważ projekt jest aplikacją internetową, plik konfiguracyjny powinien być włączony
WEB-INF/classes
po wdrożeniu. W tym celu radzę utworzyć folder zasobów Java (src/main/resources
) (najlepsza praktyka). Innym podejściem jest umieszczenie pliku konfiguracyjnego w swoimsrc/main/java
.Uważaj na nazwę pliku konfiguracyjnego. Jeśli używasz XML, nazwa pliku to
log4j.xml
, w przeciwnym razielog4j.properties
.źródło
Umieść te wiersze na początku pliku 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>
źródło
OK, widzę wiele odpowiedzi, a niektóre są bardzo poprawne. Jednak żaden nie rozwiązał mojego problemu. Problem w moim przypadku polegał na tym, że uprawnienia systemu plików UNIX miały plik log4j.properties, który edytowałem na serwerze jako należący do roota. i czytelne tylko dla roota. Jednak wdrażana przeze mnie aplikacja internetowa nie mogła odczytać pliku na Tomcat, ponieważ Tomcat domyślnie działa jako użytkownik tomcat w systemach Linux. Mam nadzieję że to pomoże. rozwiązaniem było więc wpisanie „chown tomcat: tomcat log4j.properties” w katalogu, w którym znajduje się plik log4j.properties.
źródło
Dodaj log4jExposeWebAppRoot -> false w swoim web.xml. U mnie działa :)
<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>
źródło
Miałem ten sam problem. Te same ustawienia konfiguracji i ten sam komunikat ostrzegawczy. U mnie zadziałało: Zmiana kolejności wpisów.
Myślę, że Zakon ma znaczenie.
źródło