Java에서는 로그 파일에 동적 버전 정보를 어떻게 포함 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1237860

  •  11-09-2019
  •  | 
  •  

문제

Java 응용 프로그램에서 다음과 같이 사용자 정의 로깅 프레임 워크를 사용하여 문자열을 기록 할 수 있습니다.

logger.info("Version 1.2 of the application is currently running");

따라서 사용자가 로그 파일을 보내면 실행중인 응용 프로그램의 버전을 쉽게 알 수 있습니다.

위의 코드의 문제점은 버전이 문자열 리터럴에 하드 코딩되어 있으며 누군가가 매 릴리스마다 업데이트해야한다는 것을 기억해야한다는 것입니다. 이 문자열을 업데이트하는 것이 릴리스를 위해 잊혀 질 수 있다는 것은 매우 불가피합니다.

내가하고 싶은 것은 응용 프로그램의 JAR에 대한 매니페스트 파일의 버전 번호 중 하나를 기반 으로이 문자열 리터럴을 자동으로 업데이트하는 것입니다.

Specification-Version: 1.2
Implementation-Version: 1.2.0.0

버전 번호가 로그 파일에 들어가는 한 컴파일 타임이나 런타임에 발생 하는지도 신경 쓰지 않습니다.

도움이 되었습니까?

해결책

해당 정보를 얻는 표준 방법은입니다 SomeClass.class.getPackage().getImplementationVersion().

혼자서 구문 분석 할 필요가 없습니다.

다른 팁

다음 클래스를 사용하여 런타임에 매니페스트를로드 할 수 있습니다.

public class ManifestFinder {

    private final Class<?> _theClass;


    public ManifestFinder(Class<?> theClass) {

        _theClass = theClass;
    }


    public Manifest findManifest() throws MalformedURLException, IOException {

        String className = _theClass.getSimpleName();
        String classFileName = className + ".class";
        String pathToThisClass = _theClass.getResource(classFileName).toString();

        int mark = pathToThisClass.indexOf("!");
        String pathToManifest = pathToThisClass.toString().substring(0, mark + 1);
        pathToManifest += "/META-INF/MANIFEST.MF";
        return new Manifest(new URL(pathToManifest).openStream());

    }

}

Manifest (Untested)에서 데이터를 구문 분석합니다.

 String specificationVersion = manifest.getMainAttributes().getValue("Implementation-Version");

그런 다음 로그 문에 구문 분석 버전을 포함시킵니다.

logger.info("Version " + specificationVersion + " of the application is currently running");

보다 JAR 파일 사양 자세한 사항은.

따라서 클래스 로더를 사용하여 런타임에 /meta-inf /manifest를로드 할 수 있습니다. 그런 다음로드하고 구문 분석하십시오 Implementation-Version:

String welcome = String.format("Version %s of the application is currently running",
                          implementationVersion);
logger.info(welcome);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top