log4r 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (319) hide show
  1. data/README +2 -2
  2. data/Rakefile +3 -3
  3. data/TODO +0 -34
  4. data/examples/filelog.rb +25 -0
  5. data/examples/logs/TestSize000001.log +576 -0
  6. data/examples/logs/TestSize000002.log +567 -0
  7. data/examples/logs/TestSize000003.log +552 -0
  8. data/examples/logs/TestSize000004.log +552 -0
  9. data/examples/logs/TestSize000005.log +552 -0
  10. data/examples/logs/TestSize000006.log +552 -0
  11. data/examples/logs/TestSize000007.log +552 -0
  12. data/examples/logs/TestSize000008.log +552 -0
  13. data/examples/logs/TestSize000009.log +552 -0
  14. data/examples/logs/TestSize000010.log +552 -0
  15. data/examples/logs/TestSize000011.log +552 -0
  16. data/examples/logs/TestSize000012.log +552 -0
  17. data/examples/logs/TestSize000013.log +552 -0
  18. data/examples/logs/TestSize000014.log +552 -0
  19. data/examples/logs/TestSize000015.log +552 -0
  20. data/examples/logs/TestSize000016.log +552 -0
  21. data/examples/logs/TestSize000017.log +552 -0
  22. data/examples/logs/TestSize000018.log +552 -0
  23. data/examples/logs/TestSize000019.log +535 -0
  24. data/examples/logs/TestSize000020.log +534 -0
  25. data/examples/logs/TestSize000021.log +534 -0
  26. data/examples/logs/TestSize000022.log +534 -0
  27. data/examples/logs/TestSize000023.log +534 -0
  28. data/examples/logs/TestSize000024.log +534 -0
  29. data/examples/logs/TestSize000025.log +534 -0
  30. data/examples/logs/TestSize000026.log +534 -0
  31. data/examples/logs/TestSize000027.log +534 -0
  32. data/examples/logs/TestSize000028.log +534 -0
  33. data/examples/logs/TestSize000029.log +534 -0
  34. data/examples/logs/TestSize000030.log +534 -0
  35. data/examples/logs/TestSize000031.log +534 -0
  36. data/examples/logs/TestSize000032.log +534 -0
  37. data/examples/logs/TestSize000033.log +534 -0
  38. data/examples/logs/TestSize000034.log +534 -0
  39. data/examples/logs/TestSize000035.log +534 -0
  40. data/examples/logs/TestSize000036.log +534 -0
  41. data/examples/logs/TestSize000037.log +534 -0
  42. data/examples/logs/TestSize000038.log +534 -0
  43. data/examples/logs/TestSize000039.log +534 -0
  44. data/examples/logs/TestSize000040.log +534 -0
  45. data/examples/logs/TestSize000041.log +534 -0
  46. data/examples/logs/TestSize000042.log +534 -0
  47. data/examples/logs/TestSize000043.log +534 -0
  48. data/examples/logs/TestSize000044.log +534 -0
  49. data/examples/logs/TestSize000045.log +534 -0
  50. data/examples/logs/TestSize000046.log +534 -0
  51. data/examples/logs/TestSize000047.log +534 -0
  52. data/examples/logs/TestSize000048.log +534 -0
  53. data/examples/logs/TestSize000049.log +534 -0
  54. data/examples/logs/TestSize000050.log +534 -0
  55. data/examples/logs/TestSize000051.log +534 -0
  56. data/examples/logs/TestSize000052.log +534 -0
  57. data/examples/logs/TestSize000053.log +534 -0
  58. data/examples/logs/TestSize000054.log +534 -0
  59. data/examples/logs/TestSize000055.log +534 -0
  60. data/examples/logs/TestSize000056.log +534 -0
  61. data/examples/logs/TestSize000057.log +534 -0
  62. data/examples/logs/TestSize000058.log +534 -0
  63. data/examples/logs/TestSize000059.log +534 -0
  64. data/examples/logs/TestSize000060.log +534 -0
  65. data/examples/logs/TestSize000061.log +534 -0
  66. data/examples/logs/TestSize000062.log +534 -0
  67. data/examples/logs/TestSize000063.log +534 -0
  68. data/examples/logs/TestSize000064.log +534 -0
  69. data/examples/logs/TestSize000065.log +534 -0
  70. data/examples/logs/TestSize000066.log +534 -0
  71. data/examples/logs/TestSize000067.log +534 -0
  72. data/examples/logs/TestSize000068.log +534 -0
  73. data/examples/logs/TestSize000069.log +534 -0
  74. data/examples/logs/TestSize000070.log +534 -0
  75. data/examples/logs/TestSize000071.log +534 -0
  76. data/examples/logs/TestSize000072.log +534 -0
  77. data/examples/logs/TestSize000073.log +534 -0
  78. data/examples/logs/TestSize000074.log +534 -0
  79. data/examples/logs/TestSize000075.log +534 -0
  80. data/examples/logs/TestSize000076.log +534 -0
  81. data/examples/logs/TestSize000077.log +534 -0
  82. data/examples/logs/TestSize000078.log +534 -0
  83. data/examples/logs/TestSize000079.log +534 -0
  84. data/examples/logs/TestSize000080.log +534 -0
  85. data/examples/logs/TestSize000081.log +534 -0
  86. data/examples/logs/TestSize000082.log +534 -0
  87. data/examples/logs/TestSize000083.log +534 -0
  88. data/examples/logs/TestSize000084.log +534 -0
  89. data/examples/logs/TestSize000085.log +534 -0
  90. data/examples/logs/TestSize000086.log +534 -0
  91. data/examples/logs/TestSize000087.log +534 -0
  92. data/examples/logs/TestSize000088.log +534 -0
  93. data/examples/logs/TestSize000089.log +534 -0
  94. data/examples/logs/TestSize000090.log +534 -0
  95. data/examples/logs/TestSize000091.log +534 -0
  96. data/examples/logs/TestSize000092.log +534 -0
  97. data/examples/logs/TestSize000093.log +534 -0
  98. data/examples/logs/TestSize000094.log +534 -0
  99. data/examples/logs/TestSize000095.log +534 -0
  100. data/examples/logs/TestSize000096.log +534 -0
  101. data/examples/logs/TestSize000097.log +534 -0
  102. data/examples/logs/TestSize000098.log +534 -0
  103. data/examples/logs/TestSize000099.log +534 -0
  104. data/examples/logs/TestSize000100.log +534 -0
  105. data/examples/logs/TestSize000101.log +534 -0
  106. data/examples/logs/TestSize000102.log +534 -0
  107. data/examples/logs/TestSize000103.log +534 -0
  108. data/examples/logs/TestSize000104.log +534 -0
  109. data/examples/logs/TestSize000105.log +534 -0
  110. data/examples/logs/TestSize000106.log +534 -0
  111. data/examples/logs/TestSize000107.log +534 -0
  112. data/examples/logs/TestSize000108.log +534 -0
  113. data/examples/logs/TestSize000109.log +534 -0
  114. data/examples/logs/TestSize000110.log +534 -0
  115. data/examples/logs/TestSize000111.log +534 -0
  116. data/examples/logs/TestSize000112.log +534 -0
  117. data/examples/logs/TestSize000113.log +534 -0
  118. data/examples/logs/TestSize000114.log +534 -0
  119. data/examples/logs/TestSize000115.log +534 -0
  120. data/examples/logs/TestSize000116.log +534 -0
  121. data/examples/logs/TestSize000117.log +534 -0
  122. data/examples/logs/TestSize000118.log +534 -0
  123. data/examples/logs/TestSize000119.log +534 -0
  124. data/examples/logs/TestSize000120.log +534 -0
  125. data/examples/logs/TestSize000121.log +534 -0
  126. data/examples/logs/TestSize000122.log +534 -0
  127. data/examples/logs/TestSize000123.log +534 -0
  128. data/examples/logs/TestSize000124.log +534 -0
  129. data/examples/logs/TestSize000125.log +534 -0
  130. data/examples/logs/TestSize000126.log +534 -0
  131. data/examples/logs/TestSize000127.log +534 -0
  132. data/examples/logs/TestSize000128.log +534 -0
  133. data/examples/logs/TestSize000129.log +534 -0
  134. data/examples/logs/TestSize000130.log +534 -0
  135. data/examples/logs/TestSize000131.log +534 -0
  136. data/examples/logs/TestSize000132.log +534 -0
  137. data/examples/logs/TestSize000133.log +534 -0
  138. data/examples/logs/TestSize000134.log +534 -0
  139. data/examples/logs/TestSize000135.log +534 -0
  140. data/examples/logs/TestSize000136.log +534 -0
  141. data/examples/logs/TestSize000137.log +534 -0
  142. data/examples/logs/TestSize000138.log +534 -0
  143. data/examples/logs/TestSize000139.log +534 -0
  144. data/examples/logs/TestSize000140.log +534 -0
  145. data/examples/logs/TestSize000141.log +534 -0
  146. data/examples/logs/TestSize000142.log +534 -0
  147. data/examples/logs/TestSize000143.log +534 -0
  148. data/examples/logs/TestSize000144.log +534 -0
  149. data/examples/logs/TestSize000145.log +534 -0
  150. data/examples/logs/TestSize000146.log +534 -0
  151. data/examples/logs/TestSize000147.log +534 -0
  152. data/examples/logs/TestSize000148.log +534 -0
  153. data/examples/logs/TestSize000149.log +534 -0
  154. data/examples/logs/TestSize000150.log +534 -0
  155. data/examples/logs/TestSize000151.log +534 -0
  156. data/examples/logs/TestSize000152.log +534 -0
  157. data/examples/logs/TestSize000153.log +534 -0
  158. data/examples/logs/TestSize000154.log +534 -0
  159. data/examples/logs/TestSize000155.log +534 -0
  160. data/examples/logs/TestSize000156.log +534 -0
  161. data/examples/logs/TestSize000157.log +534 -0
  162. data/examples/logs/TestSize000158.log +534 -0
  163. data/examples/logs/TestSize000159.log +534 -0
  164. data/examples/logs/TestSize000160.log +534 -0
  165. data/examples/logs/TestSize000161.log +534 -0
  166. data/examples/logs/TestSize000162.log +534 -0
  167. data/examples/logs/TestSize000163.log +534 -0
  168. data/examples/logs/TestSize000164.log +534 -0
  169. data/examples/logs/TestSize000165.log +534 -0
  170. data/examples/logs/TestSize000166.log +534 -0
  171. data/examples/logs/TestSize000167.log +534 -0
  172. data/examples/logs/TestSize000168.log +534 -0
  173. data/examples/logs/TestSize000169.log +534 -0
  174. data/examples/logs/TestSize000170.log +534 -0
  175. data/examples/logs/TestSize000171.log +534 -0
  176. data/examples/logs/TestSize000172.log +534 -0
  177. data/examples/logs/TestSize000173.log +534 -0
  178. data/examples/logs/TestSize000174.log +534 -0
  179. data/examples/logs/TestSize000175.log +534 -0
  180. data/examples/logs/TestSize000176.log +534 -0
  181. data/examples/logs/TestSize000177.log +534 -0
  182. data/examples/logs/TestSize000178.log +534 -0
  183. data/examples/logs/TestSize000179.log +534 -0
  184. data/examples/logs/TestSize000180.log +534 -0
  185. data/examples/logs/TestSize000181.log +534 -0
  186. data/examples/logs/TestSize000182.log +534 -0
  187. data/examples/logs/TestSize000183.log +534 -0
  188. data/examples/logs/TestSize000184.log +534 -0
  189. data/examples/logs/TestSize000185.log +534 -0
  190. data/examples/logs/TestSize000186.log +534 -0
  191. data/examples/logs/TestSize000187.log +312 -0
  192. data/examples/logs/TestTime000001.log +11 -0
  193. data/examples/logs/TestTime000002.log +10 -0
  194. data/examples/logs/TestTime000003.log +10 -0
  195. data/examples/logs/TestTime000004.log +10 -0
  196. data/examples/logs/TestTime000005.log +10 -0
  197. data/examples/logs/TestTime000006.log +10 -0
  198. data/examples/logs/TestTime000007.log +10 -0
  199. data/examples/logs/TestTime000008.log +10 -0
  200. data/examples/logs/TestTime000009.log +10 -0
  201. data/examples/logs/TestTime000010.log +9 -0
  202. data/src/log4r.rb +5 -2
  203. data/src/log4r/GDC.rb +40 -0
  204. data/src/log4r/MDC.rb +59 -0
  205. data/src/log4r/NDC.rb +87 -0
  206. data/src/log4r/formatter/patternformatter.rb +11 -6
  207. data/src/log4r/outputter/bob.patch +25 -0
  208. data/src/log4r/outputter/emailoutputter.rb.orig +118 -0
  209. data/src/log4r/outputter/emailoutputter.rb.rej +46 -0
  210. data/src/log4r/outputter/fileoutputter.rb +12 -5
  211. data/src/log4r/outputter/rollingfileoutputter.rb +8 -3
  212. data/src/log4r/outputter/win32eventoutputter.rb +136 -0
  213. data/src/log4r/rdoc/GDC +14 -0
  214. data/src/log4r/rdoc/MDC +16 -0
  215. data/src/log4r/rdoc/NDC +41 -0
  216. data/src/log4r/rdoc/win32eventoutputter +7 -0
  217. data/src/log4r/repository.rb +73 -52
  218. data/src/log4r/yamlconfigurator.rb +0 -0
  219. data/tests/testGDC.rb +26 -0
  220. data/tests/testMDC.rb +21 -0
  221. data/tests/testNDC.rb +27 -0
  222. data/tests/testthreads.rb +23 -0
  223. metadata +215 -98
  224. data/src/doc/Log4r.html +0 -392
  225. data/src/doc/Log4r/BasicFormatter.html +0 -370
  226. data/src/doc/Log4r/ConfigError.html +0 -207
  227. data/src/doc/Log4r/Configurator.html +0 -1050
  228. data/src/doc/Log4r/DateFileOutputter.html +0 -454
  229. data/src/doc/Log4r/DefaultFormatter.html +0 -205
  230. data/src/doc/Log4r/EmailOutputter.html +0 -636
  231. data/src/doc/Log4r/FileOutputter.html +0 -321
  232. data/src/doc/Log4r/Formatter.html +0 -291
  233. data/src/doc/Log4r/IOOutputter.html +0 -392
  234. data/src/doc/Log4r/Log4rConfig.html +0 -193
  235. data/src/doc/Log4r/Log4rTools.html +0 -370
  236. data/src/doc/Log4r/LogEvent.html +0 -360
  237. data/src/doc/Log4r/LogServer.html +0 -322
  238. data/src/doc/Log4r/Logger.html +0 -1132
  239. data/src/doc/Log4r/Logger/LoggerFactory.html +0 -200
  240. data/src/doc/Log4r/Logger/Repository.html +0 -207
  241. data/src/doc/Log4r/ObjectFormatter.html +0 -262
  242. data/src/doc/Log4r/Outputter.html +0 -910
  243. data/src/doc/Log4r/Outputter/OutputterFactory.html +0 -200
  244. data/src/doc/Log4r/Outputter/consoleoutputters_rb.html +0 -57
  245. data/src/doc/Log4r/Outputter/datefileoutputter_rb.html +0 -93
  246. data/src/doc/Log4r/Outputter/emailoutputter_rb.html +0 -179
  247. data/src/doc/Log4r/Outputter/fileoutputter_rb.html +0 -64
  248. data/src/doc/Log4r/Outputter/iooutputter_rb.html +0 -59
  249. data/src/doc/Log4r/Outputter/outputter_rb.html +0 -222
  250. data/src/doc/Log4r/Outputter/outputterfactory_rb.html +0 -62
  251. data/src/doc/Log4r/Outputter/remoteoutputter_rb.html +0 -59
  252. data/src/doc/Log4r/Outputter/rollingfileoutputter_rb.html +0 -66
  253. data/src/doc/Log4r/Outputter/staticoutputter_rb.html +0 -55
  254. data/src/doc/Log4r/Outputter/syslogoutputter_rb.html +0 -110
  255. data/src/doc/Log4r/Outputter/tst_rb.html +0 -54
  256. data/src/doc/Log4r/PatternFormatter.html +0 -422
  257. data/src/doc/Log4r/ROMPClient.html +0 -193
  258. data/src/doc/Log4r/ROMPServer.html +0 -193
  259. data/src/doc/Log4r/RemoteOutputter.html +0 -384
  260. data/src/doc/Log4r/RollingFileOutputter.html +0 -528
  261. data/src/doc/Log4r/RootLogger.html +0 -512
  262. data/src/doc/Log4r/SimpleFormatter.html +0 -258
  263. data/src/doc/Log4r/StderrOutputter.html +0 -250
  264. data/src/doc/Log4r/StdoutOutputter.html +0 -250
  265. data/src/doc/Log4r/SyslogOutputter.html +0 -533
  266. data/src/doc/Log4r/YamlConfigurator.html +0 -948
  267. data/src/doc/Log4r/base_rb.html +0 -57
  268. data/src/doc/Log4r/config_rb.html +0 -76
  269. data/src/doc/Log4r/configurator_rb.html +0 -370
  270. data/src/doc/Log4r/formatter/formatter_rb.html +0 -121
  271. data/src/doc/Log4r/formatter/patternformatter_rb.html +0 -233
  272. data/src/doc/Log4r/lib/drbloader_rb.html +0 -57
  273. data/src/doc/Log4r/lib/xmlloader_rb.html +0 -57
  274. data/src/doc/Log4r/logevent_rb.html +0 -55
  275. data/src/doc/Log4r/logger_rb.html +0 -293
  276. data/src/doc/Log4r/loggerfactory_rb.html +0 -66
  277. data/src/doc/Log4r/logserver_rb.html +0 -161
  278. data/src/doc/Log4r/rdoc/configurator.html +0 -444
  279. data/src/doc/Log4r/rdoc/emailoutputter.html +0 -261
  280. data/src/doc/Log4r/rdoc/formatter.html +0 -200
  281. data/src/doc/Log4r/rdoc/log4r.html +0 -268
  282. data/src/doc/Log4r/rdoc/logger.html +0 -364
  283. data/src/doc/Log4r/rdoc/logserver.html +0 -247
  284. data/src/doc/Log4r/rdoc/outputter.html +0 -295
  285. data/src/doc/Log4r/rdoc/patternformatter.html +0 -313
  286. data/src/doc/Log4r/rdoc/syslogoutputter.html +0 -179
  287. data/src/doc/Log4r/rdoc/yamlconfigurator.html +0 -169
  288. data/src/doc/Log4r/repository_rb.html +0 -62
  289. data/src/doc/Log4r/staticlogger_rb.html +0 -55
  290. data/src/doc/Log4r/yamlconfigurator_rb.html +0 -95
  291. data/src/doc/REXML.html +0 -193
  292. data/src/doc/created.rid +0 -1
  293. data/src/doc/images/brick.png +0 -0
  294. data/src/doc/images/brick_link.png +0 -0
  295. data/src/doc/images/bug.png +0 -0
  296. data/src/doc/images/bullet_black.png +0 -0
  297. data/src/doc/images/bullet_toggle_minus.png +0 -0
  298. data/src/doc/images/bullet_toggle_plus.png +0 -0
  299. data/src/doc/images/date.png +0 -0
  300. data/src/doc/images/find.png +0 -0
  301. data/src/doc/images/loadingAnimation.gif +0 -0
  302. data/src/doc/images/macFFBgHack.png +0 -0
  303. data/src/doc/images/package.png +0 -0
  304. data/src/doc/images/page_green.png +0 -0
  305. data/src/doc/images/page_white_text.png +0 -0
  306. data/src/doc/images/page_white_width.png +0 -0
  307. data/src/doc/images/plugin.png +0 -0
  308. data/src/doc/images/ruby.png +0 -0
  309. data/src/doc/images/tag_green.png +0 -0
  310. data/src/doc/images/wrench.png +0 -0
  311. data/src/doc/images/wrench_orange.png +0 -0
  312. data/src/doc/images/zoom.png +0 -0
  313. data/src/doc/index.html +0 -384
  314. data/src/doc/js/darkfish.js +0 -116
  315. data/src/doc/js/jquery.js +0 -32
  316. data/src/doc/js/quicksearch.js +0 -114
  317. data/src/doc/js/thickbox-compressed.js +0 -10
  318. data/src/doc/rdoc.css +0 -696
  319. data/src/log4r/outputter/tst.rb +0 -8
