log4r 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/README +3 -3
  2. data/Rakefile +3 -3
  3. data/doc/rdoc-log4r.css +696 -0
  4. data/examples/syslogcustom.rb +6 -1
  5. data/src/doc/Log4r.html +392 -0
  6. data/src/doc/Log4r/BasicFormatter.html +370 -0
  7. data/src/doc/Log4r/ConfigError.html +207 -0
  8. data/src/doc/Log4r/Configurator.html +1050 -0
  9. data/src/doc/Log4r/DateFileOutputter.html +454 -0
  10. data/src/doc/Log4r/DefaultFormatter.html +205 -0
  11. data/src/doc/Log4r/EmailOutputter.html +636 -0
  12. data/src/doc/Log4r/FileOutputter.html +321 -0
  13. data/src/doc/Log4r/Formatter.html +291 -0
  14. data/src/doc/Log4r/IOOutputter.html +392 -0
  15. data/src/doc/Log4r/Log4rConfig.html +193 -0
  16. data/src/doc/Log4r/Log4rTools.html +370 -0
  17. data/src/doc/Log4r/LogEvent.html +360 -0
  18. data/src/doc/Log4r/LogServer.html +322 -0
  19. data/src/doc/Log4r/Logger.html +1132 -0
  20. data/src/doc/Log4r/Logger/LoggerFactory.html +200 -0
  21. data/src/doc/Log4r/Logger/Repository.html +207 -0
  22. data/src/doc/Log4r/ObjectFormatter.html +262 -0
  23. data/src/doc/Log4r/Outputter.html +910 -0
  24. data/src/doc/Log4r/Outputter/OutputterFactory.html +200 -0
  25. data/src/doc/Log4r/Outputter/consoleoutputters_rb.html +57 -0
  26. data/src/doc/Log4r/Outputter/datefileoutputter_rb.html +93 -0
  27. data/src/doc/Log4r/Outputter/emailoutputter_rb.html +179 -0
  28. data/src/doc/Log4r/Outputter/fileoutputter_rb.html +64 -0
  29. data/src/doc/Log4r/Outputter/iooutputter_rb.html +59 -0
  30. data/src/doc/Log4r/Outputter/outputter_rb.html +222 -0
  31. data/src/doc/Log4r/Outputter/outputterfactory_rb.html +62 -0
  32. data/src/doc/Log4r/Outputter/remoteoutputter_rb.html +59 -0
  33. data/src/doc/Log4r/Outputter/rollingfileoutputter_rb.html +66 -0
  34. data/src/doc/Log4r/Outputter/staticoutputter_rb.html +55 -0
  35. data/src/doc/Log4r/Outputter/syslogoutputter_rb.html +110 -0
  36. data/src/doc/Log4r/Outputter/tst_rb.html +54 -0
  37. data/src/doc/Log4r/PatternFormatter.html +422 -0
  38. data/src/doc/Log4r/ROMPClient.html +193 -0
  39. data/src/doc/Log4r/ROMPServer.html +193 -0
  40. data/src/doc/Log4r/RemoteOutputter.html +384 -0
  41. data/src/doc/Log4r/RollingFileOutputter.html +528 -0
  42. data/src/doc/Log4r/RootLogger.html +512 -0
  43. data/src/doc/Log4r/SimpleFormatter.html +258 -0
  44. data/src/doc/Log4r/StderrOutputter.html +250 -0
  45. data/src/doc/Log4r/StdoutOutputter.html +250 -0
  46. data/src/doc/Log4r/SyslogOutputter.html +533 -0
  47. data/src/doc/Log4r/YamlConfigurator.html +948 -0
  48. data/src/doc/Log4r/base_rb.html +57 -0
  49. data/src/doc/Log4r/config_rb.html +76 -0
  50. data/src/doc/Log4r/configurator_rb.html +370 -0
  51. data/src/doc/Log4r/formatter/formatter_rb.html +121 -0
  52. data/src/doc/Log4r/formatter/patternformatter_rb.html +233 -0
  53. data/src/doc/Log4r/lib/drbloader_rb.html +57 -0
  54. data/src/doc/Log4r/lib/xmlloader_rb.html +57 -0
  55. data/src/doc/Log4r/logevent_rb.html +55 -0
  56. data/src/doc/Log4r/logger_rb.html +293 -0
  57. data/src/doc/Log4r/loggerfactory_rb.html +66 -0
  58. data/src/doc/Log4r/logserver_rb.html +161 -0
  59. data/src/doc/Log4r/rdoc/configurator.html +444 -0
  60. data/src/doc/Log4r/rdoc/emailoutputter.html +261 -0
  61. data/src/doc/Log4r/rdoc/formatter.html +200 -0
  62. data/src/doc/Log4r/rdoc/log4r.html +268 -0
  63. data/src/doc/Log4r/rdoc/logger.html +364 -0
  64. data/src/doc/Log4r/rdoc/logserver.html +247 -0
  65. data/src/doc/Log4r/rdoc/outputter.html +295 -0
  66. data/src/doc/Log4r/rdoc/patternformatter.html +313 -0
  67. data/src/doc/Log4r/rdoc/syslogoutputter.html +179 -0
  68. data/src/doc/Log4r/rdoc/yamlconfigurator.html +169 -0
  69. data/src/doc/Log4r/repository_rb.html +62 -0
  70. data/src/doc/Log4r/staticlogger_rb.html +55 -0
  71. data/src/doc/Log4r/yamlconfigurator_rb.html +95 -0
  72. data/src/doc/REXML.html +193 -0
  73. data/src/doc/created.rid +1 -0
  74. data/src/doc/images/brick.png +0 -0
  75. data/src/doc/images/brick_link.png +0 -0
  76. data/src/doc/images/bug.png +0 -0
  77. data/src/doc/images/bullet_black.png +0 -0
  78. data/src/doc/images/bullet_toggle_minus.png +0 -0
  79. data/src/doc/images/bullet_toggle_plus.png +0 -0
  80. data/src/doc/images/date.png +0 -0
  81. data/src/doc/images/find.png +0 -0
  82. data/src/doc/images/loadingAnimation.gif +0 -0
  83. data/src/doc/images/macFFBgHack.png +0 -0
  84. data/src/doc/images/package.png +0 -0
  85. data/src/doc/images/page_green.png +0 -0
  86. data/src/doc/images/page_white_text.png +0 -0
  87. data/src/doc/images/page_white_width.png +0 -0
  88. data/src/doc/images/plugin.png +0 -0
  89. data/src/doc/images/ruby.png +0 -0
  90. data/src/doc/images/tag_green.png +0 -0
  91. data/src/doc/images/wrench.png +0 -0
  92. data/src/doc/images/wrench_orange.png +0 -0
  93. data/src/doc/images/zoom.png +0 -0
  94. data/src/doc/index.html +384 -0
  95. data/src/doc/js/darkfish.js +116 -0
  96. data/src/doc/js/jquery.js +32 -0
  97. data/src/doc/js/quicksearch.js +114 -0
  98. data/src/doc/js/thickbox-compressed.js +10 -0
  99. data/src/doc/rdoc.css +696 -0
  100. data/src/log4r.rb +2 -2
  101. data/src/log4r/formatter/patternformatter.rb +18 -2
  102. data/src/log4r/logger.rb +2 -2
  103. data/src/log4r/outputter/emailoutputter.rb +2 -0
  104. data/src/log4r/outputter/syslogoutputter.rb +29 -9
  105. data/src/log4r/outputter/tst.rb +8 -0
  106. metadata +99 -3
  107. data/examples/logs/simple.log +0 -1
