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.