sml-log4r 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. data/doc/content/contact.html +22 -0
  2. data/doc/content/contribute.html +21 -0
  3. data/doc/content/index.html +90 -0
  4. data/doc/content/license.html +56 -0
  5. data/doc/content/manual.html +449 -0
  6. data/doc/dev/README.developers +40 -0
  7. data/doc/dev/checklist +14 -0
  8. data/doc/dev/things-to-do +2 -0
  9. data/doc/images/crush/logo2.png +0 -0
  10. data/doc/images/log4r-logo.png +0 -0
  11. data/doc/images/logo2.png +0 -0
  12. data/doc/log4r.css +111 -0
  13. data/doc/old/manual.html +348 -0
  14. data/doc/templates/main.html +147 -0
  15. data/examples/README +19 -0
  16. data/examples/customlevels.rb +34 -0
  17. data/examples/fileroll.rb +40 -0
  18. data/examples/log4r_yaml.yaml +0 -0
  19. data/examples/logclient.rb +25 -0
  20. data/examples/logserver.rb +18 -0
  21. data/examples/moderate.xml +29 -0
  22. data/examples/moderateconfig.rb +66 -0
  23. data/examples/myformatter.rb +23 -0
  24. data/examples/outofthebox.rb +21 -0
  25. data/examples/rrconfig.xml +63 -0
  26. data/examples/rrsetup.rb +42 -0
  27. data/examples/simpleconfig.rb +39 -0
  28. data/examples/xmlconfig.rb +25 -0
  29. data/examples/yaml.rb +30 -0
  30. data/src/log4r.rb +17 -0
  31. data/src/log4r/base.rb +74 -0
  32. data/src/log4r/config.rb +9 -0
  33. data/src/log4r/configurator.rb +224 -0
  34. data/src/log4r/formatter/formatter.rb +105 -0
  35. data/src/log4r/formatter/patternformatter.rb +108 -0
  36. data/src/log4r/lib/drbloader.rb +52 -0
  37. data/src/log4r/lib/xmlloader.rb +24 -0
  38. data/src/log4r/logevent.rb +28 -0
  39. data/src/log4r/logger.rb +194 -0
  40. data/src/log4r/loggerfactory.rb +89 -0
  41. data/src/log4r/logserver.rb +28 -0
  42. data/src/log4r/outputter/consoleoutputters.rb +18 -0
  43. data/src/log4r/outputter/datefileoutputter.rb +110 -0
  44. data/src/log4r/outputter/emailoutputter.rb +115 -0
  45. data/src/log4r/outputter/fileoutputter.rb +49 -0
  46. data/src/log4r/outputter/iooutputter.rb +55 -0
  47. data/src/log4r/outputter/outputter.rb +132 -0
  48. data/src/log4r/outputter/outputterfactory.rb +59 -0
  49. data/src/log4r/outputter/remoteoutputter.rb +40 -0
  50. data/src/log4r/outputter/rollingfileoutputter.rb +126 -0
  51. data/src/log4r/outputter/staticoutputter.rb +30 -0
  52. data/src/log4r/outputter/syslogoutputter.rb +75 -0
  53. data/src/log4r/rdoc/configurator +243 -0
  54. data/src/log4r/rdoc/emailoutputter +103 -0
  55. data/src/log4r/rdoc/formatter +39 -0
  56. data/src/log4r/rdoc/log4r +89 -0
  57. data/src/log4r/rdoc/logger +175 -0
  58. data/src/log4r/rdoc/logserver +85 -0
  59. data/src/log4r/rdoc/outputter +108 -0
  60. data/src/log4r/rdoc/patternformatter +128 -0
  61. data/src/log4r/rdoc/syslogoutputter +29 -0
  62. data/src/log4r/rdoc/yamlconfigurator +20 -0
  63. data/src/log4r/repository.rb +65 -0
  64. data/src/log4r/staticlogger.rb +49 -0
  65. data/src/log4r/yamlconfigurator.rb +0 -0
  66. data/tests/include.rb +7 -0
  67. data/tests/runtest.rb +6 -0
  68. data/tests/testbase.rb +45 -0
  69. data/tests/testcustom.rb +33 -0
  70. data/tests/testdefault.rb +25 -0
  71. data/tests/testformatter.rb +29 -0
  72. data/tests/testlogger.rb +198 -0
  73. data/tests/testoutputter.rb +112 -0
  74. data/tests/testpatternformatter.rb +26 -0
  75. data/tests/testxmlconf.rb +51 -0
  76. data/tests/xml/testconf.xml +37 -0
  77. metadata +140 -0
