Ol\u00e1 amigos, hoje vamos fazer o uso da biblioteca Java Log4J<\/a> que \u00e9 pode nos auxiliar a identificar o processamento da aplica\u00e7\u00e3o em diversos n\u00edveis de detalhe.<\/p>\n <\/p>\n O Log4J uma biblioteca de log de aplica\u00e7\u00f5es em Java. Seu nome completo \u00e9 Apache log4j que \u00e9 um projeto Apache Software Foundation e desenvolvido por uma equipe dedicada da Apache Software Foundation. Ele \u00e9 uma das bibliotecas mais utilizadas no mundo Java por ser muito \u00fatil e pr\u00e1tica para registros de execu\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n OFF<\/a> Baixo N\u00edvel (Mais detalhes) =================================== Alto N\u00edvel (Menos detalhe) FATAL: S\u00e3o exibidas mensagens definidas como FATAL. Este n\u00edvel de log \u00e9 utilizado quando ocorre um erro na aplica\u00e7\u00e3o e n\u00e3o ser\u00e1 poss\u00edvel recuperar os dados processados. Esse \u00e9 um t\u00edpico erro de ambiente.<\/p>\n ERROR: S\u00e3o exibidas mensagens definidas como ERROR e FATAL. O n\u00edvel ERROR \u00e9 utilizado quando WARNING: S\u00e3o exibidas mensagens definidas como WARN, ERROR e FATAL. O n\u00edvel WARNING \u00e9 utilizado INFO: S\u00e3o exibida mensagens definidas como INFO, WARN, ERROR e FATAL. O n\u00edvel INFO \u00e9 utilizado para exibir informa\u00e7\u00f5es da aplica\u00e7\u00e3o \u00e9 comum utiliz\u00e1-lo para gravar no log mensagens exibidas para o usu\u00e1rio na tela.<\/p>\n DEBUG: S\u00e3o exibidas mensagens definidas como DEBUG, INFO, WARN, ERROR e FATAL. Este n\u00edvel exibe para identificar cada atividade executada na aplica\u00e7\u00e3o durante sua execu\u00e7\u00e3o.<\/p>\n TRACE: S\u00e3o exibidas mensagens definidas como TRACE, DEBUG, INFO, WARN, ERROR e FATAL. Este n\u00edvel \u00e9 mais detalhado que o debug, pois permite uma detalhamento inclusive dos logs de componentes de terceiros utilizados em nossa aplica\u00e7\u00e3o.<\/p>\n ALL: \u00c9 o mais baixo n\u00edvel poss\u00edvel de log. Torna ligado todos os n\u00edveis de log.<\/p>\n OFF: Este \u00e9 o n\u00edvel “desligado”. Nenhum tipo de informa\u00e7\u00e3o \u00e9 gerada no LOG.<\/p>\n Quanto mais baixo o n\u00edvel de log mais detalhes teremos sobre a execu\u00e7\u00e3o da nossa aplica\u00e7\u00e3o. Em contra partida lembre-se que para gerar o log o framework log4J exigir\u00e1 processamento e isto pode comprometer a performance da sua aplica\u00e7\u00e3o. Use com cautela!<\/strong><\/p>\n Crie um arquivo chamado “log4j.properties” na pasta “src” do seu projeto. Em seguida adicione o seguinte conte\u00fado:<\/p>\n As linhas que come\u00e7am com “#” s\u00e3o coment\u00e1rios para as linhas de comando.<\/p>\n Ent\u00e3o \u00e9 isso amigos. Por hoje \u00e9 s\u00f3 e vida que Segue!
\n1. O que \u00e9 o Log4J<\/H2><\/p>\n
2. N\u00edveis de Log<\/H2><\/p>\n
\nTRACE<\/a>
\nDEBUG<\/a>
\nINFO<\/a>
\nWARN<\/a>
\nERROR<\/a>
\nFATAL<\/a>
\nALL<\/a> <\/p>\n
\n ALL => TRACE => DEBUG => INFO => WARN => ERROR => FATAL<\/p>\n
\ntemos um erro na aplica\u00e7\u00e3o que pode ser tratado e recuperado.<\/p>\n\r\ntry {\r\n\t \/\/....\t\t\r\n\t} catch (Exception e) {\r\n\t\tlogger.error(\"Ocorreu o seguinte erro na aplica\u00e7\u00e3o: \" + e.getMessage());\r\n\t}\r\n<\/pre>\n
\npara avisar que h\u00e1 um erro em potencial na aplica\u00e7\u00e3o.<\/p>\n3. Criando um projeto de exemplo<\/H2>
\n Crie um projeto Web<\/a> chamado FeltexLog4J.<\/p>\n4. Criando o arquivo de LOG<\/H2><\/p>\n
\r\n# N\u00edveis: ALL, DEBUG, ERROR, FATAL, INFO, OFF,TRACE, WAR\r\n\r\n#N\u00edvel de Log INFO Sa\u00eddas A1 e Console\r\nlog4j.rootLogger= INFO, A1, Console\r\n\r\n#Informando qual o tipo de gera\u00e7\u00e3o do arquivo de log. Neste caso ser\u00e1 di\u00e1rio\r\nlog4j.appender.A1=org.apache.log4j.DailyRollingFileAppender\r\n\r\n#Onde ser\u00e1 gravado o arquivo de Log e qual ser\u00e1 o seu nome\r\nlog4j.appender.A1.file=C:\/temp\/FeltexLog4J.1.0.log\r\n\r\n#Defini\u00e7\u00e3o de um padr\u00e3o de sa\u00edda de log para A1\r\nlog4j.appender.A1.layout=org.apache.log4j.PatternLayout\r\n\r\n#Padr\u00e3o de data como 2050-01-31 (AnoAnoAnoAno-MesMes-DiaDia)\r\nlog4j.appender.A1.DatePattern='.'yyyy-MM-dd\r\n\r\n#Defini\u00e7\u00e3o de como ser\u00e1 exibida cada lilha de LOG\r\nlog4j.appender.A1.layout.ConversionPattern=%p - %d{yyMMdd.HHmmss} - FeltexLog4J - %m %n\r\n\r\n#Uma nova sa\u00edda para o LOG, neste caso a console para IDE (Eclipse o NetBeans) ou prompt (Windows ou Linux)\r\nlog4j.appender.Console=org.apache.log4j.ConsoleAppender\r\n\r\n#Defini\u00e7\u00e3o de um padr\u00e3o de sa\u00edda de log para Console\r\nlog4j.appender.Console.layout=org.apache.log4j.PatternLayout\r\n\r\n#Uma nova sa\u00edda para o LOG, neste caso a console para IDE (Eclipse o NetBeans) ou prompt (Windows ou Linux)\r\nlog4j.appender.Console.layout.ConversionPattern=%p - %d{yyyyMMdd.HHmmss} - FeltexLog4J - %m %n\r\n\r\n<\/pre>\n
5. Cria\u00e7\u00e3o do Servlet<\/H2>
\n Crie um servlet na sua aplica\u00e7\u00e3o chamado “ExibirMensagem”. Quando ele for executado o Log4J exibir\u00e1 as mensagens no arquivo de log e na console. Veja o c\u00f3digo abaixo:<\/p>\n\r\npackage br.com.feltex.log4j.servlet;\r\n\r\nimport java.io.IOException;\r\nimport java.util.Date;\r\n\r\nimport javax.servlet.RequestDispatcher;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.apache.log4j.Logger;\r\n\r\n@WebServlet(\"\/ExibirMensagem\")\r\npublic class ExibirMensagem extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\r\n\t\/\/ Cria\u00e7\u00e3o da vari\u00e1vel que utilizaremos para gravar as linhas de LOG\r\n\tprivate static Logger logger = Logger.getLogger(ExibirMensagem.class);\r\n\r\n\tprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n\t\tlogger.debug(\"Iniciado o m\u00e9todo doGet\");\r\n\t\tdoPost(request, response);\r\n\t\tlogger.debug(\"Conclu\u00eddo o m\u00e9todo doGet\");\r\n\r\n\t}\r\n\r\n\tprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,\r\n\t\t\tIOException {\r\n\t\tString mensagem = \"\";\r\n\t\ttry {\r\n\t\t\tlogger.info(\"N\u00edvel de Log INFO\");\r\n\t\t\tlogger.warn(\"N\u00edvel de Log WARN\");\r\n\t\t\tlogger.debug(\"N\u00edvel de Log DEBUG\");\r\n\t\t\tlogger.error(\"N\u00edvel de Log ERROR\");\r\n\t\t\tlogger.trace(\"N\u00edvel de Log TRACE\");\r\n\r\n\t\t\t\/\/ Mensagem que ser\u00e1 exibida na tela com a informa\u00e7\u00e3o da \u00faltima\r\n\t\t\t\/\/ execu\u00e7\u00e3o.\r\n\t\t\tmensagem = \"
N\u00edvel de log atual: \" + logger.getLevel() + \"<\/H3>\";\r\n\t\t\tmensagem += \"
Ultima execu\u00e7\u00e3o: \" + new Date() + \"
\";\r\n\r\n\t\t\t\r\n\t\t\t\/\/Atribui\u00e7\u00e3o da mensagem para enviar \u00e0 p\u00e1gina index.jsp\r\n\t\t\trequest.setAttribute(\"mensagem\", mensagem);\r\n\r\n\t\t\t\/\/Prepara\u00e7\u00e3o da chamada da p\u00e1gina index.jsp\r\n\t\t\tRequestDispatcher rd = request.getRequestDispatcher(\"index.jsp\");\r\n\t\t\t\r\n\t\t\t\/\/Envio da requisi\u00e7\u00e3o para a p\u00e1gina index.jsp\r\n\t\t\trd.forward(request, response);\r\n\t\t\t\r\n\t\t} catch (Exception e) {\r\n\t\t\tlogger.error(\"Ocorreu o seguinte erro na aplica\u00e7\u00e3o: \" + e.getMessage());\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n
6. Cria\u00e7\u00e3o da p\u00e1gina<\/H2>
\n Crie uma p\u00e1gina chamada “index.jsp”. Nela teremos um link para o servlet que ir\u00e1 gerar logs.<\/p>\n\r\n\r\n\r\n
Executar Servlet<\/a>\r\n\t
${mensagem}\r\n<\/body>\r\n<\/html>\r\n\r\n<\/pre>\n7. Execu\u00e7\u00e3o do projeto<\/H2>
\n Inicie o seu projeto e clique no link da p\u00e1gina principal. O resultado ser\u00e1 algo com o exemplo abaixo:<\/p>\n\r\nINFO - 20141017.171951 - FeltexLog4J - N\u00edvel de Log INFO \r\nWARN - 20141017.171951 - FeltexLog4J - N\u00edvel de Log WARN \r\nERROR - 20141017.171951 - FeltexLog4J - N\u00edvel de Log ERROR \r\n<\/pre>\n
8. Download do exemplo completo<\/H2>
\n Fa\u00e7a o download do exemplo completo neste link<\/a>. Se voc\u00ea n\u00e3o souber importar um arquivo war ent\u00e3o leia este artigo aqui<\/a>.<\/p>\n
\nLinks relacionados<\/H2><\/p>\n