IT story

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

hot-time 2020. 7. 13. 07:54
반응형

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 파일 바로 옆에 있습니다.

To run your application directly from Eclipse, add the resources directory to your classpath in your run configuration: Run->Run Configurations...->Java Application->New select the Classpath tab, select Advanced and browse to your src/resources directory.


Some "data mining" accounts for that src/main/resources is the typical place.

Results on Google Code Search:

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

The resources used for initializing the project are preferably put in src/main/resources folder. To enable loading of these resources during the build, one can simply add entries in the pom.xml in maven project as a build resource

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

Other .properties files can also be kept in this folder used for initialization. Filtering is set true if you want to have some variables in the properties files of resources folder and populate them from the profile filters properties files, which are kept in src/main/filters which is set as profiles but it is a different use case altogether. For now, you can ignore them.

This is a great resource maven resource plugins, it's useful, just browse through other sections too.


When putting resource files in another location is not the best solution you can use:

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

For example when resources files (e.g. jaxb.properties) goes deep inside packages along with Java classes.


If your log4j.properties or log4j.xml file not found under src/main/resources use this PropertyConfigurator.configure("log4j.xml");

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

참고URL : https://stackoverflow.com/questions/5132389/if-using-maven-usually-you-put-log4j-properties-under-java-or-resources

반응형