Simulando Logs no JBoss usando twiddle

Postado em

Neste post farei um jogo rápido sobre como simular logs no JBoss usando twiddle e como isso pode ser útil apresentando dois exemplos práticos.

Basicamente, podemos criar um aplicativo qualquer que use o componente de log do JBoss e receba um input com a mensagem, a categoria e a severidade. Algo bem simples e que pode muito bem ser feito como um aplicativo web, mas, como eu sou fã de linha de comando, vou mostrar como fazer isso usando o twiddle.

Pra quem não sabe, o twiddle é uma forma de acessarmos o JMX do JBoss via linha de comando (pra quem já usou o jmx-console, é praticamente a versão linha de comando dele). A ideia é criar um serviço no JBoss que possa ser utilizado pelo twiddle (e pelo jmx-console, claro). Para tal, precisamos seguir alguns passos:

  1. Criar uma interface com a anotação @org.jboss.ejb3.annotation.Management
  2. Criar a implementação com a anotação @org.jboss.ejb3.annotation.Service
  3. Empacotar tudo e fazer o deploy na instância do JBoss em questão

Como não é o escopo deste post mostrar como criar o serviço e, sim, como utilizá-lo, você pode baixar os fontes no meu github e compilar o projeto (basta usar o ant pra isso e pegar o jar em out/artifacts/jmx-logger.jar).

Assumindo que o jmx-logger.jar esteja no seu JBoss, você pode mandar qualquer mensagem de log usando as severidades do JBoss (trace, debug, info, warn, error e fatal) como o nome do método e os seguintes parâmetros (todos são Strings):

  • mensagem
  • categoria, mensagem
  • categoria, mensagem, exceção

O grande barato é que você pode usar qualquer classe de exceção, mesmo que ela não exista (nesse caso ela será criada em tempo de execução usando o Javassist). Abaixo seguem alguns exemplos de uso:

# simula um warn com a mensagem "atencao"
$ twiddle.sh invoke jboss.system:service=Logging,type=Logger warn atencao

# simula um OutOfMemoryError com a mensagem "heap space" na categoria "org.minhaclasse"
$ twiddle.sh invoke jboss.system:service=Logging,type=Logger error org.minhaclasse "heap space" java.lang.OutOfMemoryError

Você deve estar se perguntando “Tá, mas e onde eu vou usar isso?”. Mostrarei dois exemplos bem interessantes.

Testar configurações de log

Configurar o log pode parecer simples, mas existem casos onde as saídas precisam ser diferentes para cada aplicativo, sqls devem ser gravados em arquivos diferentes e outros casos onde precisamos da aplicação no ar para testar as configurações. Usando um serviço desses, podemos simular os logs das aplicações facilmente e ver se tudo está ok antes mesmo de subir a aplicação. Também podemos testar outras configurações de log sem termos as aplicações no JBoss. É uma excelente carta na manga!

Simular alertas no RHQ

Podemos trabalhar com alertas no RHQ para que, quando uma determinada mensagem for pega no log, uma ação seja disparada. Um exemplo clássico é o OutOfMemory. Podemos criar os alertas e simulá-los usando o serviço jmx-logger. Outra aplicação legal é usar em demonstrações do JOPR pra equipes ou clientes.

Eu sempre usei esse serviço no JBoss 5, mas acredito que seja compatível com o JBoss 6. Já coloquei um TODO pra tornar compatível com o JBoss 7 usando o jboss-cli. Falta só o tempo pra isso🙂

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s