@@ -0,0 +1,243 @@
1
+ = Configuring Log4r with Log4r::Configurator
2
+
3
+ The Configurator class allows one to set up Log4r via XML.
4
+ Additionally, Configurator contains methods to configure any Log4r
5
+ defaults. In particular, Configurator provides a method to
6
+ customize the logging levels.
7
+
8
+ Log4r is also configurable using YAML. For that, there is
9
+ a class similar to Configurator called Log4r::YamlConfigurator. Please see
10
+ log4r/yamlconfigurator.rb for details.
11
+
12
+ REXML is required for XML configuration. Get REXML at
13
+ http://www.ruby-lang.org/en/raa-list.rhtml?name=REXML
14
+
15
+ To use the Configurator class,
16
+
17
+ require 'log4r/configurator'
18
+
19
+ == Custom Levels
20
+
21
+ Suppose you want the following levels and ranks:
22
+
23
+ Foo < Bar < Baz
24
+
25
+ This is easily accomplished:
26
+
27
+ Configurator.custom_levels('Foo', 'Bar', :Baz)
28
+
29
+ The method accepts strings or symbols. However, custom levels must have names
30
+ that are valid for Ruby constants. Also, custom levels should be set before
31
+ anything else is done with Log4r, otherwise the default levels will be loaded.
32
+
33
+ You can set custom levels in XML. That's covered in the following section.
34
+
35
+ == XML Configuration
36
+
37
+ If you have REXML, you can configure Log4r with XML.
38
+ To do this, first write an XML configuration (which you can learn by
39
+ studying this document and the examples provided in the distribution)
40
+ and then load up the XML from within your program as follows:
41
+
42
+ Configurator.load_xml_file('/path/to/file.xml')
43
+
44
+ The Log4r XML configuration system is very flexible and powerful. In fact,
45
+ it is somewhat preferable to configuring Log4r in Ruby. In order to take
46
+ full advantage of this feature, there are several concepts one must know.
47
+ They are covered in the following three sections.
48
+
49
+ === Concept: XML Directives
50
+
51
+ The expressive power of Ruby has enabled a feature I call
52
+ <i>XML directives</i>. An XML directive is a name-value pair belonging to
53
+ some element. It
54
+ may be represented as an attribute (name="value") of the element, or
55
+ as a child (<name>value</name>) of the element. Therefore, you are
56
+ free to specify information about an object as either an attribute
57
+ or an element. An example should clarify:
58
+
59
+ <object data="value"/>
60
+
61
+ Is equivalent to:
62
+
63
+ <object>
64
+ <data>value</data>
65
+ </object>
66
+
67
+ You can assume this behavior except where noted elsewhere in the API.
68
+
69
+ === Concept: XML Parameters
70
+
71
+ A scheme which I call <i>XML parameters</i> enables one to utilize the XML
72
+ configuratin system for custom Outputters and Formatters.
73
+ This requires <b>no</b> extra work on your part, so long as your objects
74
+ are set up using hash arguments and can decode string values. That is, once
75
+ you've written a custom Outputter, it is automatically configurable in XML
76
+ without having to write any extra code.
77
+
78
+ An XML parameter is analogous to a hash argument to some object's <tt>new</tt>
79
+ method. Consider these hash arguments to FileOutputter:
80
+
81
+ :filename => '/path/to/logs/my.log'
82
+ :trunc => 'true'
83
+
84
+ We can specify them in XML like this:
85
+
86
+ <outputter type="FileOutputter" trunc="true">
87
+ <filename>/path/to/logs/my.log</filename>
88
+ ...
89
+
90
+ The name of the element/attribute is just the name of the parameter. Note that
91
+ the input will be a string, thus it's wise to convert the data in from
92
+ strings in any custom classes (to_i for integers, etc). Now let's suppose you
93
+ have defined a custom Outputter named MyOutputter with the following
94
+ additional hash args:
95
+
96
+ :myarg1 => 'foo'
97
+ :myarg2 => 123
98
+
99
+ Automagically, you can configure your Outputter like so:
100
+
101
+ <outputter type="MyOutputter" myarg2="123">
102
+ <myarg1>foo</myarg1>
103
+ ...
104
+
105
+ Isn't that nice? <tt>:-)</tt>
106
+
107
+ === Concept: Variable Substitution
108
+
109
+ To kill the need for preprocessors, Configurator provides a means of variable
110
+ substitution for XML parameters at runtime. If you specify
111
+ <tt>#{foo}</tt> in an XML parameter value, Configurator will replace it with
112
+ the value of 'foo' in its parameter hashtable. The primary idea is that you
113
+ can figure stuff out in your program,
114
+ say the log path, and relay that information to the XML while it's being
115
+ loaded. Secondarily, it is a way to have aliases within an XML document.
116
+
117
+ There are two ways to tell Configurator about these variables. The first
118
+ method we'll cover is done within a Ruby program with Configurator[].
119
+
120
+ Configurator['logpath'] = '/path/to/logs'
121
+
122
+ Thereafter, any occurence of <tt>#{logpath}</tt> in each and every XML
123
+ parameter will be substituted with '/path/to/logs'. For example:
124
+
125
+ <filename>#{logpath}/mylog.log</filename>
126
+
127
+ Becomes,
128
+
129
+ <filename>/path/to/logs/mylog.log</filename>
130
+
131
+ Aside from Configurator[], another way to define XML parameter variables
132
+ is to define <tt>parameters</tt> under the <tt><pre_config></tt> element
133
+ of an XML configuration:
134
+
135
+ <pre_config>
136
+ <parameter name="logpath" value="/path/to/logs'/>
137
+ <parameter name="other" value="somethingelse'/>
138
+ ...
139
+ </pre_config>
140
+
141
+ Alternatively,
142
+
143
+ <pre_config>
144
+ <parameters>
145
+ <logpath>/path/to/logs</logpath>
146
+ <other>somethingelse</other>
147
+ ...
148
+ </parameters>
149
+ ...
150
+
151
+ The end result is the same as using Configurator[]. However, this method
152
+ is not dynamic. Configurator[] should be used when you want to set variables
153
+ from within Ruby.
154
+
155
+ = XML Grammar
156
+
157
+ And now, here's the XML grammar we use to configure Log4r.
158
+
159
+ == Root Element
160
+
161
+ The root element is <tt><log4r_config></tt>. It can be embedded as a node of
162
+ any other element in an XML file. For instance:
163
+
164
+ <my-xml-thing>
165
+ <customize-libraries>
166
+ <log4r_config>
167
+ <!-- log4r configuratin goes here -->
168
+ </log4r_config>
169
+ ...
170
+
171
+ == Pre-config element
172
+
173
+ The pre_config element is a child of log4r_config and contains:
174
+
175
+ * 'custom_levels' element
176
+ * 'global' element
177
+ * 'parameters' element
178
+ * any number of 'parameter' elements
179
+
180
+ === Pre_config: Custom Levels
181
+
182
+ The custom_levels element is not an <i>XML directive</i> of pre_config. It
183
+ <b>must</b> be specified like this:
184
+
185
+ <custom_levels>Foo, Bar, Baz</custom_levels>
186
+
187
+ And <b>not</b> like this:
188
+
189
+ <!-- NOT SUPPORTED -->
190
+ <custom_levels levels="Foo, Bar, Baz"/>
191
+
192
+ === Pre_config: Global Level
193
+
194
+ <global level="DEBUG"/>
195
+
196
+ or
197
+
198
+ <global><level>DEBUG</level></global>
199
+
200
+ Here, level is an XML directive of global.
201
+
202
+ === Pre_config: Parameters
203
+
204
+ Parameters are variables that will be substituted later on. Please
205
+ see the <b>Concept: Variable Substitution</b> section above. Parameters
206
+ are <i>XML Directives</i>, which means they can be expressed using elements
207
+ or attributes. Here is an example:
208
+
209
+ <parameter name="param name 1" value="param value 1">
210
+ <parameter name="param name 2" value="param value 2">
211
+ ...
212
+ <parameters>
213
+ <param3>value3</param3>
214
+ <param4>value3</param4>
215
+ ...
216
+
217
+ === Pre_config: Complete Example
218
+
219
+ <log4r_config>
220
+
221
+ <pre_config>
222
+ <custom_levels>
223
+ Foo,Bar, Baz
224
+ </custom_levels>
225
+ <global level="Bar"/>
226
+ <parameters>
227
+ <logpath>/var/log/foo</logpath>
228
+ <mypattern>%l [%d] %m</mypattern>
229
+ </parameters>
230
+ </pre_config>
231
+
232
+ <!-- define some outputters and loggers -->
233
+
234
+ </log4r_config>
235
+
236
+ == Configuring Log4r Objects
237
+
238
+ The XML configuration grammar for Loggers, Outputters and the like are
239
+ covered in the usage guidelines for those classes.
240
+
241
+ == Order Doesn't Matter
242
+
243
+ You can (it is hoped) define any of the XML objects in any order desired.
@@ -0,0 +1,103 @@
1
+ = EmailOutputter
2
+
3
+ This is an experimental class that sends a number of formatted log events as
4
+ an RFC 822 email. It should work fine if Net:SMTP doesn't cause any
5
+ problems. Just in case, create a logger named 'log4r' and give it an
6
+ outputter to see the logging statements made by this class. If it fails to
7
+ send email, it will set itself to OFF and stop logging.
8
+
9
+ In order to use it,
10
+
11
+ require 'log4r/outputter/emailoutputter'
12
+
13
+ == SMTP Configuration
14
+
15
+ All arguments to Net::SMTP.start are supported. Pass them as hash
16
+ parameters to +new+. The to field is specified as a comma-delimited
17
+ list of emails (padded with \s* if desired).
18
+
19
+ An example:
20
+
21
+ email_out = EmailOutputter.new 'email_out',
22
+ :server=>'localhost',
23
+ :port=>25,
24
+ :domain=>'somewhere.com',
25
+ :from=>'me@foo.bar',
26
+ :to=>'them@foo.bar, me@foo.bar, bozo@clown.net',
27
+ :subject=>'Log Report'
28
+
29
+ == LogEvent Buffer
30
+
31
+ EmailOutputter stores log messages in a buffer. When the buffer reaches a
32
+ certain number, the <tt>buffsize</tt>, it will send an email containing the
33
+ contents of the buffer. The default +buffsize+ is 100. To set +buffsize+,
34
+
35
+ email_out.buffsize = 1000 # set the buffsize to 1000
36
+
37
+ == Flush To Send Email
38
+
39
+ Flushing an EmailOutputter will mail out all the remaining LogEvents.
40
+ This is convenient for systems that encapsulate the shutdown process. It's a
41
+ good idea to do this for all outputters,
42
+
43
+ Outputter.each_outputter {|o| o.flush}
44
+
45
+ Alternatively, one can invoke flush on the outputter directly,
46
+
47
+ email_out.flush
48
+
49
+ It's also a good idea to notify the recepient of the email that
50
+ the system is shutting down. Before flushing, log a message
51
+ to the owner of this outputter,
52
+
53
+ log_with_email_out.info "The system is shutting down at #{Time.now}"
54
+
55
+ == Format When?
56
+
57
+ LogEvents may either be formatted as they come in or as the
58
+ email is being composed. To do the former, specify a value of +true+
59
+ to the hash parameter +formatfirst+. The default is to format
60
+ during email composition.
61
+
62
+ email_out.formatfirst = true # format as soon as LogEvents are received
63
+
64
+ == Immediate Notification
65
+
66
+ EmailOutputter can be configured to flush and send the email whenever the
67
+ logger sees a certain log priority. Use the +immediate_at+ hash parameter
68
+ and specify the levels as a comma-delimited list (like an XML element).
69
+ To trigger an email on FATAL and ERROR,
70
+
71
+ email_out.immediate_at = "FATAL, ERROR"
72
+
73
+ == Example
74
+
75
+ A security logger sends email to several folks, buffering up to 25
76
+ log events and sending immediates on CRIT and WARN
77
+
78
+ EmailOutputter.new 'security',
79
+ :to => 'bob@secure.net, frank@secure.net',
80
+ :buffsize => 25,
81
+ :immediate_at => 'WARN, CRIT'
82
+
83
+ == XML Configuration
84
+
85
+ See log4r/configurator.rb for details. Here's an example:
86
+
87
+ <outputter name="security" type="EmailOutputter"
88
+ buffsize="25" level="ALL">
89
+ <immediate_at>WARN, CRIT</immediate_at>
90
+ <server>localhost</server>
91
+ <from>me@secure.net</from>
92
+ <to>
93
+ bob@secure.net, frank@secure.net
94
+ </to>
95
+ ...
96
+ </outputter>
97
+
98
+ == To Do
99
+
100
+ This class could use some sophistication, in particular a means to compress
101
+ the logs, a way to set the subject dynamically (probably via a block method),
102
+ and a time trigger. When the time trigger is introduced, a +buffsize+
103
+ of 0 should mean ignore +buffsize+ to determine when to send the email.
@@ -0,0 +1,39 @@
1
+ = Formatters
2
+
3
+ Formatters are responsible for formatting LogEvent data.
4
+ An Outputter owning a Formatter will invoke the
5
+ Log4r::Formatter#format method prior to writing.
6
+
7
+ == Available Formatters
8
+
9
+ * Log4r::BasicFormatter - default
10
+ * Log4r::PatternFormatter - most flexible. See log4r/formatter/patternformatter.rb
11
+ * Log4r::SimpleFormatter - like BasicFormatter for Strings only (low noise)
12
+ * Log4r::ObjectFormatter - for inspecting objects
13
+ * Log4r::NullFormatter - twirls on its feet and does nothing
14
+
15
+ = XML Configuration
16
+
17
+ Specify the Formatter and its class (as +type+) under an
18
+ <tt><outputter></tt> directive:
19
+
20
+ <outputter name="someout" type="sometype">
21
+ <formatter type="Log4r::BasicFormatter"/>
22
+ </outputter>
23
+
24
+ As explained in log4r/configurator.rb, the hash arguments you would normally
25
+ pass to +new+ are specified as <i>XML parameters</i>. Only PatternFormatter
26
+ has any of these.
27
+
28
+ = Custom Formatting
29
+
30
+ Building a custom Formatter is extremely easy. Just define a class
31
+ that extends Formatter and override the Formatter#format method.
32
+ Then give it to any interested Outputters.
33
+
34
+ If you're interested in setting up your custom formatters in XML,
35
+ please take a look at log4r/configurator.rb.
36
+
37
+ == Data Available
38
+
39
+ See Log4r::LogEvent
@@ -0,0 +1,89 @@
1
+ = #{version} Log4r API Reference
2
+
3
+ Welcome to the Log4r API reference. There are two classes of reference,
4
+ the file overview and the class API. They are listed under Files and Classes
5
+ respectively. File overviews cover the use of the Log4r API and some
6
+ implementation details, whereas class APIs detail the methods available to
7
+ the various objects.
8
+
9
+ The code examples in this API assume:
10
+
11
+ include Log4r
12
+
13
+ This file overview covers some of the major concepts in Log4r.
14
+
15
+
16
+ == Log Levels
17
+
18
+ Log4r provides as many levels of logging as desired. Logging levels
19
+ are an ordered set of names ranked by priority. The more important a level is,
20
+ the higher its priority and the more likely we want to see any data associated
21
+ with it. Log4r provides many ways to filter information by level.
22
+
23
+ Loggers and Outputters have a level parameter which serves as a level
24
+ threshold. Any data below this threshold will be ignored by the Logger or
25
+ Outputter. Additionally, Outputters can be set to mask out any particular
26
+ level or collection of levels.
27
+
28
+ By combining level thresholds with other Log4r features, one can direct any
29
+ set of data to any destination desired in a way that is easy to visualize
30
+ and configure.
31
+
32
+ === Default Levels
33
+
34
+ The default log levels and their priority rankings are:
35
+
36
+ DEBUG < INFO < WARN < ERROR < FATAL
37
+
38
+ === Custom Levels
39
+
40
+ You can have as many levels as you desire, with any naming scheme. Log4r
41
+ will automatically define level constants and log method names after
42
+ your custom specification.
43
+
44
+ Please see log4r/configurator.rb for details.
45
+
46
+ === Boundary Levels
47
+
48
+ There are two special levels, <tt>ALL</tt> and <tt>OFF</tt> which
49
+ denote whether we are logging at all levels or at none. The priority
50
+ ranks with respect to the logging levels are as follows:
51
+
52
+ ALL < logging levels as defined by user < OFF
53
+
54
+ Thus, setting the level to <tt>ALL</tt> will enable logging at all levels
55
+ whereas <tt>OFF</tt> will turn off logging completely.
56
+
57
+ == File Overviews
58
+
59
+ For Loggers:: log4r/logger.rb
60
+ For Outputters:: log4r/outputter/outputter.rb
61
+ For Formatters:: log4r/formatter/formatter.rb
62
+ For configuration:: log4r/configurator.rb
63
+
64
+ == Principal Classes of Log4r
65
+
66
+ * Log4r::Logger - Interface to logging
67
+ * Log4r::Outputter - An output destination for a logger.
68
+ * Log4r::Formatter - A means of formatting log data.
69
+ * Log4r::Configurator - A means of configuring Log4r
70
+
71
+ == Convenience Classes
72
+
73
+ Log4r provides several convenience Outputters and Formatters. Please
74
+ look at the file overviews of those classes for more details.
75
+
76
+ == Remote Logging
77
+
78
+ Log4r provides a way to send log events over a network. See log4r/logserver.rb
79
+ for details.
80
+
81
+ == What's Going on Inside?
82
+
83
+ Log4r has an internal logger which records much of what goes on inside. To see
84
+ the output, define a Logger named 'log4r' and give it an Outputter of some
85
+ sort. It logs only at the lowest and highest priorities. That would be
86
+ DEBUG and FATAL for the standard setup.
87
+
88
+ It is essential to view this data when using certain classes, like
89
+ Log4r::LogServer and Log4r::EmailOutputter.