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

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



답변

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

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

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


답변

그것을 넣는 것만으로 그것을 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디렉토리 를 선택 하고 찾아보십시오 .


답변

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

Google 코드 검색 결과 :

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

답변

프로젝트를 초기화하는 데 사용되는 리소스는 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 리소스 플러그인 이며 유용합니다. 다른 섹션도 찾아보십시오.


답변

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

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

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


답변

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

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


답변

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

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