maven을 사용하는 경우 일반적으로 log4j.properties를 Java 또는 자원 아래에 배치합니까?


128

일반적인 Maven 디렉토리를 사용할 때 log4j.properties 파일을 어디에 두어야합니까?


6
src / test / resources-아티팩트 소비자는 배치에 필요한 로깅 레벨을 설정합니다. 그러나 상업 작업을 위해이 작업을 수행하는 경우 slf4j를 권장합니다. 배포시 로깅 프레임 워크를 전환하는 옵션을 제공합니다. slf4j.org
David Victor

2
BTW는 properties / xml 구성 파일없이 log4j를 사용할 수 있는지 실험하고 싶다면 BTW. ' logging.apache.org/log4j/1.2/manual.html- 구성'에서 "BasicConfigurator.configure 메소드를 호출하면 다소 간단한 log4j 설정이 작성됩니다." 또한 참조 : logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/… maven.apache.org/plugins/maven-resources-plugin/examples/…
David Victor

답변:


141

src/main/resources "표준 게재 위치"입니다.

최신 정보: 위의 질문에 대답하지만 최선의 해결책은 아닙니다. 다른 답변과 이에 대한 의견을 확인하십시오 ... 자신의 로깅 속성을 jar와 함께 제공하지 않고 대신 원하는 로깅을 구성하기 위해 클라이언트 (예 : app-server, stage environment 등)에 남겨 두십시오. 따라서 그것을 넣는 것이 src/test/resources내가 선호하는 솔루션입니다.

참고 : 구체적 로그 구성을 클라이언트 / 사용자에게 남겨 두 려면 앱에서로 대체 log4j를 고려해야 slf4j합니다.


디렉토리 diretcory가 작성되지 않았습니다. 수동으로해야합니까?
user496949

3
네. 수동으로 생성 resources하고 log4j.properties이 질문에 대해 언급 한 폴더입니다.
Nishant

@ user496949 : 아래의 파일 src/main/resources은 기본적으로 다음으로 복사됩니다.target/classes
splash

17
이슈의 일부로 log4j 설정을 내보내려는 경우가 아니라면 src / test / resources에 배치하는 것이 좋습니다.
David Victor

1
@FerasOdeh는 생성 된 아티팩트 (jar, war 등)에서 제외하고 "아티팩트의 일부로 log4j 설정을 내보내려는 경우를 제외하고"테스트 중에 만 사용합니다.
알리 Shakiba

60

그것을 넣는 것만으로 그것을 src/main/resources인공물 안에 묶을 것입니다. 예를 들어, 아티팩트가 JAR 인 경우 log4j.properties파일을 내부에 보관하여 로깅을 구성 할 수있는 초기 지점을 잃게됩니다.

나는 보통 그것을 넣고 다음 src/main/resources과 같이 목표에 맞게 출력되도록 설정했다.

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.directory}</targetPath>
            <includes>
                <include>log4j.properties</include>
            </includes>
        </resource>
    </resources>
</build>

또한 log4j가 실제로 그것을 보려면 클래스 디렉토리에 출력 디렉토리를 추가해야합니다. 이슈가 실행 가능한 JAR 인 경우 maven-assembly-plugin을 사용하여 생성 한 JAR 일 수 있습니다. 해당 플러그인 내에서 다음 Class-Path과 같이 매니페스트 항목 을 추가하여 JAR의 현재 폴더를 클래스 경로에 추가 할 수 있습니다.

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.your-package.Main</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>.</Class-Path>
            </manifestEntries>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

이제 log4j.properties 파일은 JAR 파일 바로 옆에 독립적으로 구성 가능합니다.

Eclipse에서 직접 애플리케이션을 실행하려면 실행 resources구성에서 클래스 경로에 디렉토리를 추가 Run->Run Configurations...->Java Application->New하십시오. Classpath탭을 선택 Advanced하고 src/resources디렉토리 를 선택 하고 찾아보십시오 .


2
또 다른 옵션은 번들되지 않도록 src / test / resources에 배치하는 것입니다.
rogerdpack

와. 고마워 이것은 내가 필요한 것입니다!
blissfool

