Em Java, as variáveis finais estáticas são constantes e a convenção é que elas devem estar em maiúsculas. No entanto, vi que a maioria das pessoas declara loggers em letras minúsculas, o que aparece como uma violação no PMD .
por exemplo:
private static final Logger logger = Logger.getLogger(MyClass.class);
Basta pesquisar no google ou no SO por "logger final estático" e você verá isso por si mesmo.
Em vez disso, deveríamos estar usando LOGGER?
private static final Logger LOGGER = LoggerFactory.getLogger(Foo.class);
Respostas:
A referência do criador de logs não é uma constante, mas uma referência final e NÃO deve estar em maiúsculas. Um valor constante deve estar em maiúsculas.
fonte
Para adicionar mais valor à resposta do crunchdog, o Java Coding Style Guide declara isso no parágrafo 3.3 Nomeação de campo
Após esta convenção,
logger
é umastatic final
referência a objeto, como indicado no ponto 2, mas, como é ".
" seguido sempre que você a usa, ela não pode ser considerada uma constante e, portanto, deve ser minúscula.fonte
Object
e você pode chamar um método como.equals
eles..
.De java eficaz, 2ª ed.,
Em resumo, constante == estática final, mais se for uma referência (versus um tipo simples), imutabilidade.
Olhando para o slf4j logger, http://www.slf4j.org/api/org/slf4j/Logger.html
É imutável. Por outro lado, o registrador JUL é mutável. O log4j logger também é mutável. Portanto, para ser correto, se você estiver usando log4j ou JUL, deve ser "logger" e, se estiver usando slf4j, deve ser LOGGER.
Observe que a página slf4j javadocs vinculada acima tem um exemplo em que eles usam "logger", não "LOGGER".
Naturalmente, essas são apenas convenções e não regras. Se você estiver usando o slf4j e quiser usar o "logger" porque está acostumado a isso em outras estruturas, ou se é mais fácil digitar ou para facilitar a leitura, vá em frente.
fonte
Logger
interface é imutável ? Somente umfinal class
(comoString
ouInteger
) pode garantir imutabilidade. Mesmo que você não consiga encontrar nenhuma implementação mutável do SLF4JLogger
, ninguém poderá impedi-lo de escrever uma.Gosto da opinião do Google ( Google Java Style )
Exemplos:
fonte
private static final Logger logger = Logger.getLogger(Finalizer.class.getName());
Se você estiver usando uma ferramenta automatizada para verificar seus padrões de codificação e violar os padrões, então ele ou os padrões devem ser corrigidos. Se você estiver usando um padrão externo, corrija o código.
A convenção no Sun Java é maiúscula para constantes estáticas públicas. Obviamente, um criador de logs não é constante, mas representa uma coisa mutável (caso contrário, não faria sentido chamar métodos na esperança de que algo aconteça); não existe um padrão específico para campos finais não constantes.
fonte
Se você pesquisar no Google, poderá descobrir que, em alguns casos, os registradores não são definidos como estáticos finais. Adicione uma cópia-e-colar rápida a isso, e isso pode explicar.
Usamos LOGGER em todo o nosso código, e isso corresponde à nossa convenção de nomenclatura (e nosso CheckStyle está satisfeito com isso).
Vamos ainda mais longe, aproveitando a convenção estrita de nomenclatura no Eclipse. Criamos uma nova classe com um modelo de código de:
O logger é comentado, pois inicialmente não precisamos dele. Mas, se precisarmos mais tarde, apenas descomentamos.
Em seguida, no código, usamos modelos de código que esperam que esse criador de logs esteja presente. Exemplo com o modelo try-catch:
Temos mais alguns modelos que o utilizam.
A convenção estrita nos permite ser mais produtivos e coerentes com os modelos de código .
fonte
Pessoalmente, acho que parece muito grande em maiúsculas. Além disso, como é uma classe que não está diretamente relacionada ao comportamento da classe, não vejo um grande problema em usar em
logger
vez deLOGGER
. Mas se você for estritamente pedante, useLOGGER
.fonte
Não esqueça que o PMD respeitará um comentário com
iniciar. Isso fará com que o PMD pule a linha de suas verificações, permitindo que você escolha o estilo que desejar.
fonte
Normalmente, as constantes estão em maiúsculas.
Os criadores de logs, no entanto, não devem ser estáticos, mas consultados para cada "novo" da classe que contém, se estiverem usando a fachada slf4j. Isso evita alguns problemas desagradáveis do carregador de classes em contêineres da Web, além de permitir que a estrutura do criador de logs faça coisas especiais, dependendo do contexto da chamada.
fonte
Eu prefiro 'logger', ou seja, minúsculas. O motivo não é que seja uma constante ou não (mutável ou imutável). Se usarmos esse raciocínio, teremos que renomear a variável se alterarmos a estrutura de log (ou se a estrutura alterar a mutabilidade dos loggers).
Para mim, outros motivos são mais importantes.
Um criador de logs é um objeto de sombra na classe e não deve ser muito importante, pois não implementa a lógica principal. Se usarmos 'LOGGER', é atraente no código que atrai muita atenção.
Às vezes, os loggers são declarados no nível da instância (ou seja, não são estáticos) e até são injetados como uma dependência. Não gostaria de alterar meu código se decidir alterar a maneira de obter o logger. A estabilidade do código wrt. essa mudança (hipotética em muitos casos) é a outra razão pela qual prefiro a minúscula.
fonte
Se os seus padrões de codificação - se você tiver algum - dizem que devem estar em maiúsculas, então sim.
Não vejo nenhuma razão estrita de uma maneira ou de outra. Eu acho que depende totalmente de seus gostos pessoais resp. padrões de codificação da sua empresa.
BTW: eu prefiro "LOGGER" ;-)
fonte