@@ -0,0 +1,444 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
+
9
+ <title>File: configurator [1.1.2 Log4r API Documentation]</title>
10
+
11
+ <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="../../js/jquery.js" type="text/javascript"
14
+ charset="utf-8"></script>
15
+ <script src="../../js/thickbox-compressed.js" type="text/javascript"
16
+ charset="utf-8"></script>
17
+ <script src="../../js/quicksearch.js" type="text/javascript"
18
+ charset="utf-8"></script>
19
+ <script src="../../js/darkfish.js" type="text/javascript"
20
+ charset="utf-8"></script>
21
+ </head>
22
+
23
+ <body class="file">
24
+ <div id="metadata">
25
+ <div id="project-metadata">
26
+
27
+
28
+ <div id="fileindex-section" class="section project-section">
29
+ <h3 class="section-header">Files</h3>
30
+ <ul>
31
+
32
+ <li class="file"><a href="../../log4r/rdoc/configurator.html">configurator</a></li>
33
+
34
+ <li class="file"><a href="../../log4r/rdoc/emailoutputter.html">emailoutputter</a></li>
35
+
36
+ <li class="file"><a href="../../log4r/rdoc/formatter.html">formatter</a></li>
37
+
38
+ <li class="file"><a href="../../log4r/rdoc/log4r.html">log4r</a></li>
39
+
40
+ <li class="file"><a href="../../log4r/rdoc/logger.html">logger</a></li>
41
+
42
+ <li class="file"><a href="../../log4r/rdoc/logserver.html">logserver</a></li>
43
+
44
+ <li class="file"><a href="../../log4r/rdoc/outputter.html">outputter</a></li>
45
+
46
+ <li class="file"><a href="../../log4r/rdoc/patternformatter.html">patternformatter</a></li>
47
+
48
+ <li class="file"><a href="../../log4r/rdoc/syslogoutputter.html">syslogoutputter</a></li>
49
+
50
+ <li class="file"><a href="../../log4r/rdoc/yamlconfigurator.html">yamlconfigurator</a></li>
51
+
52
+ </ul>
53
+ </div>
54
+
55
+
56
+ <div id="classindex-section" class="section project-section">
57
+ <h3 class="section-header">Class Index
58
+ <span class="search-toggle"><img src="../../images/find.png"
59
+ height="16" width="16" alt="[+]"
60
+ title="show/hide quicksearch" /></span></h3>
61
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
62
+ <fieldset>
63
+ <legend>Quicksearch</legend>
64
+ <input type="text" name="quicksearch" value=""
65
+ class="quicksearch-field" />
66
+ </fieldset>
67
+ </form>
68
+
69
+ <ul class="link-list">
70
+
71
+ <li><a href="../../Log4r.html">Log4r</a></li>
72
+
73
+ <li><a href="../../Log4r/BasicFormatter.html">Log4r::BasicFormatter</a></li>
74
+
75
+ <li><a href="../../Log4r/ConfigError.html">Log4r::ConfigError</a></li>
76
+
77
+ <li><a href="../../Log4r/Configurator.html">Log4r::Configurator</a></li>
78
+
79
+ <li><a href="../../Log4r/DateFileOutputter.html">Log4r::DateFileOutputter</a></li>
80
+
81
+ <li><a href="../../Log4r/DefaultFormatter.html">Log4r::DefaultFormatter</a></li>
82
+
83
+ <li><a href="../../Log4r/EmailOutputter.html">Log4r::EmailOutputter</a></li>
84
+
85
+ <li><a href="../../Log4r/FileOutputter.html">Log4r::FileOutputter</a></li>
86
+
87
+ <li><a href="../../Log4r/Formatter.html">Log4r::Formatter</a></li>
88
+
89
+ <li><a href="../../Log4r/IOOutputter.html">Log4r::IOOutputter</a></li>
90
+
91
+ <li><a href="../../Log4r/Log4rTools.html">Log4r::Log4rTools</a></li>
92
+
93
+ <li><a href="../../Log4r/LogEvent.html">Log4r::LogEvent</a></li>
94
+
95
+ <li><a href="../../Log4r/LogServer.html">Log4r::LogServer</a></li>
96
+
97
+ <li><a href="../../Log4r/Logger.html">Log4r::Logger</a></li>
98
+
99
+ <li><a href="../../Log4r/ObjectFormatter.html">Log4r::ObjectFormatter</a></li>
100
+
101
+ <li><a href="../../Log4r/Outputter.html">Log4r::Outputter</a></li>
102
+
103
+ <li><a href="../../Log4r/PatternFormatter.html">Log4r::PatternFormatter</a></li>
104
+
105
+ <li><a href="../../Log4r/RemoteOutputter.html">Log4r::RemoteOutputter</a></li>
106
+
107
+ <li><a href="../../Log4r/RollingFileOutputter.html">Log4r::RollingFileOutputter</a></li>
108
+
109
+ <li><a href="../../Log4r/RootLogger.html">Log4r::RootLogger</a></li>
110
+
111
+ <li><a href="../../Log4r/SimpleFormatter.html">Log4r::SimpleFormatter</a></li>
112
+
113
+ <li><a href="../../Log4r/StderrOutputter.html">Log4r::StderrOutputter</a></li>
114
+
115
+ <li><a href="../../Log4r/StdoutOutputter.html">Log4r::StdoutOutputter</a></li>
116
+
117
+ <li><a href="../../Log4r/SyslogOutputter.html">Log4r::SyslogOutputter</a></li>
118
+
119
+ <li><a href="../../Log4r/YamlConfigurator.html">Log4r::YamlConfigurator</a></li>
120
+
121
+ </ul>
122
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
123
+ </div>
124
+
125
+
126
+ </div>
127
+ </div>
128
+
129
+ <div id="documentation">
130
+ <h1>Configuring <a href="../../Log4r.html">Log4r</a> with <a href="../../Log4r/Configurator.html">Log4r::Configurator</a></h1>
131
+ <p>
132
+ The Configurator class allows one to set up <a
133
+ href="../../Log4r.html">Log4r</a> via XML. Additionally, Configurator
134
+ contains methods to configure any <a href="../../Log4r.html">Log4r</a>
135
+ defaults. In particular, Configurator provides a method to customize the
136
+ logging levels.
137
+ </p>
138
+ <p>
139
+ <a href="../../Log4r.html">Log4r</a> is also configurable using YAML. For
140
+ that, there is a class similar to Configurator called <a
141
+ href="../../Log4r/YamlConfigurator.html">Log4r::YamlConfigurator</a>.
142
+ Please see <a
143
+ href="../yamlconfigurator_rb.html">log4r/yamlconfigurator.rb</a> for
144
+ details.
145
+ </p>
146
+ <p>
147
+ REXML is required for XML configuration. Get REXML at <a
148
+ href="http://www.ruby-lang.org/en/raa-list.rhtml?name=REXML">www.ruby-lang.org/en/raa-list.rhtml?name=REXML</a>
149
+ </p>
150
+ <p>
151
+ To use the Configurator class,
152
+ </p>
153
+ <pre>
154
+ require 'log4r/configurator'
155
+ </pre>
156
+ <h2>Custom Levels</h2>
157
+ <p>
158
+ Suppose you want the following levels and ranks:
159
+ </p>
160
+ <pre>
161
+ Foo &lt; Bar &lt; Baz
162
+ </pre>
163
+ <p>
164
+ This is easily accomplished:
165
+ </p>
166
+ <pre>
167
+ Configurator.custom_levels('Foo', 'Bar', :Baz)
168
+ </pre>
169
+ <p>
170
+ The method accepts strings or symbols. However, custom levels must have
171
+ names that are valid for Ruby constants. Also, custom levels should be set
172
+ before anything else is done with <a href="../../Log4r.html">Log4r</a>,
173
+ otherwise the default levels will be loaded.
174
+ </p>
175
+ <p>
176
+ You can set custom levels in XML. That&#8217;s covered in the following
177
+ section.
178
+ </p>
179
+ <h2>XML Configuration</h2>
180
+ <p>
181
+ If you have REXML, you can configure <a href="../../Log4r.html">Log4r</a>
182
+ with XML. To do this, first write an XML configuration (which you can learn
183
+ by studying this document and the examples provided in the distribution)
184
+ and then load up the XML from within your program as follows:
185
+ </p>
186
+ <pre>
187
+ Configurator.load_xml_file('/path/to/file.xml')
188
+ </pre>
189
+ <p>
190
+ The <a href="../../Log4r.html">Log4r</a> XML configuration system is very
191
+ flexible and powerful. In fact, it is somewhat preferable to configuring <a
192
+ href="../../Log4r.html">Log4r</a> in Ruby. In order to take full advantage
193
+ of this feature, there are several concepts one must know. They are covered
194
+ in the following three sections.
195
+ </p>
196
+ <h3>Concept: XML Directives</h3>
197
+ <p>
198
+ The expressive power of Ruby has enabled a feature I call <em>XML
199
+ directives</em>. An XML directive is a name-value pair belonging to some
200
+ element. It may be represented as an attribute (name=&#8220;value&#8221;)
201
+ of the element, or as a child (<name>value</name>) of the element.
202
+ Therefore, you are free to specify information about an object as either an
203
+ attribute or an element. An example should clarify:
204
+ </p>
205
+ <pre>
206
+ &lt;object data=&quot;value&quot;/&gt;
207
+ </pre>
208
+ <p>
209
+ Is equivalent to:
210
+ </p>
211
+ <pre>
212
+ &lt;object&gt;
213
+ &lt;data&gt;value&lt;/data&gt;
214
+ &lt;/object&gt;
215
+ </pre>
216
+ <p>
217
+ You can assume this behavior except where noted elsewhere in the API.
218
+ </p>
219
+ <h3>Concept: XML Parameters</h3>
220
+ <p>
221
+ A scheme which I call <em>XML parameters</em> enables one to utilize the
222
+ XML configuratin system for custom Outputters and Formatters. This requires
223
+ <b>no</b> extra work on your part, so long as your objects are set up using
224
+ hash arguments and can decode string values. That is, once you&#8217;ve
225
+ written a custom Outputter, it is automatically configurable in XML without
226
+ having to write any extra code.
227
+ </p>
228
+ <p>
229
+ An XML parameter is analogous to a hash argument to some object&#8217;s
230
+ <tt>new</tt> method. Consider these hash arguments to FileOutputter:
231
+ </p>
232
+ <pre>
233
+ :filename =&gt; '/path/to/logs/my.log'
234
+ :trunc =&gt; 'true'
235
+ </pre>
236
+ <p>
237
+ We can specify them in XML like this:
238
+ </p>
239
+ <pre>
240
+ &lt;outputter type=&quot;FileOutputter&quot; trunc=&quot;true&quot;&gt;
241
+ &lt;filename&gt;/path/to/logs/my.log&lt;/filename&gt;
242
+ ...
243
+ </pre>
244
+ <p>
245
+ The name of the element/attribute is just the name of the parameter. Note
246
+ that the input will be a string, thus it&#8217;s wise to convert the data
247
+ in from strings in any custom classes (to_i for integers, etc). Now
248
+ let&#8217;s suppose you have defined a custom Outputter named MyOutputter
249
+ with the following additional hash args:
250
+ </p>
251
+ <pre>
252
+ :myarg1 =&gt; 'foo'
253
+ :myarg2 =&gt; 123
254
+ </pre>
255
+ <p>
256
+ Automagically, you can configure your Outputter like so:
257
+ </p>
258
+ <pre>
259
+ &lt;outputter type=&quot;MyOutputter&quot; myarg2=&quot;123&quot;&gt;
260
+ &lt;myarg1&gt;foo&lt;/myarg1&gt;
261
+ ...
262
+ </pre>
263
+ <p>
264
+ Isn&#8217;t that nice? <tt>:-)</tt>
265
+ </p>
266
+ <h3>Concept: Variable Substitution</h3>
267
+ <p>
268
+ To kill the need for preprocessors, Configurator provides a means of
269
+ variable substitution for XML parameters at runtime. If you specify
270
+ <tt>#{foo}</tt> in an XML parameter value, Configurator will replace it
271
+ with the value of &#8216;foo&#8217; in its parameter hashtable. The primary
272
+ idea is that you can figure stuff out in your program, say the log path,
273
+ and relay that information to the XML while it&#8217;s being loaded.
274
+ Secondarily, it is a way to have aliases within an XML document.
275
+ </p>
276
+ <p>
277
+ There are two ways to tell Configurator about these variables. The first
278
+ method we&#8217;ll cover is done within a Ruby program with Configurator[].
279
+ </p>
280
+ <pre>
281
+ Configurator['logpath'] = '/path/to/logs'
282
+ </pre>
283
+ <p>
284
+ Thereafter, any occurence of <tt>#{logpath}</tt> in each and every XML
285
+ parameter will be substituted with &#8216;/path/to/logs&#8217;. For
286
+ example:
287
+ </p>
288
+ <pre>
289
+ &lt;filename&gt;#{logpath}/mylog.log&lt;/filename&gt;
290
+ </pre>
291
+ <p>
292
+ Becomes,
293
+ </p>
294
+ <pre>
295
+ &lt;filename&gt;/path/to/logs/mylog.log&lt;/filename&gt;
296
+ </pre>
297
+ <p>
298
+ Aside from Configurator[], another way to define XML parameter variables is
299
+ to define <tt>parameters</tt> under the <tt>&lt;pre_config&gt;</tt> element
300
+ of an XML configuration:
301
+ </p>
302
+ <pre>
303
+ &lt;pre_config&gt;
304
+ &lt;parameter name=&quot;logpath&quot; value=&quot;/path/to/logs'/&gt;
305
+ &lt;parameter name=&quot;other&quot; value=&quot;somethingelse'/&gt;
306
+ ...
307
+ &lt;/pre_config&gt;
308
+ </pre>
309
+ <p>
310
+ Alternatively,
311
+ </p>
312
+ <pre>
313
+ &lt;pre_config&gt;
314
+ &lt;parameters&gt;
315
+ &lt;logpath&gt;/path/to/logs&lt;/logpath&gt;
316
+ &lt;other&gt;somethingelse&lt;/other&gt;
317
+ ...
318
+ &lt;/parameters&gt;
319
+ ...
320
+ </pre>
321
+ <p>
322
+ The end result is the same as using Configurator[]. However, this method is
323
+ not dynamic. Configurator[] should be used when you want to set variables
324
+ from within Ruby.
325
+ </p>
326
+ <h1>XML Grammar</h1>
327
+ <p>
328
+ And now, here&#8217;s the XML grammar we use to configure <a
329
+ href="../../Log4r.html">Log4r</a>.
330
+ </p>
331
+ <h2>Root Element</h2>
332
+ <p>
333
+ The root element is <tt>&lt;log4r_config&gt;</tt>. It can be embedded as a
334
+ node of any other element in an XML file. For instance:
335
+ </p>
336
+ <pre>
337
+ &lt;my-xml-thing&gt;
338
+ &lt;customize-libraries&gt;
339
+ &lt;log4r_config&gt;
340
+ &lt;!-- log4r configuratin goes here --&gt;
341
+ &lt;/log4r_config&gt;
342
+ ...
343
+ </pre>
344
+ <h2>Pre-config element</h2>
345
+ <p>
346
+ The pre_config element is a child of log4r_config and contains:
347
+ </p>
348
+ <ul>
349
+ <li>&#8216;custom_levels&#8217; element
350
+
351
+ </li>
352
+ <li>&#8216;global&#8217; element
353
+
354
+ </li>
355
+ <li>&#8216;parameters&#8217; element
356
+
357
+ </li>
358
+ <li>any number of &#8216;parameter&#8217; elements
359
+
360
+ </li>
361
+ </ul>
362
+ <h3>Pre_config: Custom Levels</h3>
363
+ <p>
364
+ The custom_levels element is not an <em>XML directive</em> of pre_config.
365
+ It <b>must</b> be specified like this:
366
+ </p>
367
+ <pre>
368
+ &lt;custom_levels&gt;Foo, Bar, Baz&lt;/custom_levels&gt;
369
+ </pre>
370
+ <p>
371
+ And <b>not</b> like this:
372
+ </p>
373
+ <pre>
374
+ &lt;!-- NOT SUPPORTED --&gt;
375
+ &lt;custom_levels levels=&quot;Foo, Bar, Baz&quot;/&gt;
376
+ </pre>
377
+ <h3>Pre_config: Global Level</h3>
378
+ <pre>
379
+ &lt;global level=&quot;DEBUG&quot;/&gt;
380
+ </pre>
381
+ <p>
382
+ or
383
+ </p>
384
+ <pre>
385
+ &lt;global&gt;&lt;level&gt;DEBUG&lt;/level&gt;&lt;/global&gt;
386
+ </pre>
387
+ <p>
388
+ Here, level is an XML directive of global.
389
+ </p>
390
+ <h3>Pre_config: Parameters</h3>
391
+ <p>
392
+ Parameters are variables that will be substituted later on. Please see the
393
+ <b>Concept: Variable Substitution</b> section above. Parameters are <em>XML
394
+ Directives</em>, which means they can be expressed using elements or
395
+ attributes. Here is an example:
396
+ </p>
397
+ <pre>
398
+ &lt;parameter name=&quot;param name 1&quot; value=&quot;param value 1&quot;&gt;
399
+ &lt;parameter name=&quot;param name 2&quot; value=&quot;param value 2&quot;&gt;
400
+ ...
401
+ &lt;parameters&gt;
402
+ &lt;param3&gt;value3&lt;/param3&gt;
403
+ &lt;param4&gt;value3&lt;/param4&gt;
404
+ ...
405
+ </pre>
406
+ <h3>Pre_config: Complete Example</h3>
407
+ <pre>
408
+ &lt;log4r_config&gt;
409
+
410
+ &lt;pre_config&gt;
411
+ &lt;custom_levels&gt;
412
+ Foo,Bar, Baz
413
+ &lt;/custom_levels&gt;
414
+ &lt;global level=&quot;Bar&quot;/&gt;
415
+ &lt;parameters&gt;
416
+ &lt;logpath&gt;/var/log/foo&lt;/logpath&gt;
417
+ &lt;mypattern&gt;%l [%d] %m&lt;/mypattern&gt;
418
+ &lt;/parameters&gt;
419
+ &lt;/pre_config&gt;
420
+
421
+ &lt;!-- define some outputters and loggers --&gt;
422
+
423
+ &lt;/log4r_config&gt;
424
+ </pre>
425
+ <h2>Configuring <a href="../../Log4r.html">Log4r</a> Objects</h2>
426
+ <p>
427
+ The XML configuration grammar for Loggers, Outputters and the like are
428
+ covered in the usage guidelines for those classes.
429
+ </p>
430
+ <h2>Order Doesn&#8217;t Matter</h2>
431
+ <p>
432
+ You can (it is hoped) define any of the XML objects in any order desired.
433
+ </p>
434
+
435
+ </div>
436
+
437
+ <div id="validator-badges">
438
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
439
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
440
+ Rdoc Generator</a> 1.1.6</small>.</p>
441
+ </div>
442
+ </body>
443
+ </html>
444
+
@@ -0,0 +1,261 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
+
9
+ <title>File: emailoutputter [1.1.2 Log4r API Documentation]</title>
10
+
11
+ <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="../../js/jquery.js" type="text/javascript"
14
+ charset="utf-8"></script>
15
+ <script src="../../js/thickbox-compressed.js" type="text/javascript"
16
+ charset="utf-8"></script>
17
+ <script src="../../js/quicksearch.js" type="text/javascript"
18
+ charset="utf-8"></script>
19
+ <script src="../../js/darkfish.js" type="text/javascript"
20
+ charset="utf-8"></script>
21
+ </head>
22
+
23
+ <body class="file">
24
+ <div id="metadata">
25
+ <div id="project-metadata">
26
+
27
+
28
+ <div id="fileindex-section" class="section project-section">
29
+ <h3 class="section-header">Files</h3>
30
+ <ul>
31
+
32
+ <li class="file"><a href="../../log4r/rdoc/configurator.html">configurator</a></li>
33
+
34
+ <li class="file"><a href="../../log4r/rdoc/emailoutputter.html">emailoutputter</a></li>
35
+
36
+ <li class="file"><a href="../../log4r/rdoc/formatter.html">formatter</a></li>
37
+
38
+ <li class="file"><a href="../../log4r/rdoc/log4r.html">log4r</a></li>
39
+
40
+ <li class="file"><a href="../../log4r/rdoc/logger.html">logger</a></li>
41
+
42
+ <li class="file"><a href="../../log4r/rdoc/logserver.html">logserver</a></li>
43
+
44
+ <li class="file"><a href="../../log4r/rdoc/outputter.html">outputter</a></li>
45
+
46
+ <li class="file"><a href="../../log4r/rdoc/patternformatter.html">patternformatter</a></li>
47
+
48
+ <li class="file"><a href="../../log4r/rdoc/syslogoutputter.html">syslogoutputter</a></li>
49
+
50
+ <li class="file"><a href="../../log4r/rdoc/yamlconfigurator.html">yamlconfigurator</a></li>
51
+
52
+ </ul>
53
+ </div>
54
+
55
+
56
+ <div id="classindex-section" class="section project-section">
57
+ <h3 class="section-header">Class Index
58
+ <span class="search-toggle"><img src="../../images/find.png"
59
+ height="16" width="16" alt="[+]"
60
+ title="show/hide quicksearch" /></span></h3>
61
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
62
+ <fieldset>
63
+ <legend>Quicksearch</legend>
64
+ <input type="text" name="quicksearch" value=""
65
+ class="quicksearch-field" />
66
+ </fieldset>
67
+ </form>
68
+
69
+ <ul class="link-list">
70
+
71
+ <li><a href="../../Log4r.html">Log4r</a></li>
72
+
73
+ <li><a href="../../Log4r/BasicFormatter.html">Log4r::BasicFormatter</a></li>
74
+
75
+ <li><a href="../../Log4r/ConfigError.html">Log4r::ConfigError</a></li>
76
+
77
+ <li><a href="../../Log4r/Configurator.html">Log4r::Configurator</a></li>
78
+
79
+ <li><a href="../../Log4r/DateFileOutputter.html">Log4r::DateFileOutputter</a></li>
80
+
81
+ <li><a href="../../Log4r/DefaultFormatter.html">Log4r::DefaultFormatter</a></li>
82
+
83
+ <li><a href="../../Log4r/EmailOutputter.html">Log4r::EmailOutputter</a></li>
84
+
85
+ <li><a href="../../Log4r/FileOutputter.html">Log4r::FileOutputter</a></li>
86
+
87
+ <li><a href="../../Log4r/Formatter.html">Log4r::Formatter</a></li>
88
+
89
+ <li><a href="../../Log4r/IOOutputter.html">Log4r::IOOutputter</a></li>
90
+
91
+ <li><a href="../../Log4r/Log4rTools.html">Log4r::Log4rTools</a></li>
92
+
93
+ <li><a href="../../Log4r/LogEvent.html">Log4r::LogEvent</a></li>
94
+
95
+ <li><a href="../../Log4r/LogServer.html">Log4r::LogServer</a></li>
96
+
97
+ <li><a href="../../Log4r/Logger.html">Log4r::Logger</a></li>
98
+
99
+ <li><a href="../../Log4r/ObjectFormatter.html">Log4r::ObjectFormatter</a></li>
100
+
101
+ <li><a href="../../Log4r/Outputter.html">Log4r::Outputter</a></li>
102
+
103
+ <li><a href="../../Log4r/PatternFormatter.html">Log4r::PatternFormatter</a></li>
104
+
105
+ <li><a href="../../Log4r/RemoteOutputter.html">Log4r::RemoteOutputter</a></li>
106
+
107
+ <li><a href="../../Log4r/RollingFileOutputter.html">Log4r::RollingFileOutputter</a></li>
108
+
109
+ <li><a href="../../Log4r/RootLogger.html">Log4r::RootLogger</a></li>
110
+
111
+ <li><a href="../../Log4r/SimpleFormatter.html">Log4r::SimpleFormatter</a></li>
112
+
113
+ <li><a href="../../Log4r/StderrOutputter.html">Log4r::StderrOutputter</a></li>
114
+
115
+ <li><a href="../../Log4r/StdoutOutputter.html">Log4r::StdoutOutputter</a></li>
116
+
117
+ <li><a href="../../Log4r/SyslogOutputter.html">Log4r::SyslogOutputter</a></li>
118
+
119
+ <li><a href="../../Log4r/YamlConfigurator.html">Log4r::YamlConfigurator</a></li>
120
+
121
+ </ul>
122
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
123
+ </div>
124
+
125
+
126
+ </div>
127
+ </div>
128
+
129
+ <div id="documentation">
130
+ <h1>EmailOutputter</h1>
131
+ <p>
132
+ This is an experimental class that sends a number of formatted log events
133
+ as an RFC 822 email. It should work fine if Net:SMTP doesn&#8217;t cause
134
+ any problems. Just in case, create a logger named &#8216;log4r&#8217; and
135
+ give it an outputter to see the logging statements made by this class. If
136
+ it fails to send email, it will set itself to OFF and stop logging.
137
+ </p>
138
+ <p>
139
+ In order to use it,
140
+ </p>
141
+ <pre>
142
+ require 'log4r/outputter/emailoutputter'
143
+ </pre>
144
+ <h2>SMTP Configuration</h2>
145
+ <p>
146
+ All arguments to Net::SMTP.start are supported. Pass them as hash
147
+ parameters to <tt>new</tt>. The to field is specified as a comma-delimited
148
+ list of emails (padded with s* if desired).
149
+ </p>
150
+ <p>
151
+ An example:
152
+ </p>
153
+ <pre>
154
+ email_out = EmailOutputter.new 'email_out',
155
+ :server=&gt;'localhost',
156
+ :port=&gt;25,
157
+ :domain=&gt;'somewhere.com',
158
+ :from=&gt;'me@foo.bar',
159
+ :to=&gt;'them@foo.bar, me@foo.bar, bozo@clown.net',
160
+ :subject=&gt;'Log Report'
161
+ </pre>
162
+ <h2>LogEvent Buffer</h2>
163
+ <p>
164
+ EmailOutputter stores log messages in a buffer. When the buffer reaches a
165
+ certain number, the <tt>buffsize</tt>, it will send an email containing the
166
+ contents of the buffer. The default <tt>buffsize</tt> is 100. To set
167
+ <tt>buffsize</tt>,
168
+ </p>
169
+ <pre>
170
+ email_out.buffsize = 1000 # set the buffsize to 1000
171
+ </pre>
172
+ <h2>Flush To Send Email</h2>
173
+ <p>
174
+ Flushing an EmailOutputter will mail out all the remaining LogEvents. This
175
+ is convenient for systems that encapsulate the shutdown process. It&#8217;s
176
+ a good idea to do this for all outputters,
177
+ </p>
178
+ <pre>
179
+ Outputter.each_outputter {|o| o.flush}
180
+ </pre>
181
+ <p>
182
+ Alternatively, one can invoke flush on the outputter directly,
183
+ </p>
184
+ <pre>
185
+ email_out.flush
186
+ </pre>
187
+ <p>
188
+ It&#8217;s also a good idea to notify the recepient of the email that the
189
+ system is shutting down. Before flushing, log a message to the owner of
190
+ this outputter,
191
+ </p>
192
+ <pre>
193
+ log_with_email_out.info &quot;The system is shutting down at #{Time.now}&quot;
194
+ </pre>
195
+ <h2>Format When?</h2>
196
+ <p>
197
+ LogEvents may either be formatted as they come in or as the email is being
198
+ composed. To do the former, specify a value of <tt>true</tt> to the hash
199
+ parameter <tt>formatfirst</tt>. The default is to format during email
200
+ composition.
201
+ </p>
202
+ <pre>
203
+ email_out.formatfirst = true # format as soon as LogEvents are received
204
+ </pre>
205
+ <h2>Immediate Notification</h2>
206
+ <p>
207
+ EmailOutputter can be configured to flush and send the email whenever the
208
+ logger sees a certain log priority. Use the <tt>immediate_at</tt> hash
209
+ parameter and specify the levels as a comma-delimited list (like an XML
210
+ element). To trigger an email on FATAL and ERROR,
211
+ </p>
212
+ <pre>
213
+ email_out.immediate_at = &quot;FATAL, ERROR&quot;
214
+ </pre>
215
+ <h2>Example</h2>
216
+ <p>
217
+ A security logger sends email to several folks, buffering up to 25 log
218
+ events and sending immediates on CRIT and WARN
219
+ </p>
220
+ <pre>
221
+ EmailOutputter.new 'security',
222
+ :to =&gt; 'bob@secure.net, frank@secure.net',
223
+ :buffsize =&gt; 25,
224
+ :immediate_at =&gt; 'WARN, CRIT'
225
+ </pre>
226
+ <h2>XML Configuration</h2>
227
+ <p>
228
+ See <a href="../configurator_rb.html">log4r/configurator.rb</a> for
229
+ details. Here&#8217;s an example:
230
+ </p>
231
+ <pre>
232
+ &lt;outputter name=&quot;security&quot; type=&quot;EmailOutputter&quot;
233
+ buffsize=&quot;25&quot; level=&quot;ALL&quot;&gt;
234
+ &lt;immediate_at&gt;WARN, CRIT&lt;/immediate_at&gt;
235
+ &lt;server&gt;localhost&lt;/server&gt;
236
+ &lt;from&gt;me@secure.net&lt;/from&gt;
237
+ &lt;to&gt;
238
+ bob@secure.net, frank@secure.net
239
+ &lt;/to&gt;
240
+ ...
241
+ &lt;/outputter&gt;
242
+ </pre>
243
+ <h2>To Do</h2>
244
+ <p>
245
+ This class could use some sophistication, in particular a means to compress
246
+ the logs, a way to set the subject dynamically (probably via a block
247
+ method), and a time trigger. When the time trigger is introduced, a
248
+ <tt>buffsize</tt> of 0 should mean ignore <tt>buffsize</tt> to determine
249
+ when to send the email.
250
+ </p>
251
+
252
+ </div>
253
+
254
+ <div id="validator-badges">
255
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
256
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
257
+ Rdoc Generator</a> 1.1.6</small>.</p>
258
+ </div>
259
+ </body>
260
+ </html>
261
+