-
Notifications
You must be signed in to change notification settings - Fork 11
/
logging-com-ruby.html
119 lines (106 loc) · 9.68 KB
/
logging-com-ruby.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Logging com Ruby</title>
<meta name="author" content="" />
<!--- Blueprint CSS Framework -->
<link rel="stylesheet" href="css/blueprint/screen.css" type="text/css" media="screen, projection">
<link rel="stylesheet" href="css/blueprint/print.css" type="text/css" media="print">
<!--[if IE]>
<link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection">
<![endif]-->
<!-- CodeRay syntax highlighting CSS -->
<link rel="stylesheet" href="css/coderay.css" type="text/css" />
<!-- Homepage CSS -->
<link rel="stylesheet" href="css/site.css" type="text/css" media="screen, projection" />
</head>
<body>
<div class="container">
<div class="column span-22 prepend-1 append-1 first last" id="header">
<h1 class="title"><a href="index.html" alt="voltar para o início">Tutorial de Ruby do GURU-SP</a></h1>
<hr>
</div>
<div class="column span-17 prepend-1 first">
<p class="title">Logging com Ruby</p>
<p>A classe <b>Logger</b> da biblioteca padrão do Ruby ajuda a escrever mensagens de log para um arquivo ou para um stream de dados. Ela suporta rolagem dos arquivos de log por tempo ou baseada em tamanho. Às mensagens podem ser associados níveis de gravidade e apenas as mensagens em um determinado nivel ou acima do nível atual do logger serão armazenadas, isto é, “logadas”.</p>
<p>Quando você escreve um código, você simplesmente assume que todas as mensagens serão logadas. Em tempo de execução, você pode obter um log mais ou menos verboso mudando o nível do log. Uma aplicação em produção geralmente tem um nível de log Logger:INFO ou Logger:WARN. Do menos ao mais severo, os métodos são <b>Logger.debug</b>, <b>Logger.info</b>, <b>Logger.warn</b>, <b>Logger.error</b> e <b>Logger.fatal</b>.</p>
<p>O nível de log DEBUG é útil para diagnosticar uma tarefa passo a passo. O nível ERROR é geralmente usado quando se lida com o tratamento de exceções: se o programa não consegue resolver um problema, ele loga a exceção ao invés de parar sua execução e esperar que um administrador cuide do problema. O nível FATAL deve apenas ser usado quando um programa não pode se recuperar de algum problema, e está prestes a travar ou finalizar.</p>
<p>Se seu log está sendo armazenado em um arquivo, você pode ter o <b>Logger</b> rotacionado ou substituído quando ele se torna muito grande, ou uma vez que uma certa quantidade de tempo passou:</p>
<div class="CodeRay">
<pre><span class="no">1</span> require <span class="s"><span class="dl">'</span><span class="k">logger</span><span class="dl">'</span></span>
<span class="no">2</span> <span class="c"># Mantenha os dados apenas para o mês atual</span>
<span class="no">3</span> <span class="co">Logger</span>.new(<span class="s"><span class="dl">'</span><span class="k">este_mes_.log</span><span class="dl">'</span></span>, <span class="s"><span class="dl">'</span><span class="k">monthly</span><span class="dl">'</span></span>)
<span class="no">4</span> <span class="c"># Mantenha os dados de hoje e para os proximos 20 dias</span>
<span class="no">5</span> <span class="co">Logger</span>.new(<span class="s"><span class="dl">'</span><span class="k">application.log</span><span class="dl">'</span></span>, <span class="i">20</span>, <span class="s"><span class="dl">'</span><span class="k">daily</span><span class="dl">'</span></span>)
<span class="no">6</span> <span class="c"># Reinicia o logger assim que o arquivo completar 100 megabytes</span>
<span class="no">7</span> <span class="co">Logger</span>.new(<span class="s"><span class="dl">'</span><span class="k">application.log</span><span class="dl">'</span></span>, <span class="i">0</span>, <span class="i">100</span> * <span class="i">1024</span> * <span class="i">1024</span>)
</pre>
</div>
<p>O código abaixo, usa o logger da aplicação para imprimir uma mensagem de debugging e, em um nível mais alto de severidade, como parte do código de tratamento de erro.</p>
<div class="CodeRay">
<pre><span class="no"> 1</span> <span class="c">#logex.rb</span>
<span class="no"> 2</span> require <span class="s"><span class="dl">'</span><span class="k">logger</span><span class="dl">'</span></span>
<span class="no"> 3</span> <span class="gv">$LOG</span> = <span class="co">Logger</span>.new(<span class="s"><span class="dl">'</span><span class="k">log_file.log</span><span class="dl">'</span></span>, <span class="s"><span class="dl">'</span><span class="k">monthly</span><span class="dl">'</span></span>)
<span class="no"> 4</span> <span class="r">def</span> <span class="fu">divide</span>(numerador, denominador)
<span class="no"> 5</span> <span class="gv">$LOG</span>.debug(<span class="s"><span class="dl">"</span><span class="k">Numerator: </span><span class="il"><span class="idl">#{</span>numerador<span class="idl">}</span></span><span class="k">, denominador </span><span class="il"><span class="idl">#{</span>denominador<span class="idl">}</span></span><span class="dl">"</span></span>)
<span class="no"> 6</span> <span class="r">begin</span>
<span class="no"> 7</span> result = numerador / denominador
<span class="no"> 8</span> <span class="r">rescue</span> <span class="co">Exception</span> => e
<span class="no"> 9</span> <span class="gv">$LOG</span>.error <span class="s"><span class="dl">"</span><span class="k">Erro na divisão!: </span><span class="il"><span class="idl">#{</span>e<span class="idl">}</span></span><span class="dl">"</span></span>
<span class="no"><strong>10</strong></span> resultado = <span class="pc">nil</span>
<span class="no">11</span> <span class="r">end</span>
<span class="no">12</span> <span class="r">return</span> resultado
<span class="no">13</span> <span class="r">end</span>
<span class="no">14</span> divide(<span class="i">10</span>, <span class="i">2</span>)
</pre>
</div>
<p>O conteúdo do arquivo log_file.log é:</p>
<div class="CodeRay">
<pre><span class="no">1</span> # Logfile created on Tue Mar 18 17:09:29 +0530 2008 by /
<span class="no">2</span> D, [2008-03-18T17:09:29.216000 #2020] DEBUG -- : Numerador: 10, denominador 2
</pre>
</div>
<p>Agora tente chamar o método assim:</p>
<div class="CodeRay">
<pre><span class="no">1</span> divide(<span class="i">10</span>, <span class="i">0</span>)
</pre>
</div>
<p>O conteúdo do arquivo log_file.log é:</p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="c"># Logfile created on Tue Mar 18 17:09:29 +0530 2008 by /</span>
<span class="no">2</span> <span class="co">D</span>, [<span class="i">2008</span>-<span class="i">03</span>-<span class="i">18</span><span class="co">T17</span>:<span class="i">09</span>:<span class="fl">29.216000</span> <span class="c">#2020] DEBUG -- : Numerador: 10, denominador 2</span>
<span class="no">3</span> <span class="co">D</span>, [<span class="i">2008</span>-<span class="i">03</span>-<span class="i">18</span><span class="co">T17</span>:<span class="i">13</span>:<span class="fl">50.044000</span> <span class="c">#2820] DEBUG -- : Numerador: 10, denominador 0</span>
<span class="no">4</span> <span class="co">E</span>, [<span class="i">2008</span>-<span class="i">03</span>-<span class="i">18</span><span class="co">T17</span>:<span class="i">13</span>:<span class="fl">50.044000</span> <span class="c">#2820] ERROR -- : Erro na divisião!: divided by 0</span>
</pre>
</div>
<p>Para alterar o nível do log, simplesmente associe a constante apropriada a <b>level</b>:</p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="gv">$LOG</span>.level = <span class="co">Logger</span>::<span class="co">ERROR</span>
</pre>
</div>
<p>Agora nosso logger ignorará todas as mensagens de log exceto as com nível de severidade ERROR ou FATAL. O conteúdo do arquivo log_file.log é:</p>
<div class="CodeRay">
<pre><span class="no">1</span> <span class="co">E</span>, [<span class="i">2008</span>-<span class="i">03</span>-<span class="i">18</span><span class="co">T17</span>:<span class="i">15</span>:<span class="fl">59.919000</span> <span class="c">#2624] ERROR -- : Erro na divisão!: divided by 0</span>
</pre>
</div>
<div class="pagination"><a href="classe-time-do-ruby.html">A classe Time do Ruby ></a></div>
</div>
<div class="column span-5 append-1 last">
<p><a href="http://www.gurusp.org" title="Grupo de Usuários Ruby de SP"><img src="images/logo_guru-sp.jpg" title="Logo do GURU-SP" alt="Logo do Guru-SP" /></a></p>
<div class="box">
<p>Este material tem como base o <a href="http://www.rubylearning.com" title="Ruby Learning">tutorial do RubyLearning.com de Satish Talim</a> e foi traduzido por membros do <a href="http://www.gurusp.org" title="Grupo de Usuários Ruby de SP">GURU-SP</a> com a permissão do autor.</p>
<p class="last">Ajude o RubyLearning participando em algum dos <a href="http://www.rubylearning.org" title="cursos do Ruby Learning">cursos pagos</a> ou <a href="http://pledgie.com/campaigns/415" title="Ajude o Ruby Learning">fazendo uma doação para o projeto</a></p>
</div>
<p class="quiet"><a href="index.html" title="índice">Voltar para o índice</a></p>
<h5></h5>
<p class="incr"></p>
</div>
<div class="column span-22 prepend-1 append-1 first last" id="footer">
<hr />
<p>Tuturial de Ruby do <a href="http://www.gurusp.org" title="Grupo de Usuários Ruby de SP">GURU-SP</a>. Este site foi criado com <a href="http://webby.rubyforge.org">Webby</a></p>
</div>
</div>
</body>
</html>