@@ -1,6 +1,6 @@
1
1
 
2
2
  # :nodoc:
3
- # Version:: $Id: rollingfileoutputter.rb,v 1.1.1.1 2004/03/19 03:31:10 fando Exp $
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
- @out.close
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
@@ -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
+
@@ -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.
@@ -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
+
@@ -1,65 +1,86 @@
1
1
  # :nodoc:
2
- # Version:: $Id: repository.rb,v 1.1.1.1 2004/03/19 03:31:07 fando Exp $
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
- # The repository stores a Hash of loggers keyed to their fullnames and
10
- # provides a few functions to reduce the code bloat in log4r/logger.rb.
11
- # This class is supposed to be transparent to end users, hence it is
12
- # a class within Logger. If anyone knows how to make this private,
13
- # let me know.
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
- def self.[](fullname)
24
- instance.loggers[fullname]
25
- end
25
+ class Repository # :nodoc:
26
+ include Singleton
27
+ attr_reader :loggers
26
28
 
27
- def self.[]=(fullname, logger)
28
- instance.loggers[fullname] = logger
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
- # when new loggers are introduced, they may get inserted into
41
- # an existing inheritance tree. this method
42
- # updates the children of a logger to link their new parent
43
- def self.reassign_any_children(parent)
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
- end
49
-
50
- # looks for the first defined logger in a child's path
51
- # or nil if none found (which will then be rootlogger)
52
- def self.find_ancestor(path)
53
- arr = path.split Log4rConfig::LoggerPathDelimiter
54
- logger = nil
55
- while arr.size > 0 do
56
- logger = Repository[arr.join(Log4rConfig::LoggerPathDelimiter)]
57
- break unless logger.nil?
58
- arr.pop
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
- end
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