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.
- data/doc/content/contact.html +22 -0
- data/doc/content/contribute.html +21 -0
- data/doc/content/index.html +90 -0
- data/doc/content/license.html +56 -0
- data/doc/content/manual.html +449 -0
- data/doc/dev/README.developers +40 -0
- data/doc/dev/checklist +14 -0
- data/doc/dev/things-to-do +2 -0
- data/doc/images/crush/logo2.png +0 -0
- data/doc/images/log4r-logo.png +0 -0
- data/doc/images/logo2.png +0 -0
- data/doc/log4r.css +111 -0
- data/doc/old/manual.html +348 -0
- data/doc/templates/main.html +147 -0
- data/examples/README +19 -0
- data/examples/customlevels.rb +34 -0
- data/examples/fileroll.rb +40 -0
- data/examples/log4r_yaml.yaml +0 -0
- data/examples/logclient.rb +25 -0
- data/examples/logserver.rb +18 -0
- data/examples/moderate.xml +29 -0
- data/examples/moderateconfig.rb +66 -0
- data/examples/myformatter.rb +23 -0
- data/examples/outofthebox.rb +21 -0
- data/examples/rrconfig.xml +63 -0
- data/examples/rrsetup.rb +42 -0
- data/examples/simpleconfig.rb +39 -0
- data/examples/xmlconfig.rb +25 -0
- data/examples/yaml.rb +30 -0
- data/src/log4r.rb +17 -0
- data/src/log4r/base.rb +74 -0
- data/src/log4r/config.rb +9 -0
- data/src/log4r/configurator.rb +224 -0
- data/src/log4r/formatter/formatter.rb +105 -0
- data/src/log4r/formatter/patternformatter.rb +108 -0
- data/src/log4r/lib/drbloader.rb +52 -0
- data/src/log4r/lib/xmlloader.rb +24 -0
- data/src/log4r/logevent.rb +28 -0
- data/src/log4r/logger.rb +194 -0
- data/src/log4r/loggerfactory.rb +89 -0
- data/src/log4r/logserver.rb +28 -0
- data/src/log4r/outputter/consoleoutputters.rb +18 -0
- data/src/log4r/outputter/datefileoutputter.rb +110 -0
- data/src/log4r/outputter/emailoutputter.rb +115 -0
- data/src/log4r/outputter/fileoutputter.rb +49 -0
- data/src/log4r/outputter/iooutputter.rb +55 -0
- data/src/log4r/outputter/outputter.rb +132 -0
- data/src/log4r/outputter/outputterfactory.rb +59 -0
- data/src/log4r/outputter/remoteoutputter.rb +40 -0
- data/src/log4r/outputter/rollingfileoutputter.rb +126 -0
- data/src/log4r/outputter/staticoutputter.rb +30 -0
- data/src/log4r/outputter/syslogoutputter.rb +75 -0
- data/src/log4r/rdoc/configurator +243 -0
- data/src/log4r/rdoc/emailoutputter +103 -0
- data/src/log4r/rdoc/formatter +39 -0
- data/src/log4r/rdoc/log4r +89 -0
- data/src/log4r/rdoc/logger +175 -0
- data/src/log4r/rdoc/logserver +85 -0
- data/src/log4r/rdoc/outputter +108 -0
- data/src/log4r/rdoc/patternformatter +128 -0
- data/src/log4r/rdoc/syslogoutputter +29 -0
- data/src/log4r/rdoc/yamlconfigurator +20 -0
- data/src/log4r/repository.rb +65 -0
- data/src/log4r/staticlogger.rb +49 -0
- data/src/log4r/yamlconfigurator.rb +0 -0
- data/tests/include.rb +7 -0
- data/tests/runtest.rb +6 -0
- data/tests/testbase.rb +45 -0
- data/tests/testcustom.rb +33 -0
- data/tests/testdefault.rb +25 -0
- data/tests/testformatter.rb +29 -0
- data/tests/testlogger.rb +198 -0
- data/tests/testoutputter.rb +112 -0
- data/tests/testpatternformatter.rb +26 -0
- data/tests/testxmlconf.rb +51 -0
- data/tests/xml/testconf.xml +37 -0
- metadata +140 -0
@@ -0,0 +1,147 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<!-- TITLE -->
|
4
|
+
<link rel="stylesheet" type="text/css" href="log4r.css">
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
|
8
|
+
<div align="right"><img src="images/log4r-logo.png"/></div>
|
9
|
+
<hr noshade>
|
10
|
+
|
11
|
+
<table border="0" cellspacing="3" cellpadding="0" width="100%">
|
12
|
+
<tr>
|
13
|
+
|
14
|
+
<!-- Sidebar -->
|
15
|
+
<td width="15%" valign="top">
|
16
|
+
<table cellspacing="0" cellpadding="0" width=100%" nowrap="true">
|
17
|
+
|
18
|
+
<!-- Log4r Box -->
|
19
|
+
<tr><td >
|
20
|
+
<table width="100%" cellspacing="0" cellpadding="0" align="center" >
|
21
|
+
<tr><td width="100%" class="menutitle">Log4r</td></tr>
|
22
|
+
<tr><td width="100%" class="menubuff"> </td></tr>
|
23
|
+
<!-- list -->
|
24
|
+
<table class="menu" cellspacing="3" cellpadding="0" width="100%"
|
25
|
+
align="center">
|
26
|
+
<tr><td ><a href="index.html">Home Page</a></tr></td>
|
27
|
+
<tr><td><a href="http://sourceforge.net/project/showfiles.php?group_id=43396">
|
28
|
+
Download</a></td></tr>
|
29
|
+
<tr><td nowrap="true">
|
30
|
+
<a href="http://sourceforge.net/projects/log4r/">@ SourceForge</a>
|
31
|
+
</td></tr>
|
32
|
+
<tr><td>
|
33
|
+
<a href="license.html">License</a>
|
34
|
+
</td></tr>
|
35
|
+
<tr><td>
|
36
|
+
<a href="contact.html">Contact</a>
|
37
|
+
</td></tr>
|
38
|
+
</table>
|
39
|
+
</td></tr>
|
40
|
+
|
41
|
+
<tr><td height=15> </td></tr>
|
42
|
+
|
43
|
+
<!-- Doc Box -->
|
44
|
+
<tr><td >
|
45
|
+
<table cellspacing="0" cellpadding="0" align="center" width="100%">
|
46
|
+
<tr><td width="100%" class="menutitle">Documents</td></tr>
|
47
|
+
<tr><td width="100%" class="menubuff"> </td></tr>
|
48
|
+
<!-- list -->
|
49
|
+
<table class="menu" cellspacing="3" cellpadding="0" width="100%"
|
50
|
+
align="center">
|
51
|
+
<tr><td>
|
52
|
+
<a href="manual.html">#{version} Manual</a>
|
53
|
+
</tr></tr>
|
54
|
+
<tr><td>
|
55
|
+
<a href="rdoc/index.html">#{version} RDoc API</a>
|
56
|
+
</td></tr>
|
57
|
+
|
58
|
+
</table>
|
59
|
+
</td></tr>
|
60
|
+
|
61
|
+
<tr><td height=15> </td></tr>
|
62
|
+
|
63
|
+
<!-- Development Box -->
|
64
|
+
<tr><td >
|
65
|
+
<table cellspacing="0" cellpadding="0" align="center" width="100%">
|
66
|
+
<tr><td width="100%" class="menutitle">Development</td></tr>
|
67
|
+
<tr><td width="100%" class="menubuff"> </td></tr>
|
68
|
+
<!-- list -->
|
69
|
+
<table class="menu" cellspacing="3" cellpadding="0" width="100%"
|
70
|
+
align="center">
|
71
|
+
<tr><td>
|
72
|
+
<a
|
73
|
+
href="http://sourceforge.net/tracker/?atid=436181&group_id=43396&func=browse">
|
74
|
+
Bugs</a>
|
75
|
+
</tr></tr>
|
76
|
+
<tr><td>
|
77
|
+
<a
|
78
|
+
href="http://sourceforge.net/tracker/?atid=436184&group_id=43396&func=browse">
|
79
|
+
Requests</a>
|
80
|
+
</td></tr>
|
81
|
+
<tr><td>
|
82
|
+
<a href="contribute.html">Contribute</a>
|
83
|
+
</td></tr>
|
84
|
+
|
85
|
+
</table>
|
86
|
+
</td></tr>
|
87
|
+
|
88
|
+
<tr><td height=15> </td></tr>
|
89
|
+
|
90
|
+
|
91
|
+
<!-- Link Box -->
|
92
|
+
<tr><td >
|
93
|
+
<table cellspacing="0" cellpadding="0" align="center" width="100%">
|
94
|
+
<tr><td width="100%" class="menutitle">Links</td></tr>
|
95
|
+
<tr><td width="100%" class="menubuff"> </td></tr>
|
96
|
+
<!-- list -->
|
97
|
+
<table class="menu" cellspacing="3" cellpadding="0" width="100%"
|
98
|
+
align="center">
|
99
|
+
<tr><td>
|
100
|
+
<a href="http://www.ruby-lang.org/en/index.html">Ruby</a>
|
101
|
+
</td></tr>
|
102
|
+
<tr><td>
|
103
|
+
<a href="http://jakarta.apache.org/log4j/docs/index.html">Apache Log4j</a>
|
104
|
+
</tr></tr>
|
105
|
+
<tr><td>
|
106
|
+
<a href="http://www.ruby-lang.org/en/raa-list.rhtml?name=REXML">REXML</a>
|
107
|
+
</td></tr>
|
108
|
+
<tr><td>
|
109
|
+
<a href="http://rm-f.net/~cout/ruby/romp/">ROMP</a>
|
110
|
+
</td></tr>
|
111
|
+
<tr><td height="5"> </td></tr>
|
112
|
+
<tr><td align="center">
|
113
|
+
<a href="http://sourceforge.net">
|
114
|
+
<img
|
115
|
+
src="http://sourceforge.net/sflogo.php?group_id=43396" width="88" height="31"
|
116
|
+
border="0" alt="SourceForge Logo"></a>
|
117
|
+
</td></tr>
|
118
|
+
|
119
|
+
</table>
|
120
|
+
</td></tr>
|
121
|
+
|
122
|
+
</table>
|
123
|
+
</td>
|
124
|
+
|
125
|
+
<!-- Main column -->
|
126
|
+
<td width="85%" align="left" valign="top">
|
127
|
+
<center>
|
128
|
+
<table cellspacing="0" cellpadding="0" align="center" width="95%">
|
129
|
+
|
130
|
+
<!-- CONTENT -->
|
131
|
+
|
132
|
+
</table>
|
133
|
+
</center>
|
134
|
+
</td>
|
135
|
+
|
136
|
+
|
137
|
+
</tr>
|
138
|
+
</table>
|
139
|
+
<hr noshade>
|
140
|
+
<div align="right">
|
141
|
+
<font color="#888888" size="-1">
|
142
|
+
<i>
|
143
|
+
<!-- CVSID -->
|
144
|
+
</i></font>
|
145
|
+
</div>
|
146
|
+
</body>
|
147
|
+
</html>
|
data/examples/README
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
The examples are:
|
2
|
+
|
3
|
+
1. outofthebox.rb - How to get started with minimal setup
|
4
|
+
2. simpleconfig.rb - Using Log4r casually
|
5
|
+
3. moderateconfig.rb - A more sophisticated config
|
6
|
+
4. xmlconfig.rb and moderate.xml - XML configuration example based on #3
|
7
|
+
5. rrsetup.rb and rrconfig.xml - A real example (or used to be ;-)
|
8
|
+
6. logserver.rb and logclient.rb - Remote logging example
|
9
|
+
7. fileroll.rb - Using RollingFileOutputter
|
10
|
+
8. yaml.rb and log4r_yaml.yaml - YAML configuration example
|
11
|
+
|
12
|
+
The output will go to screen and to files in the directory logs/.
|
13
|
+
|
14
|
+
Note to RubyGems users: The syntax to require log4r as a gem is as follows:
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require_gem 'log4r'
|
18
|
+
|
19
|
+
Obviously, the examples will need to be modified to follow this.
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Suppose we don't like having 5 levels named DEBUG, INFO, etc.
|
2
|
+
# Suppose we'd rather use 3 levels named Foo, Bar, and Baz.
|
3
|
+
# Log4r allows you to rename the levels and their corresponding methods
|
4
|
+
# in a painless way. This file provides and example
|
5
|
+
|
6
|
+
$: << '../src'
|
7
|
+
|
8
|
+
require 'log4r'
|
9
|
+
require 'log4r/configurator'
|
10
|
+
include Log4r
|
11
|
+
|
12
|
+
# This is how we specify our levels
|
13
|
+
Configurator.custom_levels "Foo", "Bar", "Baz"
|
14
|
+
|
15
|
+
l = Logger.new('custom levels')
|
16
|
+
l.add StdoutOutputter.new('console')
|
17
|
+
|
18
|
+
l.level = Foo
|
19
|
+
puts l.foo?
|
20
|
+
l.foo "This is foo"
|
21
|
+
puts l.bar?
|
22
|
+
l.bar "this is bar"
|
23
|
+
puts l.baz?
|
24
|
+
l.baz "this is baz"
|
25
|
+
|
26
|
+
puts "Now change to Baz"
|
27
|
+
|
28
|
+
l.level = Baz
|
29
|
+
puts l.foo?
|
30
|
+
l.foo {"This is foo"}
|
31
|
+
puts l.bar?
|
32
|
+
l.bar {"this is bar"}
|
33
|
+
puts l.baz?
|
34
|
+
l.baz {"this is baz"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# How to use RollingFileOutputter
|
2
|
+
|
3
|
+
$: << "../src"
|
4
|
+
require 'log4r'
|
5
|
+
include Log4r
|
6
|
+
|
7
|
+
puts "this will take a while"
|
8
|
+
|
9
|
+
# example of log file being split by time constraint 'maxtime'
|
10
|
+
config = {
|
11
|
+
"filename" => "logs/TestTime.log",
|
12
|
+
"maxtime" => 10,
|
13
|
+
"trunc" => true
|
14
|
+
}
|
15
|
+
timeLog = Logger.new 'WbExplorer'
|
16
|
+
timeLog.outputters = RollingFileOutputter.new("WbExplorer", config)
|
17
|
+
timeLog.level = DEBUG
|
18
|
+
|
19
|
+
# log something once a second for 100 seconds
|
20
|
+
100.times { |t|
|
21
|
+
timeLog.info "blah #{t}"
|
22
|
+
sleep(1.0)
|
23
|
+
}
|
24
|
+
|
25
|
+
# example of log file being split by space constraint 'maxsize'
|
26
|
+
config = {
|
27
|
+
"filename" => "logs/TestSize.log",
|
28
|
+
"maxsize" => 16000,
|
29
|
+
"trunc" => true
|
30
|
+
}
|
31
|
+
sizeLog = Logger.new 'WbExplorer'
|
32
|
+
sizeLog.outputters = RollingFileOutputter.new("WbExplorer", config)
|
33
|
+
sizeLog.level = DEBUG
|
34
|
+
|
35
|
+
# log a large number of times
|
36
|
+
100000.times { |t|
|
37
|
+
sizeLog.info "blah #{t}"
|
38
|
+
}
|
39
|
+
|
40
|
+
puts "done! check the two sets of log files in logs/ (TestTime and TestSize)"
|
Binary file
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# How to use RemoteOutputter. See logserver.rb first.
|
2
|
+
|
3
|
+
$: << File.join('..','src')
|
4
|
+
require 'log4r'
|
5
|
+
require 'log4r/outputter/remoteoutputter'
|
6
|
+
include Log4r
|
7
|
+
|
8
|
+
Logger.new('log4r').add 'stdout' # to see what's going on inside
|
9
|
+
RemoteOutputter.new 'remote', # make a RemoteOutputter
|
10
|
+
:uri=>'tcpromp://localhost:9999', # where our LogServer is
|
11
|
+
:buffsize=>10 # buffer 10 before sending to LogServer
|
12
|
+
Logger.new('client').add('remote') # give 'remote' to a 'client' Logger
|
13
|
+
|
14
|
+
# we're done with setup, now let's log
|
15
|
+
def log(l)
|
16
|
+
l.debug "debugging"
|
17
|
+
l.info "a piece of info"
|
18
|
+
l.warn "Danger, Will Robinson, danger!"
|
19
|
+
l.error "I dropped by Wookie! :("
|
20
|
+
l.fatal "kaboom!"
|
21
|
+
end
|
22
|
+
|
23
|
+
5.times { log(Logger['client']) } # do a bunch of logging
|
24
|
+
Logger['client'].info "Bye Bye from client!"
|
25
|
+
Outputter['remote'].flush # flush the RemoteOutputter
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# How to use LogServer
|
2
|
+
|
3
|
+
$: << File.join('..','src')
|
4
|
+
require 'log4r'
|
5
|
+
require 'log4r/configurator'
|
6
|
+
|
7
|
+
# XML configuration is simple enough to embed here
|
8
|
+
xml = %(
|
9
|
+
<log4r_config>
|
10
|
+
<logserver name="server" uri="tcpromp://localhost:9999">
|
11
|
+
<outputter>stdout</outputter>
|
12
|
+
</logserver>
|
13
|
+
</log4r_config>
|
14
|
+
)
|
15
|
+
Log4r::Logger.new('log4r').add 'stdout' # to see what's going on inside
|
16
|
+
Log4r::Configurator.load_xml_string xml # load it up
|
17
|
+
sleep
|
18
|
+
# now run logclient.rb on another terminal
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!-- the config file used by xmlconfig.rb -->
|
2
|
+
<log4r_config>
|
3
|
+
<pre_config>
|
4
|
+
<global level="DEBUG"/>
|
5
|
+
<!-- we'll set serverlog in XML and logpath at runtime for illustration -->
|
6
|
+
<parameter name="serverlog" value="./logs/server.log"/>
|
7
|
+
</pre_config>
|
8
|
+
|
9
|
+
<!-- outputters, illustrating XML config flexibility -->
|
10
|
+
<outputter type="FileOutputter" name="server">
|
11
|
+
<filename>#{serverlog}</filename>
|
12
|
+
<trunc>false</trunc>
|
13
|
+
</outputter>
|
14
|
+
<outputter type="FileOutputter" name="client"
|
15
|
+
filename="#{logpath}/client.log"/>
|
16
|
+
<outputter type="FileOutputter" name="gui"
|
17
|
+
filename="#{logpath}/guidebug.log"/>
|
18
|
+
<outputter type="StderrOutputter" name="console" level="ERROR"/>
|
19
|
+
|
20
|
+
<!-- loggers -->
|
21
|
+
|
22
|
+
<logger name="server" level="ERROR" outputters="server, console"/>
|
23
|
+
<logger name="client" level="INFO" outputters="client, console"/>
|
24
|
+
<logger name="client::gui" trace="true">
|
25
|
+
<level>DEBUG</level>
|
26
|
+
<outputter>gui</outputter>
|
27
|
+
</logger>
|
28
|
+
|
29
|
+
</log4r_config>
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Now, for something more complicted
|
2
|
+
# Let's pretend this is the global config file for our app
|
3
|
+
|
4
|
+
$: << File.join('..','src')
|
5
|
+
require "log4r"
|
6
|
+
|
7
|
+
include Log4r # include Log4r to make things simple
|
8
|
+
|
9
|
+
Logger.root.level = DEBUG # global level DEBUG
|
10
|
+
|
11
|
+
# suppose we want to have loggers for a Server and a Client class
|
12
|
+
# furthermore, we want the client gui to have its own logger. (You'll want
|
13
|
+
# one logger per class or so.)
|
14
|
+
# When the loggers are created, they are stored in a repository for further
|
15
|
+
# retreival at any point using a hash method call: Logger['name']
|
16
|
+
|
17
|
+
# server is stable, so only log ERROR and FATAL
|
18
|
+
Logger.new("server", ERROR)
|
19
|
+
# let's say we don't need the DEBUG junk for client logs
|
20
|
+
Logger.new("client", INFO)
|
21
|
+
# but we're still debugging the gui
|
22
|
+
debugger = Logger.new("client::gui", DEBUG)
|
23
|
+
debugger.trace = true # we want to see where the log method was called
|
24
|
+
|
25
|
+
# Guilog is a child of client. In this case, any log events to the gui
|
26
|
+
# logger will also be logged to the client outputters. We can change
|
27
|
+
# that behavior by setting guilogger's 'additive' to false, but not yet.
|
28
|
+
|
29
|
+
# let's create the outputters
|
30
|
+
FileOutputter.new('server', :filename=>'logs/server.log', :trunc => false)
|
31
|
+
FileOutputter.new('client', :filename=>'logs/client.log')
|
32
|
+
FileOutputter.new('gui', :filename=>'logs/guidebug.log')
|
33
|
+
# additionally, we want ERROR and FATAL messages to go to stderr
|
34
|
+
StderrOutputter.new('console', :level=>ERROR)
|
35
|
+
|
36
|
+
# add the outputters
|
37
|
+
Logger['server'].add 'server', 'console'
|
38
|
+
Logger['client'].add 'client', 'console'
|
39
|
+
Logger['client::gui'].add 'gui' # gui will also write to client's outputters
|
40
|
+
|
41
|
+
# That's it for config. Now let's use the loggers:
|
42
|
+
|
43
|
+
def do_logging(log)
|
44
|
+
log.debug "debugging"
|
45
|
+
log.info "a piece of info"
|
46
|
+
log.warn "Danger, Will Robinson, danger!"
|
47
|
+
log.error "I dropped my Wookie! :("
|
48
|
+
log.fatal "kaboom!"
|
49
|
+
end
|
50
|
+
|
51
|
+
Logger.each_logger{|logger| do_logging(logger) }
|
52
|
+
|
53
|
+
# You can dynamically change levels and turn off tracing:
|
54
|
+
Logger['client'].level = OFF
|
55
|
+
Logger['client::gui'].trace = false
|
56
|
+
|
57
|
+
puts 'Only server should show Dynamic Change onscreen:'
|
58
|
+
Logger.each_logger{|logger| logger.fatal "Dynamic change." }
|
59
|
+
# logs/client.log file should not show "Dynamic change."
|
60
|
+
# logs/guidebug.log should not show the trace at "Dynamic change."
|
61
|
+
|
62
|
+
# we can also set our outputter to log only specified levels:
|
63
|
+
|
64
|
+
Outputter['console'].only_at ERROR
|
65
|
+
puts "Should only see ERROR next:"
|
66
|
+
do_logging Logger['server']
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# try out a custom formatter
|
2
|
+
|
3
|
+
$: << '../src'
|
4
|
+
|
5
|
+
require "log4r"
|
6
|
+
|
7
|
+
class MyFormatter < Log4r::Formatter
|
8
|
+
def format(event)
|
9
|
+
buff = "The level is #{event.level} and has "
|
10
|
+
buff += "name '#{Log4r::LNAMES[event.level]}'\n"
|
11
|
+
buff += "The logger is '#{event.name}' "
|
12
|
+
buff += "and the data type is #{event.data.class}\n"
|
13
|
+
buff += "Let's inspect the data:\n"
|
14
|
+
buff += event.data.inspect + "\n"
|
15
|
+
buff += "We were called at #{event.tracer[0]}\n\n"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
log = Log4r::Logger.new('custom formatter')
|
20
|
+
log.trace = true
|
21
|
+
log.add Log4r::StdoutOutputter.new('stdout', :formatter=>MyFormatter)
|
22
|
+
log.info [1, 2, 3, 4]
|
23
|
+
log.error "A log statement"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Here's how to start using log4r right away
|
2
|
+
$: << File.join('..','src') # path if log4r not installed
|
3
|
+
require "log4r"
|
4
|
+
|
5
|
+
Log = Log4r::Logger.new("outofthebox") # create a logger
|
6
|
+
Log.add Log4r::Outputter.stderr # which logs to stdout
|
7
|
+
|
8
|
+
# do some logging
|
9
|
+
def do_logging
|
10
|
+
Log.debug "debugging"
|
11
|
+
Log.info "a piece of info"
|
12
|
+
Log.warn "Danger, Will Robinson, danger!"
|
13
|
+
Log.error "I dropped my Wookie! :("
|
14
|
+
Log.fatal "kaboom!"
|
15
|
+
end
|
16
|
+
do_logging
|
17
|
+
|
18
|
+
# now let's filter anything below WARN level (DEBUG and INFO)
|
19
|
+
puts "-= Changing level to WARN =-"
|
20
|
+
Log.level = Log4r::WARN
|
21
|
+
do_logging
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<!-- This is a real config file used by a game that I'm working on
|
2
|
+
The Ruby file that loads this is rrsetup.rb -->
|
3
|
+
<log4r_config>
|
4
|
+
<pre_config>
|
5
|
+
<!-- I like having a ton of levels. There are three extra for component
|
6
|
+
data, comp1..3 and one level for object dumps (DATA) -->
|
7
|
+
<custom_levels>
|
8
|
+
COMP3, COMP2, COMP1, DATA, DEBUG, INFO, WARN, ERROR, FATAL
|
9
|
+
</custom_levels>
|
10
|
+
<!-- change to ERROR when the game goes to production -->
|
11
|
+
<global level="ALL"/>
|
12
|
+
</pre_config>
|
13
|
+
|
14
|
+
<!-- Outputters -->
|
15
|
+
|
16
|
+
<!-- game.log records DEBUG and higher, so no game component data -->
|
17
|
+
<outputter name="gameout" type="FileOutputter" level="DEBUG">
|
18
|
+
<!-- I set the logpath from within the game. -->
|
19
|
+
<filename>#{logpath}/game.log</filename>
|
20
|
+
</outputter>
|
21
|
+
<!-- DATA level goes to its own special file. These log events are
|
22
|
+
too noisy for game.log and are not game components. Useful
|
23
|
+
for dumping lots of objects during development. -->
|
24
|
+
<outputter name="gamedata" type="FileOutputter" only_at="DATA">
|
25
|
+
<filename>#{logpath}/data.log</filename>
|
26
|
+
<!-- low-noise custom formatter for objects -->
|
27
|
+
<formatter type="CompFormatter"/>
|
28
|
+
</outputter>
|
29
|
+
<!-- Spit any errors to the console. They merit special attention -->
|
30
|
+
<outputter name="console" type="StderrOutputter" level="ERROR"/>
|
31
|
+
<!-- A separate log file for tracking game components,
|
32
|
+
used for development. It logs ALL-->
|
33
|
+
<outputter name="componentout" type="FileOutputter">
|
34
|
+
<filename>#{logpath}/component.log</filename>
|
35
|
+
<formatter type="CompFormatter"/>
|
36
|
+
</outputter>
|
37
|
+
|
38
|
+
<!-- Loggers -->
|
39
|
+
|
40
|
+
<!-- 'game' is the main logger for the client-server framework -->
|
41
|
+
<logger name="game" level="DATA" additive="false" trace="true">
|
42
|
+
<outputters>gameout, gamedata, console</outputters>
|
43
|
+
</logger>
|
44
|
+
<!-- Notice how we have fine control over how each element logs.
|
45
|
+
The gui and controller are stable while the rest are being debugged. -->
|
46
|
+
<logger name="game::gui" level="ERROR" additive="true" trace="true"/>
|
47
|
+
<logger name="game::boardgui" level="DEBUG" additive="true" trace="false"/>
|
48
|
+
<logger name="game::server" level="DEBUG" additive="true" trace="true"/>
|
49
|
+
<logger name="game::client" level="DEBUG" additive="true" trace="true"/>
|
50
|
+
<logger name="game::controller" level="ERROR" additive="true" trace="false"/>
|
51
|
+
|
52
|
+
<!-- 'component' is the main logger for game objects. It's used in
|
53
|
+
development to track how the objects change with time. -->
|
54
|
+
<logger name="component" level="ALL" additive="false" trace="false">
|
55
|
+
<outputter>componentout</outputter>
|
56
|
+
<outputter>console</outputter>
|
57
|
+
</logger>
|
58
|
+
<logger name="component::board"/>
|
59
|
+
<logger name="component::tile"/>
|
60
|
+
<logger name="component::player"/>
|
61
|
+
<logger name="component::player::robot"/>
|
62
|
+
|
63
|
+
</log4r_config>
|