log4j.properties 파일을 어디에 두어야합니까?


135

glassfish v2.1과 함께 netbeans 6.7.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 에서 얻을 수 있습니다 .


2
PropertyConfigurator.configure ( "log4j.properties")의 목적은 무엇입니까? 선 ? 나는 이것을 사용하지 않습니다. log4j.xml 파일은 클래스 경로의 "어딘가"에 있어야합니다.
— Antoine Claval

1
봐 stackoverflow.com/questions/1140358/... log4j 구성 자체가 기록되는 방법을 찾을 수 있습니다. 일부 컨테이너에는 자체 log4j 구성이 있기 때문에 이것이 도움이 될 것이라고 생각합니다.
— dz.

@AntoineClaval 나는 저주받은 선을 제거하고 매력처럼 작동했습니다. 남자, 얼마나 타고 ..
— Siddharth

답변:


114

나는이 질문에 대답하는 것이 약간 늦었고 이미 해결책을 찾았을 수도 있지만, 내가 많이 찾은 후에 찾은 해결책을 게시하고 있으므로 약간 도움이 될 수 있습니다.

  1. 이 스레드에서 이전에 언급 한대로 프로젝트의 WEB-INF \ classes 아래에 log4j.properties를 두십시오.
  2. WEB-INF \ lib 아래에 log4j-xx.jar을 넣으십시오.
  3. log4j 가로 드되었는지 테스트 : -Dlog4j.debugTomcat의 Java 옵션 끝에 @ 추가

이것이 도움이되기를 바랍니다.

rgds


톰캣을 포 그라운드로 가져 오려면 'run'명령을 사용하십시오. 명령 행을 통해 Java 옵션을 전달할 수 있습니다. 또한 bash에 -x 옵션을 사용하면 옵션에 어떤 일이 발생하는지 정확하게 확인할 수 있습니다. JAVA_OPTS = -Dlog4j.debug bash -x /usr/local/tomcat/bin/catalina.sh run
— RoyM

50

이미 언급했듯이 log4j.properties는 클래스 경로에 포함 된 디렉토리에 있어야합니다. 나는 mavenized 프로젝트에서 좋은 장소가 될 수 있다고 덧붙이고 싶습니다. src/main/resources/log4j.properties


26

VM 인수 -Dlog4j.configuration = "file : / C : /workspace3/local/log4j.properties"를 사용하여 구성 파일 위치를 지정할 수 있습니다.


그것은 유닉스 시스템에서 파일 : / 또는 file : ///입니까 아니면 / path / to / file입니까?
— morpheus

Windows의 경우 파일 : /입니다. 유닉스가 동일하다고 생각합니다.
— Amalgovinus

이것은 로그 수준이 다른 여러 환경을 고려하는 유일한 답변입니다.
— Matt

맥 OS에서 자유 서버의 jvm.options에 따옴표 사용 파일을 사용하지 않는 : ///
— wnm3

그냥 힘의 도움을 약간 좌절 저장 업데이 트 : 당신이 log4j2를 사용하는 경우, 인수의 이름이 변경되었습니다log4j.configurationFile
— dan.m은 user2321368했다

25

실행 컨텍스트에 해당하는 루트 디렉토리에 저장해야합니다.

예:

    MyProject
       src
           MyClass.java
           log4j.properties

다른 프로젝트에서 실행을 시작하면 실행을 시작하는 데 사용 된 프로젝트에 해당 파일이 있어야합니다. 예를 들어, 다른 프로젝트에 일부 JUnit 테스트가있는 경우 log4j.properties 파일도 있어야합니다.


log4j.properties 대신 log4j.xml을 사용하는 것이 좋습니다. 더 많은 옵션이 있으며 IDE에서 도움을 받으십시오 ...


예를 들어 거의 모든 디렉토리에 넣었습니다. 그러나 GF는 속성을 올바른 디렉토리로 복사하지 않기 때문에 Glassfish deploy project에는 도움이되지 않습니다. GF가 그것을 잃는 것처럼 보입니다.
— mono

사실, 문제는 넷빈 자동 배포에서 비롯된 것 같습니다. 관리 콘솔에서 war 파일로 배포하려고하면 괜찮습니다. 내가 옳은지 모르겠습니다. 내가 옳다면 왜 프로젝트를 자동 배포 할 때 netbeans가 이러한 파일을 배포하지 않습니까?
— 모노

그것은 효과가 있었다! 그러나 그것은 우아하지 않습니다 ... 그것은 "자원"종류의 폴더에 더 잘 위치한다고 생각합니다.
— Adams.H

17

Maven 기반 프로젝트의 경우 src / main / resources에 log4j.properties를 유지하십시오. 할 일이 없습니다!


그게 다이며 Maven Projects의 XMLConfiguration과 같은 다른 속성 파일에서도 동일합니다. 감사!
— 라몬

13

src에 log4j.properties를 넣으면 다음 명령문을 사용할 필요가 없습니다.

PropertyConfigurator.configure("log4j.properties");

특성 파일이 클래스 경로에 있으면 자동으로 가져옵니다.


