log4r 1.1.2 → 1.1.3
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/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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
# :nodoc:
|
|
3
|
-
# Version:: $Id: rollingfileoutputter.rb,v 1.
|
|
3
|
+
# Version:: $Id: rollingfileoutputter.rb,v 1.2 2009/09/29 18:13:13 colbygk Exp $
|
|
4
4
|
|
|
5
5
|
require "log4r/outputter/fileoutputter"
|
|
6
6
|
require "log4r/staticlogger"
|
|
@@ -18,7 +18,7 @@ module Log4r
|
|
|
18
18
|
|
|
19
19
|
def initialize(_name, hash={})
|
|
20
20
|
@count = 0
|
|
21
|
-
super(_name, hash)
|
|
21
|
+
super( _name, hash.merge({:create => false}) )
|
|
22
22
|
if hash.has_key?(:maxsize) || hash.has_key?('maxsize')
|
|
23
23
|
_maxsize = (hash[:maxsize] or hash['maxsize']).to_i
|
|
24
24
|
if _maxsize.class != Fixnum
|
|
@@ -85,7 +85,12 @@ module Log4r
|
|
|
85
85
|
# roll the file
|
|
86
86
|
def roll
|
|
87
87
|
begin
|
|
88
|
-
|
|
88
|
+
# If @baseFilename == @filename, then this method is about to
|
|
89
|
+
# try to close out a file that is not actually opened because
|
|
90
|
+
# fileoutputter has been called with the parameter roll=true
|
|
91
|
+
if ( @baseFilename != @filename ) then
|
|
92
|
+
@out.close
|
|
93
|
+
end
|
|
89
94
|
rescue
|
|
90
95
|
Logger.log_internal {
|
|
91
96
|
"RollingFileOutputter '#{@name}' could not close #{@filename}"
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# :include: ../rdoc/win32eventoutputter
|
|
2
|
+
#
|
|
3
|
+
# Version:: $Id: syslogoutputter.rb,v 1.5 2009/09/25 20:33:33 colbygk Exp $
|
|
4
|
+
# Author:: Colby Gutierrez-Kraybill
|
|
5
|
+
#
|
|
6
|
+
# NOTE: THIS IS A DEVELOPMENT VERSION AND IS NOT READY FOR USE
|
|
7
|
+
# INFACT, IT MAY NEVER BE READY FOR USE, AS TRYING TO INTERACT
|
|
8
|
+
# WITH THE WIN32 EVENTLOG API REQUIRES USER INTERVENTION TO LOOKUP
|
|
9
|
+
# event_id AND category CODES THAT THIS LIBRARY CANNOT KNOW A PRIORI
|
|
10
|
+
#
|
|
11
|
+
# I have added this to the cvs tree to keep as a work in flight
|
|
12
|
+
# It is presently UNUSABLE
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
require 'log4r/formatter/formatter'
|
|
16
|
+
require 'log4r/outputter/outputter'
|
|
17
|
+
require 'log4r/configurator'
|
|
18
|
+
require 'win32/eventlog'
|
|
19
|
+
|
|
20
|
+
module Log4r
|
|
21
|
+
include Win32
|
|
22
|
+
|
|
23
|
+
class Win32EventLogOutputter < Outputter
|
|
24
|
+
|
|
25
|
+
# maps default log4r levels to win32 event priorities
|
|
26
|
+
# (logevents never see ALL and OFF)
|
|
27
|
+
# WIN32EVENTLOG Levels are:
|
|
28
|
+
# "SUCCESS" => EVENTLOG_SUCCESS
|
|
29
|
+
# "AUDIT_SUCCESS" => AUDIT_SUCCESS
|
|
30
|
+
# "INFO" => EVENTLOG_INFO
|
|
31
|
+
# "WARN" => EVENTLOG_WARN
|
|
32
|
+
# "ERROR" => EVENTLOG_ERROR
|
|
33
|
+
# "AUDIT_FAILURE" => AUDIT_FAILURE
|
|
34
|
+
WIN32EVENTLOG_LEVELS_MAP = {
|
|
35
|
+
"SUCCESS" => EVENTLOG_SUCCESS,
|
|
36
|
+
"AUDIT_SUCCESS" => AUDIT_SUCCESS,
|
|
37
|
+
"INFO" => EVENTLOG_INFO,
|
|
38
|
+
"WARN" => EVENTLOG_WARN,
|
|
39
|
+
"ERROR" => EVENTLOG_ERROR,
|
|
40
|
+
"AUDIT_FAILURE" => AUDIT_FAILURE
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# mapping from Log4r default levels to win32 eventlog, by string name
|
|
44
|
+
# "DEBUG" => "INFO" # by default DEBUG is not in win32 eventlog
|
|
45
|
+
# "INFO" => "INFO"
|
|
46
|
+
# "WARN" => "WARN"
|
|
47
|
+
# "ERROR" => "ERROR"
|
|
48
|
+
# "FATAL" => "ERROR" # by default FATAL is not in win32 eventlog
|
|
49
|
+
# "SUCCESS" => "SUCCESS" # by default SUCCESS is not in log4r
|
|
50
|
+
# "AUDIT_SUCCESS" => "AUDIT_SUCCESS" # by default AUDIT_SUCCESS is not in log4r
|
|
51
|
+
# "AUDIT_FAILURE" => "AUDIT_FAILURE" # by default AUDIT_FATAL is not in log4r
|
|
52
|
+
WIN32EVENTLOG_LOG4R_MAP = {
|
|
53
|
+
"DEBUG" => "INFO",
|
|
54
|
+
"INFO" => "INFO",
|
|
55
|
+
"WARN" => "WARN",
|
|
56
|
+
"ERROR" => "ERROR",
|
|
57
|
+
"FATAL" => "ERROR",
|
|
58
|
+
"SUCCESS" => "SUCCESS",
|
|
59
|
+
"AUDIT_SUCCESS" => "AUDIT_SUCCESS",
|
|
60
|
+
"AUDIT_FAILURE" => "AUDIT_FAILURE"
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@levels_map = WIN32EVENTLOG_LOG4R_MAP
|
|
64
|
+
|
|
65
|
+
# There are 3 hash arguments
|
|
66
|
+
#
|
|
67
|
+
# [<tt>:registry_source</tt>] eventlog registry source, defaults to "Application"
|
|
68
|
+
# [<tt>:source</tt>] eventlog source, defaults to _name
|
|
69
|
+
def initialize(_name, hash={})
|
|
70
|
+
super(_name, hash)
|
|
71
|
+
registry_source = (hash[:registry_source] or hash['registry_source'] or "Application")
|
|
72
|
+
@source = (hash[:source] or hash['source'] or _name)
|
|
73
|
+
logopt = (hash[:logopt] or hash['logopt'] or LOG_PID | LOG_CONS).to_i
|
|
74
|
+
facility = (hash[:facility] or hash['facility'] or LOG_USER).to_i
|
|
75
|
+
map_levels_by_name_to_eventlog()
|
|
76
|
+
if ( Syslog.opened? ) then
|
|
77
|
+
Logger.log_internal { "Syslog already initialized, to alter, " +
|
|
78
|
+
"you must close first"}
|
|
79
|
+
end
|
|
80
|
+
# @syslog = ( Syslog.opened? ) ? Syslog : Syslog.open(ident, logopt, facility)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def closed?
|
|
84
|
+
return true # !@syslog.opened?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def close
|
|
88
|
+
#@syslog.close unless @syslog.nil?
|
|
89
|
+
#@level = OFF
|
|
90
|
+
OutputterFactory.create_methods(self)
|
|
91
|
+
Logger.log_internal {"Outputter '#{@name}' closed Syslog and set to OFF"}
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# A single hash argument that maps custom names to eventlog names
|
|
95
|
+
#
|
|
96
|
+
# [<tt>levels_map</tt>] A map that will create a linkage between levels
|
|
97
|
+
# in a hash and underlying eventlog levels.
|
|
98
|
+
# By default, these are direct mapping of the log4r
|
|
99
|
+
# levels (e.g. "DEBUG" => "DEBUG")
|
|
100
|
+
# If you have defined your own custom levels, you
|
|
101
|
+
# should provide this underlying mapping, otherwise
|
|
102
|
+
# all messages will be mapped to the underlying eventlog
|
|
103
|
+
# level of INFO by default.
|
|
104
|
+
# e.g.
|
|
105
|
+
# You have created custom levels called:
|
|
106
|
+
# <tt>Configurator.custom_levels "HIGH", "MEDIUM", "LOW"</tt>
|
|
107
|
+
# To map these to 'equivilent' eventlog levels, after instantiatin
|
|
108
|
+
# a eventlogoutputter:
|
|
109
|
+
# <tt>EventLogOutputter.map_levels_by_name_to_eventlog(
|
|
110
|
+
# { "HIGH" => "ALERT", "MEDIUM" => "WARN", "LOW" => "INFO" }
|
|
111
|
+
# )</tt>
|
|
112
|
+
def map_levels_by_name_to_eventlog( lmap = WIN32EVENTLOG_LOG4R_MAP )
|
|
113
|
+
@levels_map = lmap
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def get_levels_map()
|
|
117
|
+
return @levels_map
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
private
|
|
121
|
+
|
|
122
|
+
def canonical_log(logevent)
|
|
123
|
+
pri = SYSLOG_LEVELS_MAP[@levels_map[LNAMES[logevent.level]]] rescue pri = LOG_INFO
|
|
124
|
+
o = format(logevent)
|
|
125
|
+
if o.kind_of? Exception then
|
|
126
|
+
msg = "#{o.class} at (#{o.backtrace[0]}): #{o.message}"
|
|
127
|
+
elsif o.respond_to? :to_str then
|
|
128
|
+
msg = o.to_str
|
|
129
|
+
else
|
|
130
|
+
msg = o.inspect
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# @syslog.log(pri, '%s', msg)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
data/src/log4r/rdoc/GDC
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
= GDC
|
|
2
|
+
|
|
3
|
+
The GDC class implements a copy of the Global Diagnostic Context, which
|
|
4
|
+
is not part of the Apache Log4j library, as of this writing (10 Jan 2009).
|
|
5
|
+
|
|
6
|
+
The GDC is like the NDC and MDC classes, only it is global to the
|
|
7
|
+
application (see NDC and MDC for details on those classes).
|
|
8
|
+
|
|
9
|
+
The GDC is local to the main thread, and any new threads will return
|
|
10
|
+
the value of the current GDC set in the main thread.
|
|
11
|
+
|
|
12
|
+
Only the main thread can set the GDC, any other threads that
|
|
13
|
+
attempt to will raise an exception.
|
|
14
|
+
|
data/src/log4r/rdoc/MDC
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
= MDC
|
|
2
|
+
|
|
3
|
+
The MDC class implements a copy of the Mapped Diagnostic Context, which
|
|
4
|
+
is part of the Apache Log4j library. See the NDC documentation for
|
|
5
|
+
more details. MDCs are much like NDCs, but instead of a stack context
|
|
6
|
+
it uses a map for holding this information.
|
|
7
|
+
|
|
8
|
+
This allows for selection of information out of the map when
|
|
9
|
+
the log message is being created.
|
|
10
|
+
|
|
11
|
+
MDCs are thread safe, and are unique to each thread.
|
|
12
|
+
|
|
13
|
+
An important difference between MDCs in Log4r vs Log4j is that they
|
|
14
|
+
only inherit from the main thread. Ruby treats all new threads as
|
|
15
|
+
being the children of the main thread, even if they are started
|
|
16
|
+
from a thread that is not main.
|
data/src/log4r/rdoc/NDC
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
= NDC
|
|
2
|
+
|
|
3
|
+
The NDC class implements a copy of the Nested Diagnostic Context, which
|
|
4
|
+
is part of the Apache Log4j library. Nested Diagnostic Contexts were
|
|
5
|
+
derived from Neil Harrison's article on "Patterns for Logging
|
|
6
|
+
Diagnostic Messages", part of the book "Pattern Languages of Program
|
|
7
|
+
Design 3" edited by Martin et al.
|
|
8
|
+
|
|
9
|
+
NDCs in Log4r are thread safe.
|
|
10
|
+
|
|
11
|
+
NDCs in log4r are close enough to NDCs in Log4j that I include its
|
|
12
|
+
documentation directly:
|
|
13
|
+
|
|
14
|
+
...
|
|
15
|
+
A Nested Diagnostic Context, or NDC in short, is an instrument to
|
|
16
|
+
distinguish interleaved log output from different sources. Log output
|
|
17
|
+
is typically interleaved when a server handles multiple clients
|
|
18
|
+
near-simultaneously.
|
|
19
|
+
|
|
20
|
+
Interleaved log output can still be meaningful if each log entry from
|
|
21
|
+
different contexts had a distinctive stamp. This is where NDCs come into
|
|
22
|
+
play.
|
|
23
|
+
|
|
24
|
+
Note that NDCs are managed on a per thread basis. NDC operations such as
|
|
25
|
+
push, pop(), clear(), getDepth() and setMaxDepth(int) affect the NDC of
|
|
26
|
+
the current thread only. NDCs of other threads remain unaffected.
|
|
27
|
+
...
|
|
28
|
+
|
|
29
|
+
An important difference between NDCs in Log4r vs Log4j is that you
|
|
30
|
+
do not have to called NDC.remove() when exiting a thread.
|
|
31
|
+
|
|
32
|
+
This class will automatically create Thread specific storage for the
|
|
33
|
+
current thread on the first call to any of its methods, i.e.
|
|
34
|
+
|
|
35
|
+
NDC.push( "client accept" );
|
|
36
|
+
|
|
37
|
+
New threads may inherit the NDC of the parent thread by making use of
|
|
38
|
+
the clone_stack() and inherit() methods. By default, the NDC is not
|
|
39
|
+
inherited automatically. This is unlike MDCs, which will inherit from
|
|
40
|
+
the main thread.
|
|
41
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
= Win32EventOutputter
|
|
2
|
+
|
|
3
|
+
THIS IS A DEVELOPMENT VERSION AND IS NOT READY FOR USE
|
|
4
|
+
INFACT, IT MAY NEVER BE READY FOR USE, AS TRYING TO INTERACT
|
|
5
|
+
WITH THE WIN32 EVENTLOG API REQUIRES USER INTERVENTION TO LOOKUP
|
|
6
|
+
event_id AND category CODES THAT THIS LIBRARY CANNOT KNOW A PRIORI
|
|
7
|
+
|
data/src/log4r/repository.rb
CHANGED
|
@@ -1,65 +1,86 @@
|
|
|
1
1
|
# :nodoc:
|
|
2
|
-
# Version:: $Id: repository.rb,v 1.
|
|
2
|
+
# Version:: $Id: repository.rb,v 1.2 2009/09/29 02:34:05 colbygk Exp $
|
|
3
|
+
#
|
|
4
|
+
# Using Thread.exclusive seems to be more efficient than using
|
|
5
|
+
# a class wide instance of Sync.synchronize in ruby 1.8.6 - Colby
|
|
6
|
+
#
|
|
7
|
+
# Using Sync.synchronize, 5000 iterations:
|
|
8
|
+
# real 3m55.493s user 3m45.557s sys 0m3.478s
|
|
9
|
+
#
|
|
10
|
+
# Using Thread.exclusive, 5000 iterations:
|
|
11
|
+
# real 2m35.859s user 2m33.951s sys 0m1.224s
|
|
12
|
+
#
|
|
3
13
|
|
|
4
14
|
require "singleton"
|
|
5
15
|
|
|
6
16
|
module Log4r
|
|
7
|
-
class Logger
|
|
17
|
+
class Logger
|
|
8
18
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class Repository # :nodoc:
|
|
16
|
-
include Singleton
|
|
17
|
-
attr_reader :loggers
|
|
18
|
-
|
|
19
|
-
def initialize
|
|
20
|
-
@loggers = Hash.new
|
|
21
|
-
end
|
|
19
|
+
# The repository stores a Hash of loggers keyed to their fullnames and
|
|
20
|
+
# provides a few functions to reduce the code bloat in log4r/logger.rb.
|
|
21
|
+
# This class is supposed to be transparent to end users, hence it is
|
|
22
|
+
# a class within Logger. If anyone knows how to make this private,
|
|
23
|
+
# let me know.
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
class Repository # :nodoc:
|
|
26
|
+
include Singleton
|
|
27
|
+
attr_reader :loggers
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Retrieves all children of a parent
|
|
32
|
-
def self.all_children(parent)
|
|
33
|
-
# children have the parent name + delimiter in their fullname
|
|
34
|
-
daddy = parent.name + Private::Config::LoggerPathDelimiter
|
|
35
|
-
for fullname, logger in instance.loggers
|
|
36
|
-
yield logger if parent.is_root? || fullname =~ /#{daddy}/
|
|
29
|
+
def initialize
|
|
30
|
+
@loggers = Hash.new
|
|
37
31
|
end
|
|
38
|
-
end
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
for fullname, logger in instance.loggers
|
|
45
|
-
next if logger.is_root?
|
|
46
|
-
logger.parent = parent if logger.path =~ /^#{parent.fullname}$/
|
|
33
|
+
def self.[](fullname)
|
|
34
|
+
Thread.exclusive do
|
|
35
|
+
instance.loggers[fullname]
|
|
36
|
+
end # exclusive
|
|
47
37
|
end
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
38
|
+
|
|
39
|
+
def self.[]=(fullname, logger)
|
|
40
|
+
Thread.exclusive do
|
|
41
|
+
instance.loggers[fullname] = logger
|
|
42
|
+
end # exclusive
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Retrieves all children of a parent
|
|
46
|
+
def self.all_children(parent)
|
|
47
|
+
# children have the parent name + delimiter in their fullname
|
|
48
|
+
daddy = parent.name + Private::Config::LoggerPathDelimiter
|
|
49
|
+
Thread.exclusive do
|
|
50
|
+
for fullname, logger in instance.loggers
|
|
51
|
+
yield logger if parent.is_root? || fullname =~ /#{daddy}/
|
|
52
|
+
end
|
|
53
|
+
end # exclusive
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# when new loggers are introduced, they may get inserted into
|
|
57
|
+
# an existing inheritance tree. this method
|
|
58
|
+
# updates the children of a logger to link their new parent
|
|
59
|
+
def self.reassign_any_children(parent)
|
|
60
|
+
Thread.exclusive do
|
|
61
|
+
for fullname, logger in instance.loggers
|
|
62
|
+
next if logger.is_root?
|
|
63
|
+
logger.parent = parent if logger.path =~ /^#{parent.fullname}$/
|
|
64
|
+
end
|
|
65
|
+
end # exclusive
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# looks for the first defined logger in a child's path
|
|
69
|
+
# or nil if none found (which will then be rootlogger)
|
|
70
|
+
def self.find_ancestor(path)
|
|
71
|
+
arr = path.split Log4rConfig::LoggerPathDelimiter
|
|
72
|
+
logger = nil
|
|
73
|
+
Thread.exclusive do
|
|
74
|
+
while arr.size > 0 do
|
|
75
|
+
logger = Repository[arr.join(Log4rConfig::LoggerPathDelimiter)]
|
|
76
|
+
break unless logger.nil?
|
|
77
|
+
arr.pop
|
|
78
|
+
end
|
|
79
|
+
end # exclusive
|
|
80
|
+
logger
|
|
59
81
|
end
|
|
60
|
-
logger
|
|
61
|
-
end
|
|
62
82
|
|
|
63
|
-
|
|
64
|
-
end
|
|
65
|
-
end
|
|
83
|
+
end # class Repository
|
|
84
|
+
end # class Logger
|
|
85
|
+
end # Module Log4r
|
|
86
|
+
|
|
Binary file
|
data/tests/testGDC.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
$: << File.join("..","src")
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require "log4r"
|
|
4
|
+
include Log4r
|
|
5
|
+
|
|
6
|
+
class TestGDC < Test::Unit::TestCase
|
|
7
|
+
|
|
8
|
+
def test_gdc_default
|
|
9
|
+
assert(GDC.get() == "testGDC.rb", "Expected 'testGDC.rb' got '#{GDC.get()}'" )
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_gdc_set
|
|
13
|
+
assert_nothing_raised() { GDC.set("testGDCset") }
|
|
14
|
+
assert(GDC.get() == "testGDCset", "Expected 'testGDCset' got '#{GDC.get()}'" )
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_gdc_threaded
|
|
18
|
+
assert_nothing_raised() { GDC.set("testGDCset") }
|
|
19
|
+
t = Thread.new("test GDC thread") do |name|
|
|
20
|
+
assert_raise(RuntimeError) { GDC.set("somethingelse") }
|
|
21
|
+
end
|
|
22
|
+
t.join
|
|
23
|
+
assert(GDC.get() == "testGDCset", "Expected 'testGDCset' got '#{GDC.get()}'" )
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
data/tests/testMDC.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
$: << File.join("..","src")
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require "log4r"
|
|
4
|
+
include Log4r
|
|
5
|
+
|
|
6
|
+
class TestMDC < Test::Unit::TestCase
|
|
7
|
+
|
|
8
|
+
def test_multithread_copy
|
|
9
|
+
Log4r::MDC.put("user","colbygk")
|
|
10
|
+
t = Thread.new("test first copy") do |name|
|
|
11
|
+
assert(Log4r::MDC.get("user") == "colbygk",
|
|
12
|
+
"Did not get back expected value, '#{MDC.get("user")}'")
|
|
13
|
+
Log4r::MDC.put("user","unique")
|
|
14
|
+
assert(Log4r::MDC.get("user") == "unique",
|
|
15
|
+
"Did not get back expected value, '#{MDC.get("user")}'")
|
|
16
|
+
end
|
|
17
|
+
t.join
|
|
18
|
+
assert(Log4r::MDC.get("user") == "colbygk",
|
|
19
|
+
"Did not get back expected value, '#{MDC.get("user")}'")
|
|
20
|
+
end
|
|
21
|
+
end
|
data/tests/testNDC.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
$: << File.join("..","src")
|
|
2
|
+
require "test/unit"
|
|
3
|
+
require "log4r"
|
|
4
|
+
include Log4r
|
|
5
|
+
|
|
6
|
+
class TestNDC < Test::Unit::TestCase
|
|
7
|
+
|
|
8
|
+
def test_ndc_remove_push
|
|
9
|
+
NDC.remove()
|
|
10
|
+
NDC.push("ndc")
|
|
11
|
+
assert(Log4r::NDC.get() == "ndc", "Expected 'ndc' got '#{NDC.get()}'" )
|
|
12
|
+
NDC.push("ndc")
|
|
13
|
+
assert(Log4r::NDC.get() == "ndc ndc", "Expected 'ndc ndc' got '#{NDC.get()}'" )
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_ndc_remove_push_clone_and_inherit
|
|
17
|
+
NDC.remove()
|
|
18
|
+
NDC.push("ndc")
|
|
19
|
+
NDC.push("ndc")
|
|
20
|
+
a = NDC.clone_stack()
|
|
21
|
+
NDC.remove()
|
|
22
|
+
assert(NDC.get() == "", "Expected '' got '#{NDC.get()}'" )
|
|
23
|
+
NDC.inherit(a)
|
|
24
|
+
assert(NDC.get() == "ndc ndc", "Expected 'ndc ndc' got '#{NDC.get()}'" )
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|