Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Logging
  2. Logger
  3. Level
  4. Formatar mensagem
  5. Log em arquivo

Java fornece o package nativo java.util.logging que contém classes auxiliares para exibição de mensagem de log comuns em aplicações para informação de erros, avisos, debug entre outros.

Sintaxe
import java.util.logging.nome_package;

Desse package, vamos fazer uso da classe ConsoleHandler para exibir as informações de log no console como exemplo básico de uso, classes Level para configuração do nível de exibição das mensagens, e Logger que exibe as mensagens.

A classe Logger fornece os métodos mais básicos mostrados abaixo para exibição de informação de acordo com o nível ou tipo:

Sintaxe
void severe(String msg);
void warning(String msg);
void info(String msg);
void config(String msg);
void fine(String msg); 
void finer(String msg); 
void finest(String msg); 

Para instanciar um objeto Logger podemos utilizar a sintaxe básica mostrada logo a seguir:

Sintaxe
Logger nome_objeto = Logger.getLogger(nome_classe.class.getName());

No exemplo abaixo, instanciamos um objeto Logger e invocamos o método info para exibição de uma mensagem informativa.

Ex. 1:
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class Main
{
    public static void main(String[] args) 
    {
        Logger logger = Logger.getLogger(Main.class.getName());
        logger.info("info");
    }
}
Saída
Jun 22, 2026 4:46:37 PM Main main
INFO: info

Como pode ser observado, uma mensagem incluíndo informações de datahora é exibida como padrão. Essa pode ser ter seu formato alterado. Isso será visto mais adiante.

A classe Level(nível) fornece os níveis para controle da exibição de mensagens de log. O level OFF desliga a exibição de mensagem de log e ALL é usado para habilitar a exibição de mensagens em todos os níveis.

Level
ALL - Todas as mensagens devem ser logadas
CONFIG - mensagem de configuração
FINE - mensagem de execução padrão
FINER - mensagem de execução mais detalhada
FINEST - mensagem de execução mais detalhada
INFO - mensagem de informação
OFF - Desliga o exibição de mensagens de log em todos os níveis
SEVERE - mensagem de falhas severas
WARNING - mensagem de potenciais problemas

Esses níveis seguem uma precedência de importância que pode ser vista logo abaixo. Quando usado, apenas os níveis acima do configurado(incluso) terão suas mensagens de log exibidas.

Level
OFF
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST

Para definir um nível de log fazemos uso do método setLevel da classe Logger como pode ser observado na sintaxe abaixo:

Sintaxe
void setLevel(Level newLevel)

No próximo exemplo, instanciamos um objeto Logger e definidos o level ALL e invocamos todos os métodos da classe Logger mencionados no início do tutorial.

Ex. 2:
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class Main
{
    public static void main(String[] args) 
    {
        Logger logger = Logger.getLogger(Main.class.getName());
        
        logger.setLevel(Level.ALL);

        logger.severe("Severe");
        logger.warning("warning");
        logger.info("info");
        logger.config("config");
        logger.fine("fine");  
    }
}
Saída
Jun 22, 2026 4:46:37 PM Main main
SEVERE: Severe
Jun 22, 2026 4:46:37 PM Main main
WARNING: warning
Jun 22, 2026 4:46:37 PM Main main
INFO: info

Como pode ser observado, as mensagens de log CONFIG e FINE não foram exibidas de acordo com o level ALL informado para o método setLevel. Isso ocorre porque o handler interno do objeto Logger está configurado para CONFIG por padrão.

Para contornar essa configuração padrão é necessário informar um handler customizado com o level ALL ao objeto Logger como pode ser visto no exemplo a seguir que uso o ConsoleHandler:

Ex. 3:
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class Main
{
    public static void main(String[] args) 
    {
        Logger logger = Logger.getLogger(Main.class.getName());
        logger.setLevel(Level.ALL);

        //novo handler
        ConsoleHandler handler = new ConsoleHandler();
        handler.setLevel(Level.ALL);

        //adiciona handler custom
        logger.addHandler(handler);

        //Previne logs duplicados se logger base também imprime as mensagens
        logger.setUseParentHandlers(false);

        logger.severe("Severe");
        logger.warning("warning");
        logger.info("info");
        logger.config("config");
        logger.fine("fine");
    }
}
Saída
Aug 10, 2026 9:07:08 PM Main main
SEVERE: Severe
Aug 10, 2026 9:07:09 PM Main main
WARNING: warning
Aug 10, 2026 9:07:09 PM Main main
INFO: info
Aug 10, 2026 9:07:09 PM Main main
CONFIG: config
Aug 10, 2026 9:07:09 PM Main main
FINE: fine

Após a configuração do handler customizado, os níveis restantes CONFIG e FINE estão sendo usados para a exibição das mensagens de seus níveis como esperado.

A forma mais simples e rápida de alterar o formato da exibição das mensagens de log é alterando a propriedade java.util.logging.SimpleFormatter.format contida no arquivo logging.properties armazenado por padrão em $JAVA_HOME/conf/logging.properties.

Essa alteração mencionada é feita por meio do método setProperty da classe System, como mostrado a seguir:

Sintaxe
System.setProperty(String key, String value) 
Onde
key: nova da propriedade
value: string contendo os identificadores de formatação.

Identificadores:
%1$: datahora
%2$: nome do método
%3$: nome do logger
%4$: Nível ou Level do log
%5$: Mensagem.
%6$: stack trace.
%n: escape para nova linha da plataforma

s: trata argumento como string
tF: data YYYY-MM-DD 2026-01-01. Equivalente %tY-%tm-%td 
tT: hora no formato 24H. 14:30:59. Equivalente %tH:%tM:%tS 

No próximo exemplo, vamos configurar as mensagens de log no formato: data hora [nível] mensagem:

Ex 4:
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class Main
{
    public static Logger logger = Logger.getLogger(Main.class.getName());
    
    public static void metodo1()
    {
        logger.severe("Severe");
    }
    
        public static void metodo2()
    {
        logger.warning("warning");
    }
    
    public static void main(String[] args) 
    {
        System.setProperty("java.util.logging.SimpleFormatter.format","%1$tF %1$tT [%4$-7s] %5$s%n");
        metodo1();
        metodo2();
        logger.info("info");
        logger.config("config"); 
        //logger.fine("fine");
    }
}
Saída
2026-08-11 10:47:10 [SEVERE ] Severe
2026-08-11 10:47:10 [WARNING] warning
2026-08-11 10:47:10 [INFO   ] info
  1. 12/08/2026 - versão inicial: logger, level e formatar mensagem