к log4j:предупредить не аппендеры может быть найдена для регистратора в интернете.XML



я уже поставил log4jConfigLocation в интернете.xml, но я все равно получаю следующее предупреждение:



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>
913   13  

13 ответов:

Если это весь файл log4j. properties, похоже,что вы никогда не создаете регистратор. Вам нужна строка типа:

log4j.rootLogger=debug,A1

у меня был log4j. properties в правильном месте в classpath и все еще получил это предупреждение со всем, что использовало его напрямую. Код, использующий log4j через commons-logging, по какой-то причине казался прекрасным.

Если у вас есть:

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:

корневой Регистратор является анонимным, но может быть доступен с помощью Лесоруб.метод getRootLogger (). Нет приложения по умолчанию, прикрепленного к root.

это означает, что вам нужно указать какой-либо аппендер, любой аппендер, в корневой регистратор, чтобы получить ведение журнала.

добавил, что консоль приложение к rootLogger получает эту жалобу, чтобы исчезнуть.

вы можете получить эту ошибку, если log4j.properties нет в classpath.

Это означает, что вы должны двигаться log4j.properties в папку src и установите вывод в папку bin так, чтобы во время выполнения log4j.properties будет читать из папки bin и ваша ошибка будет решена легко.

вы увидите это предупреждение, если log4j не может найти файл "log4j. properties" или "log4j.xml-куда угодно.

или, вы могли бы делать то, что я сделал, и определить регистратор до загрузки файла конфигурации журнала. Это было бы, как говорится: "поставь телегу впереди лошади."

в коде:

public static Logger logger = Logger.getLogger("RbReport");

... позже

PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");

исправление состояло в том, чтобы инициализировать регистратор после загрузки конфигурации.

для вундеркиндов это было "положить Descarte B4 D лошадь".

Если вы хотите настроить для автономных приложений log4j, вы можете использовать BasicConfigurator. Это решение не будет хорошо для веб-приложений, таких как весенние среде.

вам нужно написать -

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 (чувствительный к регистру), и следуйте подсказке "Ален О'Ди". Я получать ту же ошибку, но после внесения этих изменений все работает нормально. так же, как очарование :-). надеюсь, это поможет.

в моем случае решение было легко. Вам не нужно ничего объявлять в своем web.xml.

поскольку ваш проект является веб-приложением, файл конфигурации должен быть включен WEB-INF/classes после развертывания. Я советую вам создать папку ресурсов Java (src/main/resources) для этого (лучшая практика). Другой подход заключается в том, чтобы поместить конфигурационный файл в ваш 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>

смотрите эту ссылку для более подробной информации :http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

хорошо, я вижу много ответов и некоторые очень правильные. Однако никто не исправил мою проблему. Проблема в моем случае заключалась в том, что разрешения файловой системы UNIX имели файл log4j.properties, который я редактировал на сервере как принадлежащий root. и читается только корень. Однако веб-приложение, которое я развертывал, было в tomcat, не могло прочитать файл, поскольку tomcat работает как пользователь tomcat в системах Linux по умолчанию. Надеюсь, это поможет. поэтому решение было набрано "chown tomcat:tomcat log4j. properties" в каталоге где находится файл log4j. properties.

У меня была та же проблема . Те же параметры конфигурации и то же предупреждающее сообщение . Что работал для меня было : изменение порядка записи .

  • я поставил записи для конфигурации журнала [ контекст param и слушатель ] в верхней части файла [ перед записью для applicationContext.xml ] и это сработало .

порядок имеет значение , я думаю .

добавить log4jExposeWebAppRoot - > false в вашем интернете.XML. Это работает со мной:)

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

вы можете добавить эту строку в файл XML

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE beans PUBLIC
 "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

и убедитесь, что xml-файл находится в папке src

Comments

    Ничего не найдено.