No momento, uma entrada padrão se parece com isso:
Oct 12, 2008 9:45:18 AM myClassInfoHere
INFO: MyLogMessageHere
Como faço para fazer isso?
Oct 12, 2008 9:45:18 AM myClassInfoHere - INFO: MyLogMessageHere
Esclarecimento Estou usando java.util.logging
logging.properties
, com adaptação baseada na sugestão de @BrunoEberhard e um nome abreviado de logger:java.util.logging.SimpleFormatter.format=%1$tF %1$tT %4$.1s %2$s %5$s%6$s%n
1)
-Djava.util.logging.SimpleFormatter.format
O Java 7 suporta uma propriedade com a
java.util.Formatter
sintaxe da cadeia de formato.Veja aqui .
Meu favorito é:
o que torna a saída como:
2) Colocando nos IDEs
Os IDEs normalmente permitem definir propriedades do sistema para um projeto. Por exemplo, no NetBeans, em vez de adicionar -D ... = ... em algum lugar, adicione a propriedade na caixa de diálogo de ação, na forma de
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-...
- sem aspas. O IDE deve descobrir.3) Colocando isso no Maven - Surefire
Para sua comodidade, veja como colocá-lo no Surefire:
4) Feito à mão
Eu tenho uma biblioteca com poucas
java.util.logging
classes relacionadas . Entre eles, éSingleLineFormatter
. Jar para download aqui .fonte
Semelhante ao Tervor, mas eu gosto de alterar a propriedade no tempo de execução.
Observe que isso precisa ser definido antes da criação do primeiro SimpleFormatter - como foi escrito nos comentários.
fonte
Como Obediah Stane disse, é necessário criar seu próprio
format
método. Mas eu mudaria algumas coisas:Crie uma subclasse diretamente derivada de
Formatter
, não deSimpleFormatter
. OSimpleFormatter
não tem mais nada a acrescentar.Cuidado ao criar um novo
Date
objeto! Você deve certificar-se de representar a data doLogRecord
. Ao criar um novoDate
com o construtor padrão, ele representará a data e a hora dosFormatter
processosLogRecord
, e não a data em queLogRecord
foi criado.A classe a seguir pode ser usada como formatador em a
Handler
, que por sua vez pode ser adicionado aoLogger
. Observe que ele ignora todas as informações de classe e método disponíveis noLogRecord
.fonte
É isso que estou usando.
Você terá algo como ...
fonte
ofNullable(record.getThrown()).ifPresent(v -> v.printStackTrace());
pouco antes de retornar a mensagem formatada.Por captura de tela, no Eclipse, selecione "executar como" e "Executar configurações ..." e adicione a resposta de Trevor Robinson entre aspas duplas, em vez de aspas. Se você perder as aspas duplas, obterá erros "não foi possível encontrar ou carregar a classe principal".
fonte
Eu descobri uma maneira que funciona. Você pode subclassificar SimpleFormatter e substituir o método de formato
Um pouco surpreso com esta API, eu teria pensado que mais funcionalidade / flexibilidade seriam fornecidas imediatamente
fonte
formatMessage(record)
e nãorecord.getMessage()
. Os suportes do local não serão alterados.Esse log é específico para seu aplicativo e não um recurso Java geral. Quais aplicativos você está executando?
Pode ser que isso seja proveniente de uma biblioteca de log específica que você esteja usando no seu próprio código. Em caso afirmativo, publique os detalhes de qual você está usando.
fonte
java.util.logging.Logger
Se você efetuar login em um aplicativo Web usando o tomcat, adicione:
Nos argumentos da VM
fonte
se você estiver usando java.util.logging, existe um arquivo de configuração que está fazendo isso para registrar o conteúdo (a menos que você esteja usando a configuração programática). Portanto, suas opções são
1) executar o pós-processador que remove as quebras de linha
2) alterar a configuração do log E remover as quebras de linha. Reinicie seu aplicativo (servidor) e você deve ser bom.
fonte