it-swarm.com.ru

Где я должен положить файл 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

123
mono

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

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

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

rgds

108
miss

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

39
stivlo

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

26
Makatun

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

Пример:

    MyProject
       src
           MyClass.Java
           log4j.properties

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


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

25
KLE

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

16
Byorn

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

PropertyConfigurator.configure("log4j.properties");

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

13
Ani

Пытаться:

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

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

9
Martin OConnor

Мой IDE - NetBeans. Я положил файл log4j.property, как показано на картинках

Root

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 в своих проектах.

7
Ali Mamedov

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

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

5
Brian

Я потратил много времени, чтобы выяснить, почему log4j.properties файл не виден. 
Тогда я заметил, что это было видно для проекта, только когда он был в обоих MyProject/цель/классы / а также MyProject/SRC/основные/ресурсы папки. 
Надеюсь, это кому-нибудь пригодится. 
PS: Проект был основан на Maven.

5
RedCH

Я обнаружил, что 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");
3
Durandal00

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

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

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

1
Robert Squire

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

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

1
sampathpremarathna

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

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

    \Project\
       src\
          log4j.properties
    
1
Sharif

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

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

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

0
Miracle Chan

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

Way1: Если вы пытаетесь в проекте 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

Way2: Если вы пытаетесь использовать файл свойств для проекта Java/maven Используйте PropertyConfigurator 

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

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

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

}

 enter image description here

Way3: Если вы пытаетесь использовать xml в проекте Java/maven Используйте DOMConfigurator 

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

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

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

}

 enter image description here

0
Shivendra Pandey