Pergunta

Eu estou usando o Enerjy (http://www.enerjy.com/ estática do código analyzer tool no meu código Java.Ele me diz que a seguinte linha:

Do sistema.err.println("Ignorado que o banco de dados");

é ruim porque utiliza o Sistema.err.O erro exato é:"JAVA0267 Utilização do Sistema.err"

O que há de errado com a utilização do Sistema.mensagem?

Foi útil?

Solução

Resposta curta: É considerado uma prática ruim usá -lo para fins de registro.

É uma observação de que, nos velhos tempos, quando não há estruturas de log amplamente disponíveis/aceitas, todos usavam o sistema.err para imprimir mensagens de erro e empilhar traços no console. Essa abordagem pode ser apropriada durante a fase de desenvolvimento e teste local, mas não é apropriada para um ambiente de produção, porque você pode perder mensagens de erro importantes. Por isso, em quase todas as ferramentas de análise estática hoje, esse tipo de código é detectado e sinalizado como uma prática ruim (ou um problema de nome semelhante).

As estruturas de registro, por sua vez, fornecem a maneira estruturada e lógica de registrar seus eventos e mensagens de erro, pois eles podem armazenar a mensagem em vários locais persistentes (arquivo de log, log db, etc.).

As mais óbvias (e livres de dependências externas) Hack Resolução é usar a estrutura de registro de java embutida através do java.util.logging.Logger Classe como encaminha os eventos de registro para o console por padrão. Por exemplo:

final Logger log = Logger.getLogger(getClass().getName());
...
log.log(Level.ERROR, "Something went wrong", theException);

(ou você pode simplesmente desligar essa opção de análise)

Outras dicas

O descritor do seu erro é:

O uso do System.err pode indicar código residual de depuração ou caldeira. Considere o uso de um pacote de registro completo, como o Apache Commons, para lidar com o log de erros.

Parece que você está usando o System.err para fins de registro, que é abaixo do ideal por vários motivos:

  • É impossível ativar o registro em tempo de execução sem modificar o aplicativo binário
  • O comportamento de registro não pode ser controlado editando um arquivo de configuração
  • provelavelmente muitos outros

Enquanto eu concordo com os pontos acima sobre o uso de uma estrutura de log, eu ainda tendem a usar System.err Saída em um só lugar: dentro de ganchos de desligamento. Isso ocorre porque eu descobri que, ao usar o java.util.logging As instruções de log da estrutura nem sempre são exibidas se ocorrerem em ganchos de desligamento. Isso ocorre porque a Biblioteca de Logs presumivelmente contém seu próprio gancho de desligamento para limpar os arquivos de log e outros recursos e, como você não pode confiar na ordem em que os ganchos de desligamento são executados, você não pode confiar java.util.logging declarações funcionando como esperado.

Confira este link (a seção "Comentários") para obter mais informações sobre isso.

http://weblogs.java.net/blog/dwalend/archive/2004/05/shutdown_hooks_2.html

(Obviamente, a outra alternativa é usar uma estrutura de registro diferente.)

System.err é realmente mais para fins de depuração do que qualquer outra coisa. É preferível manuseio de exceção e lidar com erros de uma maneira mais fácil de usar. Se o usuário deve ver o erro, use um sistema.out.println.

Se você deseja acompanhar esses erros do ponto de vista de um desenvolvedor, use um logger.

As coisas escritas no System.err geralmente são perdidas em tempo de execução, por isso é considerado uma prática melhor usar uma estrutura de registro que seja mais flexível sobre onde produzir a mensagem, para que possa ser armazenada como um arquivo e analisada.

System.err e System.out para aplicativos que não console são vistos apenas pelo desenvolvedor executando o código em seu IDE, e as informações úteis podem se perder se o item for acionado na produção.

Do sistema.err.println e do Sistema.de fora.println não deve ser usado como loggging-interface.STD-Saída e STD-Erro (estes são gravados pelo Sistema.e .err) são mensagens de linha de comando-ferramentas.

System.err imprime no console. Isso pode ser adequado para um aluno testar sua lição de casa, mas será inadequado para um aplicativo em que essas mensagens não serão vistas (o console armazena apenas tantas linhas).

Uma abordagem melhor seria lançar uma exceção segurando a mensagem que normalmente seria enviada para o console. Uma alternativa a isso seria usar um software de registro de terceiros que armazenaria essas mensagens em um arquivo que pode ser armazenado para sempre.

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