@ Zoltán, 조언에 따라 출력 디렉토리를 클래스 경로에 추가하는 것이 어렵다는 것을 알았습니다. 앱이 .war 파일에 번들 된 후 log4j가 .properties 파일을 볼 수 있도록 특정 프로젝트의 .classpath 파일로 이동 하여이 log4j 출력 디렉토리를 추가하는 것과 같이 수동으로 수행 할 수있는 방법이 있습니까? 또한 targetPath 태그, 값을 그대로 사용 ${project.build.directory}하거나 프로젝트가 로컬 드라이브에있는 실제 경로로 편집해야합니까?
Ireti

26

이를위한 일부 "데이터 마이닝" src/main/resources이 일반적인 장소입니다.

Google 코드 검색 결과 :

  • src/main/resources/log4j.properties: 4877
  • src/main/java/log4j.properties: 215

4
이 답변은 20 분 전에 답변 한 답변과 어떻게 다른가? 또한 올바르게 기억하면 그렇지 resources않습니다 resource.
Nishant

6
@Nishant : 답 상자를 열 때 PC를 떠났기 때문에 다르지 않습니다. 돌아와서 질문에 답변 한 후에 질문에 대한 답변이 이미 누락되었습니다. resource오타 일뿐입니다.
시작

1
maven 프로젝트 레이아웃에 대한 규칙 인 maven, maven 컴파일러 플러그인에 대한 독서를 제안합니다. 아티팩트가 빌드 될 때 '대상'아래에 무엇이 있는지 살펴보십시오. 그렇다면 아마 당신은 당신의 대답을 수정할 수 있습니다.
David Victor

4
정답은 src / xxx / resources입니다. 이는 규칙이 아닙니다. maven.apache.org/plugins/maven-resources-plugin/examples/…를 참조하십시오. 여기서 'xxx'는 'main'또는 'test'일 수 있습니다. 사전 구성된 로깅 수준을 제공하지 않는 한 일반적으로 'src / test / resources'를 통해 테스트에 필요한 로깅을 구성하고 아티팩트 소비자가 로깅 수준을 설정할 수 있도록하는 것이 더 현명합니다.
David Victor

22
"교량을 뛰어 넘다"에 대한 Google 검색 결과 : 18.200.000. "다리에서 뛰어 내리지 마십시오"에 대한 Google 결과 : 137.000
djjeck

9

프로젝트를 초기화하는 데 사용되는 리소스는 src / main / resources 폴더에 저장하는 것이 좋습니다. 빌드하는 동안 이러한 리소스를로드 할 수 있도록 maven 프로젝트의 pom.xml에 항목을 빌드 리소스로 간단하게 추가 할 수 있습니다

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> 
        </resource>
    </resources>
</build> 

다른 .properties 파일도 초기화에 사용되는이 폴더에 보관할 수 있습니다. 자원 폴더의 특성 파일에 일부 변수가 있고 프로파일 필터 특성 파일에서 변수를 채우려면 프로파일이 설정됩니다. 이는 src / main / filters에 프로파일 로 설정되어 있지만 다른 사용 사례입니다. . 지금은 무시해도됩니다.

이것은 훌륭한 리소스 maven 리소스 플러그인 이며 유용합니다. 다른 섹션도 찾아보십시오.


위의 Maven 스 니펫을 복사하여 붙여 넣으면 </ resources> </ build>
rdesilva

6

다른 위치에 리소스 파일을 넣는 것이 최선의 해결책은 아닙니다.

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <excludes>
        <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
<build>

예를 들어 자원 파일 (예 : jaxb.properties)이 Java 클래스와 함께 패키지 내부로 들어가는 경우.


1

src / main / resources에 log4j.properties 또는 log4j.xml 파일이 없으면이 PropertyConfigurator.configure ( "log4j.xml")를 사용하십시오.

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);

0

빌드 태그 안에 pom.xml의 resources 태그에서 아래 코드를 추가하십시오. 리소스 태그가 pom.xml의 빌드 태그 안에 있어야 함을 의미합니다.

<build>
    <resources>
        <resource>
            <directory>src/main/java/resources</directory>
                <filtering>true</filtering> 
         </resource>
     </resources>
<build/>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.