log4r 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +2 -2
- data/Rakefile +3 -3
- data/TODO +0 -34
- data/examples/filelog.rb +25 -0
- data/examples/logs/TestSize000001.log +576 -0
- data/examples/logs/TestSize000002.log +567 -0
- data/examples/logs/TestSize000003.log +552 -0
- data/examples/logs/TestSize000004.log +552 -0
- data/examples/logs/TestSize000005.log +552 -0
- data/examples/logs/TestSize000006.log +552 -0
- data/examples/logs/TestSize000007.log +552 -0
- data/examples/logs/TestSize000008.log +552 -0
- data/examples/logs/TestSize000009.log +552 -0
- data/examples/logs/TestSize000010.log +552 -0
- data/examples/logs/TestSize000011.log +552 -0
- data/examples/logs/TestSize000012.log +552 -0
- data/examples/logs/TestSize000013.log +552 -0
- data/examples/logs/TestSize000014.log +552 -0
- data/examples/logs/TestSize000015.log +552 -0
- data/examples/logs/TestSize000016.log +552 -0
- data/examples/logs/TestSize000017.log +552 -0
- data/examples/logs/TestSize000018.log +552 -0
- data/examples/logs/TestSize000019.log +535 -0
- data/examples/logs/TestSize000020.log +534 -0
- data/examples/logs/TestSize000021.log +534 -0
- data/examples/logs/TestSize000022.log +534 -0
- data/examples/logs/TestSize000023.log +534 -0
- data/examples/logs/TestSize000024.log +534 -0
- data/examples/logs/TestSize000025.log +534 -0
- data/examples/logs/TestSize000026.log +534 -0
- data/examples/logs/TestSize000027.log +534 -0
- data/examples/logs/TestSize000028.log +534 -0
- data/examples/logs/TestSize000029.log +534 -0
- data/examples/logs/TestSize000030.log +534 -0
- data/examples/logs/TestSize000031.log +534 -0
- data/examples/logs/TestSize000032.log +534 -0
- data/examples/logs/TestSize000033.log +534 -0
- data/examples/logs/TestSize000034.log +534 -0
- data/examples/logs/TestSize000035.log +534 -0
- data/examples/logs/TestSize000036.log +534 -0
- data/examples/logs/TestSize000037.log +534 -0
- data/examples/logs/TestSize000038.log +534 -0
- data/examples/logs/TestSize000039.log +534 -0
- data/examples/logs/TestSize000040.log +534 -0
- data/examples/logs/TestSize000041.log +534 -0
- data/examples/logs/TestSize000042.log +534 -0
- data/examples/logs/TestSize000043.log +534 -0
- data/examples/logs/TestSize000044.log +534 -0
- data/examples/logs/TestSize000045.log +534 -0
- data/examples/logs/TestSize000046.log +534 -0
- data/examples/logs/TestSize000047.log +534 -0
- data/examples/logs/TestSize000048.log +534 -0
- data/examples/logs/TestSize000049.log +534 -0
- data/examples/logs/TestSize000050.log +534 -0
- data/examples/logs/TestSize000051.log +534 -0
- data/examples/logs/TestSize000052.log +534 -0
- data/examples/logs/TestSize000053.log +534 -0
- data/examples/logs/TestSize000054.log +534 -0
- data/examples/logs/TestSize000055.log +534 -0
- data/examples/logs/TestSize000056.log +534 -0
- data/examples/logs/TestSize000057.log +534 -0
- data/examples/logs/TestSize000058.log +534 -0
- data/examples/logs/TestSize000059.log +534 -0
- data/examples/logs/TestSize000060.log +534 -0
- data/examples/logs/TestSize000061.log +534 -0
- data/examples/logs/TestSize000062.log +534 -0
- data/examples/logs/TestSize000063.log +534 -0
- data/examples/logs/TestSize000064.log +534 -0
- data/examples/logs/TestSize000065.log +534 -0
- data/examples/logs/TestSize000066.log +534 -0
- data/examples/logs/TestSize000067.log +534 -0
- data/examples/logs/TestSize000068.log +534 -0
- data/examples/logs/TestSize000069.log +534 -0
- data/examples/logs/TestSize000070.log +534 -0
- data/examples/logs/TestSize000071.log +534 -0
- data/examples/logs/TestSize000072.log +534 -0
- data/examples/logs/TestSize000073.log +534 -0
- data/examples/logs/TestSize000074.log +534 -0
- data/examples/logs/TestSize000075.log +534 -0
- data/examples/logs/TestSize000076.log +534 -0
- data/examples/logs/TestSize000077.log +534 -0
- data/examples/logs/TestSize000078.log +534 -0
- data/examples/logs/TestSize000079.log +534 -0
- data/examples/logs/TestSize000080.log +534 -0
- data/examples/logs/TestSize000081.log +534 -0
- data/examples/logs/TestSize000082.log +534 -0
- data/examples/logs/TestSize000083.log +534 -0
- data/examples/logs/TestSize000084.log +534 -0
- data/examples/logs/TestSize000085.log +534 -0
- data/examples/logs/TestSize000086.log +534 -0
- data/examples/logs/TestSize000087.log +534 -0
- data/examples/logs/TestSize000088.log +534 -0
- data/examples/logs/TestSize000089.log +534 -0
- data/examples/logs/TestSize000090.log +534 -0
- data/examples/logs/TestSize000091.log +534 -0
- data/examples/logs/TestSize000092.log +534 -0
- data/examples/logs/TestSize000093.log +534 -0
- data/examples/logs/TestSize000094.log +534 -0
- data/examples/logs/TestSize000095.log +534 -0
- data/examples/logs/TestSize000096.log +534 -0
- data/examples/logs/TestSize000097.log +534 -0
- data/examples/logs/TestSize000098.log +534 -0
- data/examples/logs/TestSize000099.log +534 -0
- data/examples/logs/TestSize000100.log +534 -0
- data/examples/logs/TestSize000101.log +534 -0
- data/examples/logs/TestSize000102.log +534 -0
- data/examples/logs/TestSize000103.log +534 -0
- data/examples/logs/TestSize000104.log +534 -0
- data/examples/logs/TestSize000105.log +534 -0
- data/examples/logs/TestSize000106.log +534 -0
- data/examples/logs/TestSize000107.log +534 -0
- data/examples/logs/TestSize000108.log +534 -0
- data/examples/logs/TestSize000109.log +534 -0
- data/examples/logs/TestSize000110.log +534 -0
- data/examples/logs/TestSize000111.log +534 -0
- data/examples/logs/TestSize000112.log +534 -0
- data/examples/logs/TestSize000113.log +534 -0
- data/examples/logs/TestSize000114.log +534 -0
- data/examples/logs/TestSize000115.log +534 -0
- data/examples/logs/TestSize000116.log +534 -0
- data/examples/logs/TestSize000117.log +534 -0
- data/examples/logs/TestSize000118.log +534 -0
- data/examples/logs/TestSize000119.log +534 -0
- data/examples/logs/TestSize000120.log +534 -0
- data/examples/logs/TestSize000121.log +534 -0
- data/examples/logs/TestSize000122.log +534 -0
- data/examples/logs/TestSize000123.log +534 -0
- data/examples/logs/TestSize000124.log +534 -0
- data/examples/logs/TestSize000125.log +534 -0
- data/examples/logs/TestSize000126.log +534 -0
- data/examples/logs/TestSize000127.log +534 -0
- data/examples/logs/TestSize000128.log +534 -0
- data/examples/logs/TestSize000129.log +534 -0
- data/examples/logs/TestSize000130.log +534 -0
- data/examples/logs/TestSize000131.log +534 -0
- data/examples/logs/TestSize000132.log +534 -0
- data/examples/logs/TestSize000133.log +534 -0
- data/examples/logs/TestSize000134.log +534 -0
- data/examples/logs/TestSize000135.log +534 -0
- data/examples/logs/TestSize000136.log +534 -0
- data/examples/logs/TestSize000137.log +534 -0
- data/examples/logs/TestSize000138.log +534 -0
- data/examples/logs/TestSize000139.log +534 -0
- data/examples/logs/TestSize000140.log +534 -0
- data/examples/logs/TestSize000141.log +534 -0
- data/examples/logs/TestSize000142.log +534 -0
- data/examples/logs/TestSize000143.log +534 -0
- data/examples/logs/TestSize000144.log +534 -0
- data/examples/logs/TestSize000145.log +534 -0
- data/examples/logs/TestSize000146.log +534 -0
- data/examples/logs/TestSize000147.log +534 -0
- data/examples/logs/TestSize000148.log +534 -0
- data/examples/logs/TestSize000149.log +534 -0
- data/examples/logs/TestSize000150.log +534 -0
- data/examples/logs/TestSize000151.log +534 -0
- data/examples/logs/TestSize000152.log +534 -0
- data/examples/logs/TestSize000153.log +534 -0
- data/examples/logs/TestSize000154.log +534 -0
- data/examples/logs/TestSize000155.log +534 -0
- data/examples/logs/TestSize000156.log +534 -0
- data/examples/logs/TestSize000157.log +534 -0
- data/examples/logs/TestSize000158.log +534 -0
- data/examples/logs/TestSize000159.log +534 -0
- data/examples/logs/TestSize000160.log +534 -0
- data/examples/logs/TestSize000161.log +534 -0
- data/examples/logs/TestSize000162.log +534 -0
- data/examples/logs/TestSize000163.log +534 -0
- data/examples/logs/TestSize000164.log +534 -0
- data/examples/logs/TestSize000165.log +534 -0
- data/examples/logs/TestSize000166.log +534 -0
- data/examples/logs/TestSize000167.log +534 -0
- data/examples/logs/TestSize000168.log +534 -0
- data/examples/logs/TestSize000169.log +534 -0
- data/examples/logs/TestSize000170.log +534 -0
- data/examples/logs/TestSize000171.log +534 -0
- data/examples/logs/TestSize000172.log +534 -0
- data/examples/logs/TestSize000173.log +534 -0
- data/examples/logs/TestSize000174.log +534 -0
- data/examples/logs/TestSize000175.log +534 -0
- data/examples/logs/TestSize000176.log +534 -0
- data/examples/logs/TestSize000177.log +534 -0
- data/examples/logs/TestSize000178.log +534 -0
- data/examples/logs/TestSize000179.log +534 -0
- data/examples/logs/TestSize000180.log +534 -0
- data/examples/logs/TestSize000181.log +534 -0
- data/examples/logs/TestSize000182.log +534 -0
- data/examples/logs/TestSize000183.log +534 -0
- data/examples/logs/TestSize000184.log +534 -0
- data/examples/logs/TestSize000185.log +534 -0
- data/examples/logs/TestSize000186.log +534 -0
- data/examples/logs/TestSize000187.log +312 -0
- data/examples/logs/TestTime000001.log +11 -0
- data/examples/logs/TestTime000002.log +10 -0
- data/examples/logs/TestTime000003.log +10 -0
- data/examples/logs/TestTime000004.log +10 -0
- data/examples/logs/TestTime000005.log +10 -0
- data/examples/logs/TestTime000006.log +10 -0
- data/examples/logs/TestTime000007.log +10 -0
- data/examples/logs/TestTime000008.log +10 -0
- data/examples/logs/TestTime000009.log +10 -0
- data/examples/logs/TestTime000010.log +9 -0
- data/src/log4r.rb +5 -2
- data/src/log4r/GDC.rb +40 -0
- data/src/log4r/MDC.rb +59 -0
- data/src/log4r/NDC.rb +87 -0
- data/src/log4r/formatter/patternformatter.rb +11 -6
- data/src/log4r/outputter/bob.patch +25 -0
- data/src/log4r/outputter/emailoutputter.rb.orig +118 -0
- data/src/log4r/outputter/emailoutputter.rb.rej +46 -0
- data/src/log4r/outputter/fileoutputter.rb +12 -5
- data/src/log4r/outputter/rollingfileoutputter.rb +8 -3
- data/src/log4r/outputter/win32eventoutputter.rb +136 -0
- data/src/log4r/rdoc/GDC +14 -0
- data/src/log4r/rdoc/MDC +16 -0
- data/src/log4r/rdoc/NDC +41 -0
- data/src/log4r/rdoc/win32eventoutputter +7 -0
- data/src/log4r/repository.rb +73 -52
- data/src/log4r/yamlconfigurator.rb +0 -0
- data/tests/testGDC.rb +26 -0
- data/tests/testMDC.rb +21 -0
- data/tests/testNDC.rb +27 -0
- data/tests/testthreads.rb +23 -0
- metadata +215 -98
- data/src/doc/Log4r.html +0 -392
- data/src/doc/Log4r/BasicFormatter.html +0 -370
- data/src/doc/Log4r/ConfigError.html +0 -207
- data/src/doc/Log4r/Configurator.html +0 -1050
- data/src/doc/Log4r/DateFileOutputter.html +0 -454
- data/src/doc/Log4r/DefaultFormatter.html +0 -205
- data/src/doc/Log4r/EmailOutputter.html +0 -636
- data/src/doc/Log4r/FileOutputter.html +0 -321
- data/src/doc/Log4r/Formatter.html +0 -291
- data/src/doc/Log4r/IOOutputter.html +0 -392
- data/src/doc/Log4r/Log4rConfig.html +0 -193
- data/src/doc/Log4r/Log4rTools.html +0 -370
- data/src/doc/Log4r/LogEvent.html +0 -360
- data/src/doc/Log4r/LogServer.html +0 -322
- data/src/doc/Log4r/Logger.html +0 -1132
- data/src/doc/Log4r/Logger/LoggerFactory.html +0 -200
- data/src/doc/Log4r/Logger/Repository.html +0 -207
- data/src/doc/Log4r/ObjectFormatter.html +0 -262
- data/src/doc/Log4r/Outputter.html +0 -910
- data/src/doc/Log4r/Outputter/OutputterFactory.html +0 -200
- data/src/doc/Log4r/Outputter/consoleoutputters_rb.html +0 -57
- data/src/doc/Log4r/Outputter/datefileoutputter_rb.html +0 -93
- data/src/doc/Log4r/Outputter/emailoutputter_rb.html +0 -179
- data/src/doc/Log4r/Outputter/fileoutputter_rb.html +0 -64
- data/src/doc/Log4r/Outputter/iooutputter_rb.html +0 -59
- data/src/doc/Log4r/Outputter/outputter_rb.html +0 -222
- data/src/doc/Log4r/Outputter/outputterfactory_rb.html +0 -62
- data/src/doc/Log4r/Outputter/remoteoutputter_rb.html +0 -59
- data/src/doc/Log4r/Outputter/rollingfileoutputter_rb.html +0 -66
- data/src/doc/Log4r/Outputter/staticoutputter_rb.html +0 -55
- data/src/doc/Log4r/Outputter/syslogoutputter_rb.html +0 -110
- data/src/doc/Log4r/Outputter/tst_rb.html +0 -54
- data/src/doc/Log4r/PatternFormatter.html +0 -422
- data/src/doc/Log4r/ROMPClient.html +0 -193
- data/src/doc/Log4r/ROMPServer.html +0 -193
- data/src/doc/Log4r/RemoteOutputter.html +0 -384
- data/src/doc/Log4r/RollingFileOutputter.html +0 -528
- data/src/doc/Log4r/RootLogger.html +0 -512
- data/src/doc/Log4r/SimpleFormatter.html +0 -258
- data/src/doc/Log4r/StderrOutputter.html +0 -250
- data/src/doc/Log4r/StdoutOutputter.html +0 -250
- data/src/doc/Log4r/SyslogOutputter.html +0 -533
- data/src/doc/Log4r/YamlConfigurator.html +0 -948
- data/src/doc/Log4r/base_rb.html +0 -57
- data/src/doc/Log4r/config_rb.html +0 -76
- data/src/doc/Log4r/configurator_rb.html +0 -370
- data/src/doc/Log4r/formatter/formatter_rb.html +0 -121
- data/src/doc/Log4r/formatter/patternformatter_rb.html +0 -233
- data/src/doc/Log4r/lib/drbloader_rb.html +0 -57
- data/src/doc/Log4r/lib/xmlloader_rb.html +0 -57
- data/src/doc/Log4r/logevent_rb.html +0 -55
- data/src/doc/Log4r/logger_rb.html +0 -293
- data/src/doc/Log4r/loggerfactory_rb.html +0 -66
- data/src/doc/Log4r/logserver_rb.html +0 -161
- data/src/doc/Log4r/rdoc/configurator.html +0 -444
- data/src/doc/Log4r/rdoc/emailoutputter.html +0 -261
- data/src/doc/Log4r/rdoc/formatter.html +0 -200
- data/src/doc/Log4r/rdoc/log4r.html +0 -268
- data/src/doc/Log4r/rdoc/logger.html +0 -364
- data/src/doc/Log4r/rdoc/logserver.html +0 -247
- data/src/doc/Log4r/rdoc/outputter.html +0 -295
- data/src/doc/Log4r/rdoc/patternformatter.html +0 -313
- data/src/doc/Log4r/rdoc/syslogoutputter.html +0 -179
- data/src/doc/Log4r/rdoc/yamlconfigurator.html +0 -169
- data/src/doc/Log4r/repository_rb.html +0 -62
- data/src/doc/Log4r/staticlogger_rb.html +0 -55
- data/src/doc/Log4r/yamlconfigurator_rb.html +0 -95
- data/src/doc/REXML.html +0 -193
- data/src/doc/created.rid +0 -1
- data/src/doc/images/brick.png +0 -0
- data/src/doc/images/brick_link.png +0 -0
- data/src/doc/images/bug.png +0 -0
- data/src/doc/images/bullet_black.png +0 -0
- data/src/doc/images/bullet_toggle_minus.png +0 -0
- data/src/doc/images/bullet_toggle_plus.png +0 -0
- data/src/doc/images/date.png +0 -0
- data/src/doc/images/find.png +0 -0
- data/src/doc/images/loadingAnimation.gif +0 -0
- data/src/doc/images/macFFBgHack.png +0 -0
- data/src/doc/images/package.png +0 -0
- data/src/doc/images/page_green.png +0 -0
- data/src/doc/images/page_white_text.png +0 -0
- data/src/doc/images/page_white_width.png +0 -0
- data/src/doc/images/plugin.png +0 -0
- data/src/doc/images/ruby.png +0 -0
- data/src/doc/images/tag_green.png +0 -0
- data/src/doc/images/wrench.png +0 -0
- data/src/doc/images/wrench_orange.png +0 -0
- data/src/doc/images/zoom.png +0 -0
- data/src/doc/index.html +0 -384
- data/src/doc/js/darkfish.js +0 -116
- data/src/doc/js/jquery.js +0 -32
- data/src/doc/js/quicksearch.js +0 -114
- data/src/doc/js/thickbox-compressed.js +0 -10
- data/src/doc/rdoc.css +0 -696
- data/src/log4r/outputter/tst.rb +0 -8
data/src/log4r/GDC.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# :include: rdoc/GDC
|
2
|
+
#
|
3
|
+
# == Other Info
|
4
|
+
#
|
5
|
+
# Version:: $Id: GDC.rb,v 1.1 2010/01/12 02:53:43 colbygk Exp $
|
6
|
+
# Author:: Colby Gutierrez-Kraybill <colby(at)astro.berkeley.edu>
|
7
|
+
|
8
|
+
module Log4r
|
9
|
+
GDCNAME = "log4rGDC"
|
10
|
+
|
11
|
+
# See log4r/GDC.rb
|
12
|
+
class GDC
|
13
|
+
private_class_method :new
|
14
|
+
|
15
|
+
def self.check_thread_instance()
|
16
|
+
if ( Thread.main != Thread.current ):
|
17
|
+
raise "Can only initialize Global Diagnostic Context from Thread.main"
|
18
|
+
else
|
19
|
+
if ( Thread.main[GDCNAME] == nil ):
|
20
|
+
Thread.main[GDCNAME] = $0
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.clear()
|
26
|
+
check_thread_instance()
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.get()
|
30
|
+
check_thread_instance()
|
31
|
+
return Thread.main[GDCNAME]
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.set( a_name )
|
35
|
+
check_thread_instance()
|
36
|
+
Thread.main[GDCNAME] = a_name
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/src/log4r/MDC.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# :include: rdoc/MDC
|
2
|
+
#
|
3
|
+
# == Other Info
|
4
|
+
#
|
5
|
+
# Version:: $Id: MDC.rb,v 1.1 2010/01/12 02:21:29 colbygk Exp $
|
6
|
+
# Author:: Colby Gutierrez-Kraybill <colby(at)astro.berkeley.edu>
|
7
|
+
|
8
|
+
require 'monitor'
|
9
|
+
|
10
|
+
module Log4r
|
11
|
+
MDCNAME = "log4rMDC"
|
12
|
+
MDCNAMEMAXDEPTH = "log4rMDCMAXDEPTH"
|
13
|
+
$globalMDCLock = Monitor.new
|
14
|
+
|
15
|
+
# See log4r/MDC.rb
|
16
|
+
class MDC < Monitor
|
17
|
+
private_class_method :new
|
18
|
+
|
19
|
+
def self.check_thread_instance()
|
20
|
+
# need to interlock here, so that if
|
21
|
+
# another thread is entering this section
|
22
|
+
# of code before the main thread does,
|
23
|
+
# then the main thread copy of the MDC
|
24
|
+
# is setup before then attempting to clone
|
25
|
+
# it off
|
26
|
+
if ( Thread.current[MDCNAME] == nil ) then
|
27
|
+
$globalMDCLock.synchronize do
|
28
|
+
if ( Thread.main[MDCNAME] == nil ) then
|
29
|
+
Thread.main[MDCNAME] = Hash.new
|
30
|
+
end
|
31
|
+
if ( Thread.current != Thread.main ) then
|
32
|
+
Thread.current[MDCNAME] = Hash.new
|
33
|
+
Thread.main[MDCNAME].each{ |k,v| Thread.current[MDCNAME][k] = v }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.get( a_key )
|
40
|
+
self.check_thread_instance()
|
41
|
+
Thread.current[MDCNAME].fetch(a_key, "");
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.get_context()
|
45
|
+
self.check_thread_instance()
|
46
|
+
return Thread.current[MDCNAME].clone
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.put( a_key, a_value )
|
50
|
+
self.check_thread_instance()
|
51
|
+
Thread.current[MDCNAME][a_key] = a_value
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.remove( a_key )
|
55
|
+
self.check_thread_instance()
|
56
|
+
Thread.current[MDCNAME].delete( a_key )
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/src/log4r/NDC.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# :include: rdoc/NDC
|
2
|
+
#
|
3
|
+
# == Other Info
|
4
|
+
#
|
5
|
+
# Version:: $Id: NDC.rb,v 1.1 2010/01/12 02:21:29 colbygk Exp $
|
6
|
+
# Author:: Colby Gutierrez-Kraybill <colby(at)astro.berkeley.edu>
|
7
|
+
|
8
|
+
module Log4r
|
9
|
+
NDCNAME = "log4rNDC"
|
10
|
+
NDCNAMEMAXDEPTH = "log4rNDCMAXDEPTH"
|
11
|
+
NDCDEFAULTMAXDEPTH = 100
|
12
|
+
|
13
|
+
# See log4r/NDC.rb
|
14
|
+
class NDC
|
15
|
+
private_class_method :new
|
16
|
+
|
17
|
+
def self.check_thread_instance()
|
18
|
+
if ( Thread.current[NDCNAME] == nil ):
|
19
|
+
Thread.current[NDCNAME] = Array.new
|
20
|
+
Thread.current[NDCNAMEMAXDEPTH] = NDCDEFAULTMAXDEPTH
|
21
|
+
Thread.current[NDCNAME]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.clear()
|
26
|
+
self.check_thread_instance()
|
27
|
+
Thread.current[NDCNAME].clear
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.clone_stack()
|
31
|
+
self.check_thread_instance()
|
32
|
+
return Thread.current[NDCNAME].clone
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.get_depth()
|
36
|
+
self.check_thread_instance()
|
37
|
+
return Thread.current[NDCNAME].length
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.inherit( a_stack )
|
41
|
+
if ( a_stack.class == Array ) then
|
42
|
+
if ( Thread.current[NDCNAME] != nil ) then
|
43
|
+
Thread.current[NDCNAME].clear
|
44
|
+
Thread.current[NDCNAME] = nil
|
45
|
+
end
|
46
|
+
Thread.current[NDCNAME] = a_stack
|
47
|
+
else
|
48
|
+
raise "Expecting Array in NDC.inherit"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.get()
|
53
|
+
self.check_thread_instance
|
54
|
+
return Thread.current[NDCNAME] * " "
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.peek()
|
58
|
+
self.check_thread_instance()
|
59
|
+
return Thread.current[NDCNAME].last
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.pop()
|
63
|
+
self.check_thread_instance()
|
64
|
+
return Thread.current[NDCNAME].pop
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.push( value )
|
68
|
+
self.check_thread_instance()
|
69
|
+
if ( Thread.current[NDCNAME].length < Thread.current[NDCNAMEMAXDEPTH] ):
|
70
|
+
Thread.current[NDCNAME].push( value )
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.remove()
|
75
|
+
self.check_thread_instance()
|
76
|
+
Thread.current[NDCNAME].clear
|
77
|
+
Thread.current[NDCNAMEMAXDEPTH] = nil
|
78
|
+
Thread.current[NDCNAME] = nil
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.set_max_depth( max_depth )
|
82
|
+
self.check_thread_instance()
|
83
|
+
Thread.current[NDCNAMEMAXDEPTH] = max_depth
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
@@ -2,9 +2,12 @@
|
|
2
2
|
#
|
3
3
|
# == Other Info
|
4
4
|
#
|
5
|
-
# Version:: $Id: patternformatter.rb,v 1.
|
5
|
+
# Version:: $Id: patternformatter.rb,v 1.6 2009/10/28 19:55:34 colbygk Exp $
|
6
6
|
|
7
7
|
require "log4r/formatter/formatter"
|
8
|
+
require "log4r/GDC"
|
9
|
+
require "log4r/MDC"
|
10
|
+
require "log4r/NDC"
|
8
11
|
|
9
12
|
module Log4r
|
10
13
|
# See log4r/formatter/patternformatter.rb
|
@@ -14,23 +17,29 @@ module Log4r
|
|
14
17
|
# %c - event short name
|
15
18
|
# %C - event fullname
|
16
19
|
# %d - date
|
20
|
+
# %g - Global Diagnostic Context (GDC)
|
17
21
|
# %t - trace
|
18
22
|
# %m - message
|
19
23
|
# %h - thread name
|
20
24
|
# %p - process ID aka PID
|
21
25
|
# %M - formatted message
|
22
26
|
# %l - Level in string form
|
27
|
+
# %x - Nested Diagnostic Context (NDC)
|
28
|
+
# %X - Mapped Diagnostic Context (MDC), syntax is "%X.key"
|
23
29
|
# %% - Insert a %
|
24
30
|
DirectiveTable = {
|
25
31
|
"c" => 'event.name',
|
26
32
|
"C" => 'event.fullname',
|
27
33
|
"d" => 'format_date',
|
34
|
+
"g" => 'GDC.get()',
|
28
35
|
"t" => '(event.tracer.nil? ? "no trace" : event.tracer[0])',
|
29
36
|
"m" => 'event.data',
|
30
|
-
"h" => '
|
37
|
+
"h" => '(Thread.current[:name] or Thread.current.to_s)',
|
31
38
|
"p" => 'Process.pid.to_s',
|
32
39
|
"M" => 'format_object(event.data)',
|
33
40
|
"l" => 'LNAMES[event.level]',
|
41
|
+
"x" => 'NDC.get()',
|
42
|
+
"X" => '($4 != "" ? MDC.get($4.to_s)',
|
34
43
|
"%" => '"%"'
|
35
44
|
}
|
36
45
|
|
@@ -74,10 +83,6 @@ module Log4r
|
|
74
83
|
PatternFormatter.create_format_methods(self)
|
75
84
|
end
|
76
85
|
|
77
|
-
def thread_name
|
78
|
-
Thread.current[:name] || Thread.current.to_s
|
79
|
-
end
|
80
|
-
|
81
86
|
# PatternFormatter works by dynamically defining a <tt>format</tt> method
|
82
87
|
# based on the supplied pattern format. This method contains a call to
|
83
88
|
# Kernel#sptrintf with arguments containing the data requested in
|
@@ -0,0 +1,25 @@
|
|
1
|
+
begin
|
2
|
+
3.times do
|
3
|
+
begin
|
4
|
+
### send email
|
5
|
+
@smtp.sendmail(rfc822msg, @from, @to)
|
6
|
+
break
|
7
|
+
rescue Net::SMTPServerBusy => e
|
8
|
+
Logger.log_internal(-2) {
|
9
|
+
"Try to restart EmailOutputter '#{@name}'! (#{e.message})"
|
10
|
+
}
|
11
|
+
@smtp = Net::SMTP.start(*@params)
|
12
|
+
rescue Exception => e
|
13
|
+
Logger.log_internal(-2) {
|
14
|
+
"EmailOutputter '#{@name}' couldn't send email! (#{e.message})"
|
15
|
+
break
|
16
|
+
}
|
17
|
+
Logger.log_internal {e}
|
18
|
+
self.level = OFF
|
19
|
+
end
|
20
|
+
end
|
21
|
+
ensure
|
22
|
+
@buff.clear
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# :include: ../rdoc/emailoutputter
|
2
|
+
|
3
|
+
require 'log4r/outputter/outputter'
|
4
|
+
require 'log4r/staticlogger'
|
5
|
+
require 'net/smtp'
|
6
|
+
|
7
|
+
module Log4r
|
8
|
+
|
9
|
+
class EmailOutputter < Outputter
|
10
|
+
attr_reader :server, :port, :domain, :acct, :authtype, :subject
|
11
|
+
|
12
|
+
def initialize(_name, hash={})
|
13
|
+
super(_name, hash)
|
14
|
+
validate(hash)
|
15
|
+
@buff = []
|
16
|
+
begin
|
17
|
+
Logger.log_internal {
|
18
|
+
"EmailOutputter '#{@name}' running SMTP client on #{@server}:#{@port}"
|
19
|
+
}
|
20
|
+
rescue Exception => e
|
21
|
+
Logger.log_internal(-2) {
|
22
|
+
"EmailOutputter '#{@name}' failed to start SMTP client!"
|
23
|
+
}
|
24
|
+
Logger.log_internal {e}
|
25
|
+
self.level = OFF
|
26
|
+
raise e
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# send out an email with the current buffer
|
31
|
+
def flush
|
32
|
+
synch { send_mail }
|
33
|
+
Logger.log_internal {"Flushed EmailOutputter '#{@name}'"}
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def validate(hash)
|
39
|
+
@buffsize = (hash[:buffsize] or hash['buffsize'] or 100).to_i
|
40
|
+
@formatfirst = Log4rTools.decode_bool(hash, :formatfirst, false)
|
41
|
+
decode_immediate_at(hash)
|
42
|
+
validate_smtp_params(hash)
|
43
|
+
end
|
44
|
+
|
45
|
+
def decode_immediate_at(hash)
|
46
|
+
@immediate = Hash.new
|
47
|
+
_at = (hash[:immediate_at] or hash['immediate_at'])
|
48
|
+
return if _at.nil?
|
49
|
+
Log4rTools.comma_split(_at).each {|lname|
|
50
|
+
level = LNAMES.index(lname)
|
51
|
+
if level.nil?
|
52
|
+
Logger.log_internal(-2) do
|
53
|
+
"EmailOutputter: skipping bad immediate_at level name '#{lname}'"
|
54
|
+
end
|
55
|
+
next
|
56
|
+
end
|
57
|
+
@immediate[level] = true
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate_smtp_params(hash)
|
62
|
+
@from = (hash[:from] or hash['from'])
|
63
|
+
raise ArgumentError, "Must specify from address" if @from.nil?
|
64
|
+
_to = (hash[:to] or hash['to'] or "")
|
65
|
+
@to = Log4rTools.comma_split(_to)
|
66
|
+
raise ArgumentError, "Must specify recepients" if @to.empty?
|
67
|
+
@server = (hash[:server] or hash['server'] or 'localhost')
|
68
|
+
@port = (hash[:port] or hash['port'] or 25).to_i
|
69
|
+
@domain = (hash[:domain] or hash['domain'] or ENV['HOSTNAME'])
|
70
|
+
@acct = (hash[:acct] or hash['acct'])
|
71
|
+
@passwd = (hash[:passwd] or hash['passwd'])
|
72
|
+
@authtype = (hash[:authtype] or hash['authtype'] or :cram_md5).to_s.intern
|
73
|
+
@subject = (hash[:subject] or hash['subject'] or "Message of #{$0}")
|
74
|
+
@params = [@server, @port, @domain, @acct, @passwd, @authtype]
|
75
|
+
end
|
76
|
+
|
77
|
+
def canonical_log(event)
|
78
|
+
synch {
|
79
|
+
@buff.push case @formatfirst
|
80
|
+
when true then @formatter.format event
|
81
|
+
else event
|
82
|
+
end
|
83
|
+
send_mail if @buff.size >= @buffsize or @immediate[event.level]
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def send_mail
|
88
|
+
msg =
|
89
|
+
case @formatfirst
|
90
|
+
when true then @buff.join
|
91
|
+
else @buff.collect{|e| @formatter.format e}.join
|
92
|
+
end
|
93
|
+
|
94
|
+
### build a mail header for RFC 822
|
95
|
+
rfc822msg =
|
96
|
+
"From: #{@from}\n" +
|
97
|
+
"To: #{@to}\n" +
|
98
|
+
"Subject: #{@subject}\n" +
|
99
|
+
"Date: #{Time.now.strftime( "%a, %d %b %Y %H:%M:%S %z %Z")}\n" +
|
100
|
+
"Message-Id: <#{"%.8f" % Time.now.to_f}@#{@domain}>\n\n" +
|
101
|
+
"#{msg}"
|
102
|
+
|
103
|
+
### send email
|
104
|
+
begin Net::SMTP.start(*@params) do |smtp|
|
105
|
+
smtp.sendmail(rfc822msg, @from, @to)
|
106
|
+
end
|
107
|
+
rescue Exception => e
|
108
|
+
Logger.log_internal(-2) {
|
109
|
+
"EmailOutputter '#{@name}' couldn't send email!"
|
110
|
+
}
|
111
|
+
Logger.log_internal {e}
|
112
|
+
self.level = OFF
|
113
|
+
raise e
|
114
|
+
ensure @buff.clear
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
***************
|
2
|
+
*** 100,114 ****
|
3
|
+
"Message-Id: <#{"%.8f" % Time.now.to_f}@#{@domain}>\n\n" +
|
4
|
+
"#{msg}"
|
5
|
+
|
6
|
+
- ### send email
|
7
|
+
- begin @smtp.sendmail(rfc822msg, @from, @to)
|
8
|
+
- rescue Exception => e
|
9
|
+
- Logger.log_internal(-2) {
|
10
|
+
- "EmailOutputter '#{@name}' couldn't send email!"
|
11
|
+
- }
|
12
|
+
- Logger.log_internal {e}
|
13
|
+
- self.level = OFF
|
14
|
+
- ensure @buff.clear
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
--- 100,127 ----
|
19
|
+
"Message-Id: <#{"%.8f" % Time.now.to_f}@#{@domain}>\n\n" +
|
20
|
+
"#{msg}"
|
21
|
+
|
22
|
+
+ begin
|
23
|
+
+ 3.times do
|
24
|
+
+ begin
|
25
|
+
+ ### send email
|
26
|
+
+ @smtp.sendmail(rfc822msg, @from, @to)
|
27
|
+
+ break
|
28
|
+
+ rescue Net::SMTPServerBusy => e
|
29
|
+
+ Logger.log_internal(-2) {
|
30
|
+
+ "Try to restart EmailOutputter '#{@name}'! (#{e.message})"
|
31
|
+
+ }
|
32
|
+
+ @smtp = Net::SMTP.start(*@params)
|
33
|
+
+ rescue Exception => e
|
34
|
+
+ Logger.log_internal(-2) {
|
35
|
+
+ "EmailOutputter '#{@name}' couldn't send email! (#{e.message})"
|
36
|
+
+ break
|
37
|
+
+ }
|
38
|
+
+ Logger.log_internal {e}
|
39
|
+
+ self.level = OFF
|
40
|
+
+ end
|
41
|
+
+ end
|
42
|
+
+ ensure
|
43
|
+
+ @buff.clear
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# :nodoc:
|
2
|
-
# Version:: $Id: fileoutputter.rb,v 1.
|
2
|
+
# Version:: $Id: fileoutputter.rb,v 1.2 2009/09/29 18:13:13 colbygk Exp $
|
3
3
|
|
4
4
|
require "log4r/outputter/iooutputter"
|
5
5
|
require "log4r/staticlogger"
|
@@ -18,6 +18,7 @@ module Log4r
|
|
18
18
|
|
19
19
|
@trunc = Log4rTools.decode_bool(hash, :trunc, true)
|
20
20
|
_filename = (hash[:filename] or hash['filename'])
|
21
|
+
@create = Log4rTools.decode_bool(hash, :create, true)
|
21
22
|
|
22
23
|
if _filename.class != String
|
23
24
|
raise TypeError, "Argument 'filename' must be a String", caller
|
@@ -38,10 +39,16 @@ module Log4r
|
|
38
39
|
end
|
39
40
|
|
40
41
|
@filename = _filename
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
if ( @create == true ) then
|
43
|
+
@out = File.new(@filename, (@trunc ? "w" : "a"))
|
44
|
+
Logger.log_internal {
|
45
|
+
"FileOutputter '#{@name}' writing to #{@filename}"
|
46
|
+
}
|
47
|
+
else
|
48
|
+
Logger.log_internal {
|
49
|
+
"FileOutputter '#{@name}' called with :create == false, #{@filename}"
|
50
|
+
}
|
51
|
+
end
|
45
52
|
end
|
46
53
|
|
47
54
|
end
|