Где я должен поместить файл log4j.properties?

Я написал проект веб-сервиса, используя netbeans 6.7.1 с glassfish v2.1, поместите log4j.properties в корневой каталог проекта и используйте:

static Logger logger = Logger.getLogger(MyClass.class);

в конструкторе:

PropertyConfigurator.configure("log4j.properties");

и в функциях:

logger.info("...");
logger.error("...");
// ...

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

log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

пример проекта можно получить из http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8

Ответ 1

Я знаю, что немного поздно ответить на этот вопрос, и, возможно, вы уже нашли решение, но я отправляю решение, которое я нашел (после того, как я много сделал для googled), так что это может немного помочь:

  • Поместите log4j.properties в WEB-INF\классы проекта, как упоминалось ранее в этом потоке.
  • Поместите log4j-xx.jar под WEB-INF\lib
  • Проверьте, загружен ли log4j: добавьте -Dlog4j.debug @конец ваших java-параметров tomcat

Надеюсь, это поможет.

Rgds

Ответ 2

Как уже было сказано, log4j.properties должен быть в каталоге, включенном в путь к классам, я хочу добавить, что в проекте с mavenized хорошим местом может быть src/main/resources/log4j.properties

Ответ 3

Вы можете указать расположение файла конфигурации с аргументом VM -Dlog4j.configuration = "file:/C:/workspace3/local/log4j.properties"

Ответ 4

Вы должны поместить его в корневой каталог, соответствующий вашему контексту выполнения.

Пример:

    MyProject
       src
           MyClass.java
           log4j.properties

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


Я предлагаю использовать log4j.xml вместо log4j.properties. У вас есть больше возможностей, получите помощь от вашей среды разработки и т.д....

Ответ 5

Для проекта на основе Maven держите свои log4j.properties в src/main/resources. Больше ничего не делать!

Ответ 6

Если вы поместите log4j.properties внутри src, вам не нужно использовать оператор -

PropertyConfigurator.configure("log4j.properties");

Он будет автоматически принят, поскольку файл свойств находится в пути к классам.

Ответ 7

Try:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));

Ответ 8

Файл должен быть расположен в каталоге WEB-INF/classes. Эта структура каталогов должна быть упакована в файл войны.

Ответ 9

My IDE - это NetBeans. Я поместил файл log4j.property, как показано на рисунках

Корень

project's root folder

Web

web folder

WEB-INF

WEB-INF folder

Чтобы использовать этот файл свойств, вы должны написать этот код:

package example;

import java.io.File;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import javax.servlet.*;
public class test {

public static ServletContext context;
static Logger log = Logger.getLogger("example/test");

public test() {

        String homeDir = context.getRealPath("/");
        File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
        PropertyConfigurator.configure(propertiesFile.toString());
        log.info("This is a test");
    }
}

Вы можете определить статический контекст ServletContext из другого JSP файла. Пример:

test.context = getServletContext(); 
test sample = new test(); 

Теперь вы можете использовать файл log4j.property в своих проектах.

Ответ 10

Несколько технически правильных конкретных ответов уже предоставлены, но в целом они могут быть в любом месте пути пути выполнения, т.е. везде, где JVM запрашивает классы.

Это может быть каталог /src в каталоге Eclipse или WEB-INF/classes в развернутом приложении, но лучше всего знать концепцию пути к классу и, почему файл находится в нем, не просто рассматривать WEB -INF/classes как "волшебный" каталог.

Ответ 11

Я потратил много времени, чтобы понять, почему файл log4j.properties не отображается.
Затем я заметил, что он был видимым для проекта только тогда, когда он был в папках MyProject/target/classes/ и MyProject/src/main/resources.
Надеюсь, это будет полезно кому-то.
PS: Проект был основан на maven.

Ответ 12

Я обнаружил, что Glassfish по умолчанию рассматривает [местоположение установки Glassfish]\glassfish\domains [ваш домен]\в качестве рабочего каталога по умолчанию... вы можете удалить файл log4j.properties в этом месте и инициализировать его в своем код с использованием PropertyConfigurator, как ранее упоминалось...

Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");

Ответ 13

Я не знаю, что это правильный путь. Но он решил мою проблему. поместите файл log4j.properties в "папку проекта" /config и используйте PropertyConfigurator.configure( "config//log4j.properties" );

он будет работать с IDE, но не при запуске файла jar. когда вы запускаете файл jar самостоятельно, просто скопируйте файл log4j.properties в папку, в которой находится файл jar. Когда файл jar и property в том же каталоге работает хорошо.

Ответ 14

Поместите log4j.properties в путь к классам. Вот два случая, которые помогут вам определить правильное местоположение -  1. Для веб-приложения classpath является /WEB -INF/classes.

\WEB-INF      
    classes\
        log4j.properties
  1. Для тестирования из main/unit test путь к классам является исходным каталогом

    \Project\
       src\
          log4j.properties
    

Ответ 15

Если у вас есть стандартная установка Maven Project с Intellij, вы можете просто поместить файл свойств log4j в:

проект/SRC/основные/ресурсы

IntelliJ - расположение объектов log4j

Ответ 16

На самом деле, я только что столкнулся с этой проблемой в стандартной структуре Java-проекта следующим образом:

\myproject
    \src
    \libs
    \res\log4j.properties

В Eclipse мне нужно добавить папку res для пути сборки, однако в Intellij мне нужно пометить папку res как ресурсы, как показано на связанном скриншоте: щелкните правой кнопкой мыши на папке res и отметьте как ресурсы.

Ответ 17

Есть много способов сделать это:

Способ 1: если вы пытаетесь в проекте Maven без использования PropertyConfigurator

Во-первых: проверьте каталог ресурсов на scr/main

  if available,
       then: create a .properties file and add all configuration details.
  else
       then: create a directory named resources and a file with .properties     
write your configuration code/details.

следует за скриншотом:

![enter image description here

Способ 2: Если вы пытаетесь с помощью файла свойств для проекта Java/Maven Используйте PropertyConfigurator

Разместите файл свойств в любом месте проекта и укажите правильный путь. скажем: src/javaLog4jProperties/log4j.properties

статическая {

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

enter image description here

Способ 3: Если вы пытаетесь использовать XML в проекте Java/Maven, используйте DOMConfigurator

Разместите файл свойств в любом месте проекта и укажите правильный путь. скажем: src/javaLog4jProperties/log4j.xml

статическая {

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

enter image description here

Ответ 18

Вам не нужно указывать PropertyConfigurator.configure("log4j.properties"); в вашем классе Log4J, если вы уже определили свойства log4j.properties в структуре вашего проекта.

В случае веб-динамического проекта: -

Вам нужно сохранить ваши log4j.properties в WebContent → WEB-INF → log4j.properties

Я надеюсь, что это может помочь вам.