log4j.properties игнорируется

У меня есть приложение Java EE 6 Wicket, развернутое с помощью maven с использованием IntelliJ IDEA 9.0.3 на Glassfish v3.0.1. Я использую slf4j-log4j12-1.5.6 с slf4j-api-1.5.8 и log4j-1.2.16 для ведения журнала.

Раньше он работал нормально, когда я развертывал через netbeans или eclipse, однако, когда я развертываю с помощью IntelliJ IDEA, мой файл log4j.properties игнорируется, а ведение журнала Glassfish обрабатывает мои сообщения журнала. Я не думаю, что IDEA имеет к этому какое-то отношение, должно быть, что-то еще изменилось, я просто не могу понять, что.

Я проверил, что мой файл log4j.properties находится в моем каталоге WEB-INF/classes, а файлы jar slf4j/log4j находятся в каталоге WEB-INF/lib моей войны. Есть ли какая-то конфигурация, которой мне не хватает, чтобы это работало?

благодаря.

редактировать: обновлено с дополнительной информацией, опубликованными зависимостями pom.

Вот соответствующий раздел из моего pom.xml:

    <!-- Guava -->

    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>r05</version>
    </dependency>

    <!-- Test -->

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.extras</groupId>
        <artifactId>glassfish-embedded-all</artifactId>
        <version>3.0</version>
        <scope>test</scope>
    </dependency>

    <!-- Java EE 6 -->

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>bean-validator</artifactId>
        <version>3.0-JBoss-4.0.0.Beta3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- Wicket -->

    <dependency>
        <groupId>org.apache.wicket</groupId>
        <artifactId>wicket</artifactId>
        <version>1.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.wicket</groupId>
        <artifactId>wicket-auth-roles</artifactId>
        <version>1.4.9</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.weld</groupId>
        <artifactId>weld-wicket</artifactId>
        <version>1.0.1-Final</version>
    </dependency>

    <!-- Hibernate -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.5.1-Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.5.1-Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.2.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.5.1-Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>3.5.1-Final</version>
    </dependency>


    <!-- Database -->

    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>8.4-701.jdbc4</version>
    </dependency>


    <!-- Logging -->

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.6</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

</dependencies>

person kgrad    schedule 09.08.2010    source источник
comment
Не могли бы вы опубликовать вывод log4j.debug=true?   -  person fglez    schedule 12.08.2010
comment
@antismap - я установил -Dlog4j.debug в настройках gfv3 jvm, однако он был немедленно проигнорирован.   -  person kgrad    schedule 12.08.2010
comment
Что возвращает System.getProperty(log4j.defaultinitoverride)?   -  person Kjetil Ødegaard    schedule 23.08.2010


Ответы (9)


Обновление: я попытался воспроизвести проблему. Я создал простой проект Wicket (та же версия, что и у вас):

mvn archetype:create \
-DarchetypeGroupId=org.apache.wicket \
-DarchetypeArtifactId=wicket-archetype-quickstart \
-DarchetypeVersion=1.4.9 \
-DgroupId=com.mycompany \
-DartifactId=my-wicketapp 

Который имеет простой журнал log4j.properties для стандартного вывода.

log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\n

log4j.rootLogger=INFO,Stdout

log4j.logger.org.apache.wicket=INFO
log4j.logger.org.apache.wicket.protocol.http.HttpSessionStore=INFO
log4j.logger.org.apache.wicket.version=INFO
log4j.logger.org.apache.wicket.RequestCycle=INFO

Потом:

  • I added all your dependencies (or modified the versions of existing one to match yours)
    • I just did some cleanup e.g. in the Hibernate dependencies, you don't need to declare them all, leverage the transitive dependencies mechanism
  • Я добавил соответствующие repositories и pluginRepositories
  • Я добавил зависимость Glassfish javax.servlet, чтобы сборка прошла успешно.
  • Я добавил плагин embedded-glassfish, чтобы проверить все это.
  • I made a few other unrelated changes
    • I changed the compiler settings to 1.6
    • Я объявил slf4j-api в элементе dependencyManagement, чтобы хорошо контролировать версию в транзитивных зависимостях.

