Log4j: WARN Для журнала в web.xml не найдено никаких добавлений.

Я уже помещал log4jConfigLocation в web.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>

Ответ 1

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

log4j.rootLogger=debug,A1

Ответ 2

У меня был log4j.properties в правильном месте в пути к классам, и я получил это предупреждение со всем, что использовало его напрямую. Код, использующий 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:

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

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

Добавление этого консольного приложения к rootLogger приводит к исчезновению этой жалобы.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

В коде:

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

... позже

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

Исправлена ​​ошибка инициализации регистратора после загрузки конфигурации.

Для вундеркиндов это было "Помещение Декарта b4 d лошади".

Ответ 6

Если вы хотите настроить для автономных приложений log4j, вы можете использовать BasicConfigurator. Это решение не будет хорошо для веб-приложений, таких как среда 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);

Ответ 7

Если вы по-прежнему помогаете, проверьте имя архива, оно должно быть точным "log4j.properties" или "log4j.xml" (с учетом регистра) и следовать подсказке "Alain O'Dea". Я получал ту же ошибку, но после внесения этих изменений все работает отлично. просто как очарование:-). надеюсь, что это поможет.

Ответ 8

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

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

Остерегайтесь имени файла конфигурации. Если вы используете XML, имя файла log4j.xml, иначе log4j.properties.

Ответ 9

Поместите эти строки в начало 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

Ответ 10

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

Ответ 11

Добавьте log4jExposeWebAppRoot → false в ваш web.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>

Ответ 12

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

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

Дело в порядке, я думаю.

Ответ 13

I had configured <filter> in my web.xml which was creating problem. I commented that, worked for me!

Ответ 14

Вы можете добавить эту строку в свой 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