Pergunta

Eu estou tentando carregar um arquivo log.properties personalizado quando o aplicativo é iniciado.

O meu arquivo de propriedades está no mesmo pacote como minha classe principal, então eu assumi que o parâmetro de linha de comando -Djava.util.logging.config.file=log.properties deve obter o arquivo de propriedades carregado.

mas as propriedades são carregadas apenas quando eu especificar um caminho absoluto completo para o arquivo de propriedades. Todas as sugestões como usar um caminho relativo?

Foi útil?

Solução

logging

Java não pesquisa o seu disco rígido inteiro para um arquivo; existem regras muito simples como os arquivos são olhou para cima. Você quer Java para ver que os dois arquivos pertencem um ao outro, mas você não disse isso em qualquer lugar. Desde Java não vê nenhuma ligação entre o arquivo de propriedades e sua classe diferente de que eles estão na mesma pasta em seu disco, ele não pode encontrar o arquivo.

-Djava.util.logging.config.file=log.properties só funciona se o log.properties arquivo está no diretório atual do processo de Java (que pode ser bastante aleatória). Portanto, você deve usar um caminho absoluto aqui.

Uma solução alternativa seria para mover o arquivo para logging.properties $JAVA_HOME/lib/ (ou editar o arquivo que deveria estar lá). Nesse caso, você não precisa definir uma propriedade do sistema.

Outras dicas

Você pode dinamicamente carregar arquivos de propriedades java.util.logging de um caminho relativo com muita facilidade. Isto é o que eu coloquei dentro de um bloco static {} na minha classe Main. Coloque seu arquivo logging.properties na default package e você pode acessá-lo facilmente com o seguinte código.

final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties");
try
{
    LogManager.getLogManager().readConfiguration(inputStream);
}
catch (final IOException e)
{
    Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
    Logger.getAnonymousLogger().severe(e.getMessage());
}

util registro não carregará a partir de classpath, ele precisa de um caminho absoluto que é por isso que outros pacotes de registo como log4j são muito mais fáceis de configurar e melhor para aplicações web, onde é uma dor para obter abs caminhos.

este não é explicado em tudo na doco java.util.logging.LogManager.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top