В 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());

    }

}

проанализируйте данные из манифеста ( непроверенные )

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

а затем включите проанализированную версию в инструкцию log

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

Видишь спецификация файла Jar для получения более подробной информации.

таким образом, вы можете загрузить свой /META-INF/MANIFEST во время выполнения, используя ClassLoader .Затем загрузите и проанализируйте Implementation-Version:

String welcome = String.format("Version %s of the application is currently running",
                          implementationVersion);
logger.info(welcome);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top