Полный pom.xml выглядит так (так что любой может воспроизвести):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany</groupId>
  <artifactId>my-wicketapp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <!-- TODO project name  -->
  <name>quickstart</name>
  <description/>
  <!--
        TODO <organization> <name>company name</name> <url>company url</url>
        </organization>
    -->
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <repositories>
    <!-- For Hibernate Artifacts -->
    <repository>
      <id>repository.jboss.org-public</id>
      <name>JBoss repository</name>
      <url>https://repository.jboss.org/nexus/content/groups/public</url>
    </repository>
    <!-- repository for Java EE 6 Binaries -->
    <repository>
      <id>java.net2</id>
      <name>Repository hosting the jee6 artifacts</name>
      <url>http://download.java.net/maven/2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <!-- GlassFish repository for the embedded-glassfish plugin -->
    <pluginRepository>
      <id>glassfish</id>
      <name>GlassFish Maven 2 Repository</name>
      <url>http://download.java.net/maven/glassfish</url>
    </pluginRepository>
  </pluginRepositories>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>3.5.5-Final</version>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>r05</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.servlet</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>bean-validator</artifactId>
      <version>3.0-JBoss-4.0.0.Beta3</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
    <!--  WICKET DEPENDENCIES -->
    <dependency>
      <groupId>org.apache.wicket</groupId>
      <artifactId>wicket</artifactId>
      <version>${wicket.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.wicket</groupId>
      <artifactId>wicket-auth-roles</artifactId>
      <version>${wicket.version}</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.weld</groupId>
      <artifactId>weld-wicket</artifactId>
      <version>1.0.1-Final</version>
    </dependency>
    <!--
            OPTIONAL <dependency> <groupId>org.apache.wicket</groupId>
            <artifactId>wicket-extensions</artifactId>
            <version>${wicket.version}</version> </dependency>
        -->
    <!-- LOGGING DEPENDENCIES - LOG4J -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    <!--  JUNIT DEPENDENCY FOR TESTING -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
    <!-- GLASSFISH EMBEDDED FOR TESTING -->
    <dependency>
      <groupId>org.glassfish.extras</groupId>
      <artifactId>glassfish-embedded-all</artifactId>
      <version>3.0.1</version>
      <scope>test</scope>
    </dependency>
    <!--  JETTY DEPENDENCIES FOR TESTING  -->
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-util</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mortbay.jetty</groupId>
      <artifactId>jetty-management</artifactId>
      <version>${jetty.version}</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <resources>
      <resource>
        <filtering>false</filtering>
        <directory>src/main/resources</directory>
      </resource>
      <resource>
        <filtering>false</filtering>
        <directory>src/main/java</directory>
        <includes>
          <include>**</include>
        </includes>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <filtering>false</filtering>
        <directory>src/test/java</directory>
        <includes>
          <include>**</include>
        </includes>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </testResource>
    </testResources>
    <plugins>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <optimize>true</optimize>
          <debug>true</debug>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <configuration>
          <downloadSources>true</downloadSources>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.glassfish</groupId>
        <artifactId>maven-embedded-glassfish-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
          <serverID>server</serverID>
          <name>server</name>
          <app>${project.build.directory}/${project.build.finalName}.war</app>
          <port>8080</port>
          <instanceRoot>${project.build.directory}/gfe-${maven.build.timestamp}</instanceRoot>
          <!--contextRoot>${build.finalName}</contextRoot-->
          <autoDelete>true</autoDelete>
          <!--configFile>${basedir}/domain.xml</configFile-->
        </configuration>
      </plugin>
    </plugins>
  </build>
  <properties>
    <wicket.version>1.4.9</wicket.version>
    <jetty.version>6.1.4</jetty.version>
    <slf4j.version>1.5.6</slf4j.version>
  </properties>
</project>

И когда я запускаю проект с плагином embedded-glassfish:

$ mvn package
...
$ mvn embedded-glassfish:run
...

и получить доступ к http://localhost:8080/server в браузере, я получаю свои журналы в стандартном выводе как ожидал:

...
INFO: [WicketApplication] Started Wicket version 1.4.9 in development mode
********************************************************************
*** WARNING: Wicket is running in DEVELOPMENT mode.              ***
***                               ^^^^^^^^^^^                    ***
*** Do NOT deploy to your live server(s) without changing this.  ***
*** See Application#getConfigurationType() for more information. ***
********************************************************************

Интересно, репрезентативно это или нет?


Я проверил войну, log4j.properties действительно находится в WEB-INF/classes. У меня нет log4j.jar, у меня есть slf4j-log4j12.jar.

slf4j-log4j12.jar не является заменой log4j.jar, slf4j-log4j12.jar является привязкой к log4J версии 1.2, вам все еще нужен log4j.jar. Из документации SLF4J:

Привязка к системе ведения журналов во время развертывания

Как упоминалось ранее, SLF4J поддерживает различные платформы ведения журналов. Дистрибутив SLF4J поставляется с несколькими jar-файлами, называемыми «привязками SLF4J», причем каждая привязка соответствует поддерживаемой платформе.

slf4j-log4j12-1.6.1.jar: привязка для log4j версии 1.2, широко используемой среды ведения журналов. Вам также необходимо поместить log4j.jar в путь к классам.

Интересно, как вы заставили это работать в NetBeans и Eclipse.

person Pascal Thivent    schedule 09.08.2010
comment
Я добавил log4j-1.2.14 в свои зависимости maven, но не повезло, я убедился, что банки slf4j и log4j действительно были в моей библиотеке, а log4j.properties находится в WEB-INF/classes в моей взорванной войне. - person kgrad; 10.08.2010
comment
@Pascal Thivent - Просто чтобы быть полностью уверенным, что я снова запустил его под netbeans, и он больше не регистрируется там должным образом, что имеет смысл, я понятия не имею, почему он внезапно перестал использовать мою конфигурацию log4j ... Возможно, я добавил зависимость, которая конфликтует ? Поможет ли вообще вставка моего помпона? - person kgrad; 10.08.2010
comment
@kgrad: Публикация вашего pom, по крайней мере, поможет проверить зависимости. - person Pascal Thivent; 10.08.2010
comment
@Pascal Thivent: я изменил свой код регистратора, включив в него org.apache.log4j.Logger и используя Logger.getLogger() для проверки происходящего. Теперь мой файл-приложение создает файл, однако файл пуст, а журнал сервера все еще использует регистратор Glassfish. Glassfish, кажется, захватывает мой экземпляр регистратора и каким-то образом использует свой собственный. Я знаю, что он хотя бы читает мой конфиг, так как файл сейчас создается, хотя и пустой... - person kgrad; 10.08.2010
comment
@kgrad: сегодня вечером я проведу простой тест (но я уже могу сказать вам, что без проблем использую GlassFish 3 с SFL4F в своем приложении). - person Pascal Thivent; 10.08.2010
comment
@Pascal Thivent - Удалось воспроизвести проблему? Я не думаю, что делаю что-то нестандартное, из всего, что я прочитал, это должно работать, если у меня есть правильные банки в пути к классам... Это работало! - person kgrad; 11.08.2010
comment
@Pascal Thivent - у меня была проблема с Glassfish, которая побудила меня переустановить, теперь я получаю эту ошибку в журнале с log4j-1.2.16: log4j:ERROR log4j вызывается после выгрузки, см. logging.apache.org/log4j/1.2/faq.html#unload. java.lang.IllegalStateException: нарушение инварианта класса... исходит от GetLogger - person kgrad; 13.08.2010
comment
У меня была куча репозиториев, которые мне не нужны, codehaus, ibiblio и старый jboss, когда я удалил их, но оставил все как есть, все заработало. Я могу только догадываться, что в одном из этих репозиториев была старая версия библиотеки или что-то плохое экспортировалось. В любом случае отметьте ваш ответ как принятый, спасибо! - person kgrad; 24.08.2010
comment
@kgrad: Рад, что проблема решена (даже если я не совсем понимаю, как). Пожалуйста. - person Pascal Thivent; 24.08.2010
comment
@kgrad: Кстати, награды нет? :) - person Pascal Thivent; 24.08.2010
comment
@Pascal Thivent - Это делает нас двоих (не понимающих). Я просто счастлив, что это работает, и я больше не прикасаюсь к нему. Бонус истек вчера! Если бы вы только отредактировали свой материал раньше! :( - person kgrad; 24.08.2010
comment
@kgrad: Да (до истечения срока действия), но я не знал, что награда может просто исчезнуть. Было просто любопытно. - person Pascal Thivent; 24.08.2010
comment
@Pascal Thivent - ах, не видел его до сегодняшнего утра, чувствую себя плохо сейчас, как-то глупо, что он исчез, моя репутация ушла в небытие (вы не получите ее обратно), но награды длятся, по-видимому, только неделю . - person kgrad; 24.08.2010
comment
@kgrad: О, не расстраивайся и не волнуйся, я действительно просто просил удовлетворить свое любопытство. - person Pascal Thivent; 25.08.2010

У меня была точно такая же проблема.

Только Log4j отлично работает:

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.16</version>
</dependency>

Но если я попытаюсь использовать Slf4j поверх него, то мой файл «src/resources/log4j.properties» больше не будет найден, даже если Maven добавит его в каталог, который находится в пути к классам.

Итак, это не работает из коробки:

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.16</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>jcl-over-slf4j</artifactId>
   <version>1.6.4</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>1.6.4</version>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.6.4</version>
</dependency>

Чтобы заставить его работать, вы должны явно добавить «log4j.properties» в путь к классам или указать серверу, где его найти! Способ добиться этого (этот пример для Windows):

-Dlog4j.configuration=file:C:\[pathToYourProject]\trunk\target\classes\log4j.properties

В Eclipse (если это то, что вы используете) вы можете добавить ту же строку в свои аргументы Run Configuration / VM.

person electrotype    schedule 18.02.2012

У меня были те же проблемы. Решение простое — все зависимости журналирования должны стоять перед Glassfish в пути к классам.

Обратите внимание, что в более старых версиях Maven2 есть некоторые проблемы с согласованностью пути к классам. Я использую версию 2.2.1, в которой эта проблема исправлена ​​(кажется, она была исправлена ​​в версии 2.0.9).

person dmatej    schedule 28.03.2011

Я предлагаю удалить все зависимости slf4j и изменить код ведения журнала, чтобы напрямую использовать API Log4j (если это не слишком много работы, не знаю размер вашего проекта). Как только это сработает, подумайте, действительно ли вам нужна гибкость, предлагаемая slf4j. Если вы это сделаете, выберите правильную версию slf4j (slf4j-log4j12 может не подходить для log4j 1.2.16) и интегрируйте ее обратно.

Недавно я столкнулся с slf4j и, в конце концов, вообще удалил его, потому что столкнулся с похожими проблемами конфигурации.

person Adriaan Koster    schedule 19.08.2010

Ознакомьтесь с руководством по log4j. В разделе «Процедура инициализации по умолчанию» описывается, как log4j попытается найти файл инициализации. Может быть, вы можете попробовать некоторые из этих вариантов, чтобы все заработало.

person FrVaBe    schedule 17.08.2010

Две наиболее вероятные вещи, которые приходят на ум:

  1. убедитесь, что файл log4j.properties находится в WEB-INF/classes развертывания. Я предполагаю, что вы имеете в виду, что это в вашем WEB-INF/классах в вашей кодовой базе, но подтвердили ли вы, что это имеет место в войне, которая была отправлена ​​​​стеклянной рыбе?
  2. убедитесь, что ваш log4j.jar находится в развернутом WEB-INF/lib

Поскольку он работает в некоторых сценариях развертывания, я подозреваю, что проблема заключается в вашей военной упаковке при запуске через Maven. Вышеуказанные пункты должны помочь вам подтвердить это.

person Paul Jowett    schedule 09.08.2010
comment
jowierun — я проверил войну, log4j.properties действительно находится в WEB-INF/classes. У меня нет log4j.jar, у меня есть slf4j-log4j12.jar. Странно то, что эта точная конфигурация правильно работала в netbeans и eclipse до того, как мы перешли на IDEA. - person kgrad; 10.08.2010
comment
Когда мне нужна воспроизводимость, я запускаю maven из командной строки и вручную развертываю файлы WAR. Возможно, вам следует попробовать это, а также сравнить файлы WAR, созданные таким образом, с файлами WAR, созданными/развернутыми соответствующими IDE. - person Stephen C; 10.08.2010
comment
@Stephen C - я развернул войну через командную строку и проверил server.log, но до сих пор не вижу, чтобы log4j работал должным образом, а также не работает мой файловый аппликатор. - person kgrad; 10.08.2010
comment
@kgrad - на всякий случай, вы искали какие-либо ошибки в выводе при запуске? В прошлом я видел ошибки, скрывающиеся в массе запуска сервера приложений. Кроме того, возможно, стоит выгрузить путь к классам из класса или JSP в вашем развертывании - это должно подтвердить, к каким банкам у вас есть доступ. - person Paul Jowett; 10.08.2010
comment
@kgrad - вы проверили, что файл log4j.jar находится в файле WAR, как вам сказал @jowierun? - person Stephen C; 10.08.2010
comment
@Stephen C - Да, log4j-1.2.16.jar находится в каталоге WAR WEB-INF/lib, а также: slf4j-api-1.5.8, slf4j-log4j12-1.5.6 и log4j.properties находятся в WEB. -INF/классы - person kgrad; 10.08.2010
comment
@jowierun - ошибок при запуске нет. Я напечатал путь к классам, и он точно такой же, как показано в войне, присутствуют как slf4j, так и log4j jar, по-прежнему игнорируя мой файл свойств и используя экземпляр журнала jul Glassfish для печати в журнал. - person kgrad; 10.08.2010
comment
Если это имеет значение, когда я запускаю стеклянную рыбу, она экспортирует logging.properties в domain1/config. - person kgrad; 10.08.2010

У меня есть следующие зависимости ведения журнала:

<dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>0.9.17</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.5.8</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
        <scope>runtime</scope>
    </dependency>

под /src/main/resources/ у меня есть logback.xml, определяющий различные аспекты (appenders,..). Это подхватывается maven и копируется в WEB-INF/classes.

надеюсь, это помогло

person bert    schedule 19.08.2010

Я бы поддержал ответ Адриана Костера. Однако, если ваш чистый log4j не работает, попробуйте следующее. Создайте простой класс, подобный этому

import org.apache.log4j.Logger;
public class LogTest {
    private static Logger log;

    public static void main(String[] args) {
        log = Logger.getLogger(LogTest.class);
    }
}

... и поставьте точку останова в методе org.apache.log4j.helpers.Loader#getResource. Он пытается вытащить log4j.xml из загрузчика классов:

url = classLoader.getResource(resource);      

Таким образом, вы можете легко заглянуть внутрь загрузчика классов и посмотреть, какие пути он использует (и почему он не может найти ваш log4j.xml).

person Denis Kniazhev    schedule 19.08.2010

Также очень важно, чтобы библиотека log4j была скомпилирована после всех модулей библиотек, используемых в проекте. Если вы не установите его как последний объект, журналы из более поздних модулей/библиотек не будут отображаться стандартным образом для log4j.properties.

person Michał Rowicki    schedule 04.08.2014