10

시험:

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

9

파일은 WEB-INF / classes 디렉토리에 있어야합니다. 이 디렉토리 구조는 war 파일 내에 패키지되어야합니다.


이론적으로는 정답이지만 문제는 glassfish deploy war 파일을 사용할 때 log4j.properties가 손실된다는 것입니다.
— mono

3
이 WEB-INF / 클래스에있을 전쟁 파일 내에 포장한다
— 마틴 OConnor

@mono-최소한 다운로드 가능한 아카이브에는 web / WEB-INF / classes에 log4j.properties가 없습니다. 마틴이 옳습니다.
— fvu

비결은 코드를 빌드하는 과정에서 src 폴더 (루트 소스 폴더)에 넣는 것입니다. 파일은 클래스 폴더로 자동 전송됩니다.
— Mostafa Zeinali

7

내 IDE는 NetBeans입니다. 그림과 같이 log4j.property 파일을 넣었습니다.

뿌리

프로젝트의 루트 폴더

편물

웹 폴더

WEB-INF

WEB-INF 폴더

이 특성 파일을 사용하려면 다음 코드를 작성해야합니다.

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");
    }
}

다른 JSP 파일에서 정적 ServletContext 컨텍스트 를 정의 할 수 있습니다 . 예:

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

이제 프로젝트에서 log4j.property 파일을 사용할 수 있습니다.


5

기술적으로 올바른 특정 답변이 이미 제공되었지만 일반적으로 런타임 클래스 경로의 어디에서나 (예 : JVM이 클래스를 찾는 위치) 수 있습니다.

이것은 Eclipse의 / src 디렉토리 또는 배치 된 앱의 WEB-INF / classes 디렉토리 일 수 있지만 클래스 경로 개념과 파일이 왜 배치되어 있는지 이해하는 것이 가장 좋습니다 .WEB-INF / "매직"디렉토리로서의 클래스.


5

log4j.properties 파일이 보이지 않는 이유를 알아 내기 위해 많은 시간을 보냈습니다 .
그런 다음 프로젝트가 MyProject / target / classes / 및 MyProject / src / main / resources 폴더 모두에있을 때만 프로젝트에 표시되는 것을 알았습니다 .
누군가에게 도움이되기를 바랍니다.
추신 : 프로젝트는 maven 기반이었습니다.


3

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");

1

이 방법이 올바른지 모르겠지만 문제가 해결되었습니다. log4j.properties 파일을 "프로젝트 폴더"/ config에 넣고 PropertyConfigurator.configure ( "config // log4j.properties")를 사용하십시오.

jar 파일을 직접 실행할 때는 IDE에서 작동하지만 작동하지 않습니다. jar 파일을 직접 실행할 때 jar 파일이있는 폴더에 log4j.properties 파일을 복사하십시오. jar 및 특성 파일이 동일한 디렉토리에 있으면 잘 실행됩니다.


1

log4j.properties를 클래스 경로에 넣으십시오. 다음은 올바른 위치를 식별하는 데 도움이되는 두 가지 경우입니다. 1. 웹 응용 프로그램의 경우 클래스 경로는 / WEB-INF / classes입니다.

\WEB-INF      
    classes\
        log4j.properties
  1. 기본 / 단위 테스트에서 테스트하려면 클래스 경로는 소스 디렉토리입니다.

    \Project\
       src\
          log4j.properties

1

여러 가지 방법이 있습니다.

Way1 : PropertyConfigurator를 사용하지 않고 maven 프로젝트 를 시도하는 경우

첫째 : scr / main에서 resources 디렉토리를 확인하십시오.

  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.

스크린 샷을 따릅니다.

! [여기에 이미지 설명 입력

Way2 : java / maven 프로젝트의 특성 파일을 사용 하려는 경우 PropertyConfigurator를 사용하십시오.

프로젝트의 어느 곳에 나 속성 파일을 배치하고 올바른 경로를 지정하십시오. 예 : src / javaLog4jProperties / log4j.properties

공전{

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

}

여기에 이미지 설명을 입력하십시오

Way3 : java / maven 프로젝트에서 XML로 시도하는 경우 DOMConfigurator 사용

프로젝트의 어느 곳에 나 속성 파일을 배치하고 올바른 경로를 지정하십시오. 예 : src / javaLog4jProperties / log4j.xml

공전{

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

}

여기에 이미지 설명을 입력하십시오


1

표준 프로젝트 설정에는 다음과 같은 프로젝트 구조가 있습니다.

src/main/java
src/main/resources

resources 폴더 안에 log4j.properties를 배치하고, 존재하지 않는 경우 resources 폴더를 작성할 수 있습니다.



0

PropertyConfigurator.configure("log4j.properties");프로젝트 구조에서 log4j.properties를 이미 정의한 경우 Log4J 클래스에서 지정할 필요가 없습니다 .

Web Dynamic Project의 경우 :-

WebContent-> WEB-INF-> log4j.properties 아래에 log4j.properties를 저장해야합니다.

이것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.