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.
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