green_syslogger 0.2.0 → 0.2.1
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/Manifest +8 -1
- data/README.md +12 -4
- data/Rakefile +1 -1
- data/experimental_test/benchmarks.txt +40 -0
- data/experimental_test/green_syslogger_benchmarks_test.rb +61 -0
- data/experimental_test/green_syslogger_mutithread_test.rb +74 -0
- data/experimental_test/ruby_prof_buffered_logger.txt +56 -0
- data/experimental_test/ruby_prof_green_syslogger.txt +79 -0
- data/experimental_test/ruby_prof_syslog_logger.txt +63 -0
- data/experimental_test/testing_singleton_methods_with_variable.rb +33 -0
- data/green_syslogger.gemspec +4 -4
- data/lib/green_syslogger.rb +70 -56
- data/test/green_syslogger_test.rb +23 -17
- data/test/test_helper.rb +12 -0
- metadata +14 -5
data/Manifest
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
Manifest
|
2
2
|
README.md
|
3
3
|
Rakefile
|
4
|
-
|
4
|
+
experimental_test/benchmarks.txt
|
5
|
+
experimental_test/green_syslogger_benchmarks_test.rb
|
6
|
+
experimental_test/green_syslogger_mutithread_test.rb
|
7
|
+
experimental_test/ruby_prof_buffered_logger.txt
|
8
|
+
experimental_test/ruby_prof_green_syslogger.txt
|
9
|
+
experimental_test/ruby_prof_syslog_logger.txt
|
10
|
+
experimental_test/testing_singleton_methods_with_variable.rb
|
5
11
|
lib/green_syslogger.rb
|
6
12
|
test/green_syslogger_test.rb
|
13
|
+
test/test_helper.rb
|
data/README.md
CHANGED
@@ -22,10 +22,12 @@ Custom Rails Logger
|
|
22
22
|
logger = GreenSyslogger.new
|
23
23
|
logger.debug( 'debug message' )
|
24
24
|
|
25
|
-
To
|
26
|
-
|
25
|
+
To configure it on the <RAILS_ENVIRONMENT>.rb:
|
26
|
+
|
27
|
+
config.logger = GreenSyslogger.new([<default tag>], [<facility>], [<level>])
|
27
28
|
|
28
29
|
By default
|
30
|
+
|
29
31
|
GreenSyslogger.new('rails', 'local2', :debug)
|
30
32
|
|
31
33
|
Example for Rails configuration:
|
@@ -40,9 +42,9 @@ To use it:
|
|
40
42
|
logger.debug("my debug message")
|
41
43
|
logger.error("my error message")
|
42
44
|
|
43
|
-
To
|
45
|
+
To use another tag:
|
44
46
|
|
45
|
-
logger.custom("my custom message", <tag
|
47
|
+
logger.custom("my custom message", [<tag>], [<level>])
|
46
48
|
|
47
49
|
By default:
|
48
50
|
|
@@ -54,12 +56,18 @@ In the `GreenSyslogger.custom` there are two reopen connections just to be allow
|
|
54
56
|
|
55
57
|
There is not `GreenSyslogger.silencer`. Maybe is a good idea to implemented.
|
56
58
|
|
59
|
+
Benchmarking to compare with other logger libraries and to see with is the cost of the `reopen` calls.
|
60
|
+
|
57
61
|
## Change log
|
58
62
|
|
59
63
|
### v 0.2.0
|
60
64
|
|
61
65
|
* Compatible with `config.logger.auto_flushing = false` so every log of a simple request will be written on an atomic way
|
62
66
|
|
67
|
+
### v 0.2.1
|
68
|
+
|
69
|
+
* Avoiding Thread blocking
|
70
|
+
* Optimization
|
63
71
|
|
64
72
|
## Credits
|
65
73
|
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('green_syslogger', '0.2.
|
5
|
+
Echoe.new('green_syslogger', '0.2.1') do |p|
|
6
6
|
p.description = "Syslogger that makes your life greener"
|
7
7
|
p.url = "https://github.com/SponsorPay/GreenSyslogger"
|
8
8
|
p.author = "Fernando Guillen <http://fernandoguillen.info> & Juan Jose Vidal <@j2vidal>"
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# normal
|
2
|
+
green_syslogger_buffered: 2.640000 0.890000 3.530000 ( 3.668854)
|
3
|
+
|
4
|
+
# with copy_buffer
|
5
|
+
green_syslogger_buffered: 2.620000 0.890000 3.510000 ( 3.607195)
|
6
|
+
|
7
|
+
# regex comprobation before .gsub!
|
8
|
+
green_syslogger_buffered: 2.530000 0.890000 3.420000 ( 3.460330)
|
9
|
+
|
10
|
+
# with the DATE_FORMAT constant
|
11
|
+
green_syslogger_buffered: 2.150000 0.870000 3.020000 ( 3.766759)
|
12
|
+
(slower!)
|
13
|
+
|
14
|
+
# without the 'auto_flush' method call
|
15
|
+
green_syslogger_buffered: 2.130000 0.860000 2.990000 ( 3.796795)
|
16
|
+
(no changes!!)
|
17
|
+
|
18
|
+
# MAX_BUFFER=5
|
19
|
+
green_syslogger_buffered: 2.220000 0.870000 3.090000 ( 3.590922)
|
20
|
+
(faster!)
|
21
|
+
|
22
|
+
# MAX_BUFFER=1
|
23
|
+
green_syslogger_buffered: 2.560000 0.910000 3.470000 ( 4.080794)
|
24
|
+
(slower!)
|
25
|
+
|
26
|
+
# more strings to Constants
|
27
|
+
green_syslogger_buffered: 2.140000 0.860000 3.000000 ( 3.641767)
|
28
|
+
(faster!)
|
29
|
+
|
30
|
+
# without .strftime
|
31
|
+
green_syslogger_buffered: 2.190000 0.860000 3.050000 ( 3.683527)
|
32
|
+
(no changes!)
|
33
|
+
|
34
|
+
# without print Time
|
35
|
+
green_syslogger_buffered: 1.850000 0.880000 2.730000 ( 3.428737)
|
36
|
+
(faster!)
|
37
|
+
|
38
|
+
# without the message = #message
|
39
|
+
green_syslogger_buffered: 1.780000 0.890000 2.670000 ( 3.470216)
|
40
|
+
(no changes!)
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../test/test_helper"
|
2
|
+
|
3
|
+
class GreenSysloggerBenchmarksTest < Test::Unit::TestCase
|
4
|
+
# def test_all_loggers
|
5
|
+
# logger = Logger.new( "/tmp/log.txt" )
|
6
|
+
# syslog_logger = SyslogLogger.new
|
7
|
+
# buffered_logger = ActiveSupport::BufferedLogger.new( "/tmp/log2.txt" )
|
8
|
+
# buffered_logger.auto_flushing = false
|
9
|
+
#
|
10
|
+
# n = 50000
|
11
|
+
#
|
12
|
+
# Benchmark.bm(7) do |x|
|
13
|
+
# x.report("logger:") { n.times do ; logger.debug('message'); end }
|
14
|
+
# x.report("syslog_logger:") { n.times do ; syslog_logger.debug('message'); end }
|
15
|
+
# x.report("buffered_logger:") { n.times do ; buffered_logger.debug('message'); end }
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# SyslogLogger::SYSLOG.close
|
19
|
+
#
|
20
|
+
# green_syslogger = GreenSyslogger.new
|
21
|
+
# Benchmark.bm(7) do |x|
|
22
|
+
# x.report("gren_syslogger:") { n.times do ; green_syslogger.debug('message'); end }
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# green_syslogger.auto_flushing = false
|
26
|
+
# Benchmark.bm(7) do |x|
|
27
|
+
# x.report("green_syslogger_buffered:") { n.times do ; green_syslogger.debug('message'); end }
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# Benchmark.bm(7) do |x|
|
31
|
+
# x.report("gren_syslogger_custom:") { n.times do ; green_syslogger.custom('message'); end }
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# green_syslogger.close
|
35
|
+
# end
|
36
|
+
|
37
|
+
def test_only_green_syslogger
|
38
|
+
n = 50000
|
39
|
+
green_syslogger = GreenSyslogger.new
|
40
|
+
green_syslogger.auto_flushing = false
|
41
|
+
|
42
|
+
Benchmark.bm(7) do |x|
|
43
|
+
x.report("green_syslogger_buffered:") { n.times do ; green_syslogger.debug('message'); end }
|
44
|
+
end
|
45
|
+
|
46
|
+
green_syslogger.close
|
47
|
+
end
|
48
|
+
|
49
|
+
# def test_only_bufffered_syslogger
|
50
|
+
# n = 50000
|
51
|
+
# logger = BufferedSyslogger.new
|
52
|
+
# logger.level = Logger::DEBUG
|
53
|
+
#
|
54
|
+
# Benchmark.bm(7) do |x|
|
55
|
+
# x.report("buffered_syslogger:") { n.times do ; logger.debug('message'); end }
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# logger.close
|
59
|
+
# end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../test/test_helper"
|
2
|
+
|
3
|
+
class GreenSysloggerMultithreadTest < Test::Unit::TestCase
|
4
|
+
def test_multithread
|
5
|
+
flushing_times = 5
|
6
|
+
flusing_at = 5
|
7
|
+
|
8
|
+
t1 =
|
9
|
+
Thread.new do
|
10
|
+
green_syslogger = GreenSyslogger.new
|
11
|
+
green_syslogger.auto_flushing = false
|
12
|
+
|
13
|
+
(1..flushing_times).each do |n|
|
14
|
+
(1..flusing_at).each do |nn|
|
15
|
+
green_syslogger.debug("thread 1 #{n}-#{nn}")
|
16
|
+
end
|
17
|
+
green_syslogger.flush
|
18
|
+
sleep(0.5)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
t2 =
|
23
|
+
Thread.new do
|
24
|
+
green_syslogger = GreenSyslogger.new
|
25
|
+
green_syslogger.auto_flushing = false
|
26
|
+
(1..flushing_times).each do |n|
|
27
|
+
(1..flusing_at).each do |nn|
|
28
|
+
green_syslogger.debug("thread 2 #{n}-#{nn}")
|
29
|
+
end
|
30
|
+
green_syslogger.flush
|
31
|
+
sleep(1)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
while( t1.alive? || t2.alive? ) do
|
36
|
+
sleep(1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# def test_multithread_syslog_logger
|
41
|
+
# flushing_times = 10
|
42
|
+
# flusing_at = 10
|
43
|
+
#
|
44
|
+
# Thread.new do
|
45
|
+
# puts "init thread 1---"
|
46
|
+
# green_syslogger = SyslogLogger.new
|
47
|
+
#
|
48
|
+
# (1..flushing_times).each do |n|
|
49
|
+
# (1..flusing_at).each do |nn|
|
50
|
+
# green_syslogger.debug("thread 1 #{n}-#{nn}")
|
51
|
+
# end
|
52
|
+
# # green_syslogger.flush
|
53
|
+
# puts "flushed thread 1"
|
54
|
+
# sleep(1)
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# Thread.new do
|
59
|
+
# green_syslogger = SyslogLogger.new
|
60
|
+
# (1..flushing_times).each do |n|
|
61
|
+
# (1..flusing_at).each do |nn|
|
62
|
+
# puts "XXX: thread 2 debug"
|
63
|
+
# green_syslogger.debug("thread 2 #{n}-#{nn}")
|
64
|
+
# end
|
65
|
+
# puts "flushing thread 2"
|
66
|
+
# # green_syslogger.flush
|
67
|
+
# puts "flushed thread 2"
|
68
|
+
# sleep(1)
|
69
|
+
# end
|
70
|
+
# end
|
71
|
+
#
|
72
|
+
# sleep(100)
|
73
|
+
# end
|
74
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
$ ruby-prof green_syslogger_benchmarks.rb
|
2
|
+
user system total real
|
3
|
+
buffered_logger: 1.420000 1.640000 3.060000 ( 3.073966)
|
4
|
+
Thread ID: 2148237740
|
5
|
+
Total: 3.096940
|
6
|
+
|
7
|
+
%self total self wait child calls name
|
8
|
+
29.93 2.75 0.93 0.00 1.83 50000 ActiveSupport::BufferedLogger#add
|
9
|
+
13.99 0.86 0.43 0.00 0.43 100100 ActiveSupport::BufferedLogger#buffer
|
10
|
+
10.02 1.12 0.31 0.00 0.81 50000 ActiveSupport::BufferedLogger#auto_flush
|
11
|
+
7.00 0.32 0.22 0.00 0.10 100218 Hash#[]
|
12
|
+
5.76 2.93 0.18 0.00 2.75 50000 ActiveSupport::BufferedLogger#debug
|
13
|
+
4.19 3.06 0.13 0.00 2.93 1 Integer#times
|
14
|
+
3.62 0.28 0.11 0.00 0.17 84 Array#each
|
15
|
+
3.40 0.11 0.11 0.00 0.00 100150 <Class::Thread>#current
|
16
|
+
3.34 0.10 0.10 0.00 0.00 100200 Kernel#hash
|
17
|
+
3.29 0.16 0.10 0.00 0.06 50000 StringIO#<<
|
18
|
+
1.85 0.06 0.06 0.00 0.00 50012 Fixnum#>
|
19
|
+
1.83 0.06 0.06 0.00 0.00 50001 Array#<<
|
20
|
+
1.81 0.06 0.06 0.00 0.00 50000 StringIO#write
|
21
|
+
1.80 0.06 0.06 0.00 0.00 50047 String#to_s
|
22
|
+
1.80 0.06 0.06 0.00 0.00 50000 String#[]
|
23
|
+
1.76 0.05 0.05 0.00 0.00 50024 Array#size
|
24
|
+
1.75 0.05 0.05 0.00 0.00 50032 Fixnum#==
|
25
|
+
1.66 0.05 0.05 0.00 0.00 50000 Fixnum#>=
|
26
|
+
0.31 0.01 0.01 0.00 0.01 18 Kernel#gem_original_require
|
27
|
+
0.15 0.00 0.00 0.00 0.00 33 <Class::Dir>#[]
|
28
|
+
0.13 0.01 0.00 0.00 0.00 44 Array#select
|
29
|
+
0.06 0.00 0.00 0.00 0.00 53 IO#write
|
30
|
+
0.06 0.00 0.00 0.00 0.00 1572 String#=~
|
31
|
+
0.04 0.27 0.00 0.00 0.27 52 Mutex#synchronize
|
32
|
+
0.02 3.07 0.00 0.00 3.07 1 <Class::GreenSysloggerBenchmarks>#do
|
33
|
+
0.02 0.01 0.00 0.00 0.01 33 Gem::GemPathSearcher#matching_files
|
34
|
+
0.02 0.00 0.00 0.00 0.00 94 String#gsub!
|
35
|
+
0.02 0.00 0.00 0.00 0.00 29 ActiveSupport::Inflector#underscore
|
36
|
+
0.02 0.00 0.00 0.00 0.00 30 ActiveSupport::Autoload#autoload
|
37
|
+
0.01 0.00 0.00 0.00 0.00 12 Integer#upto
|
38
|
+
0.01 0.01 0.00 0.00 0.01 6 <Module::Gem>#activate
|
39
|
+
0.01 0.00 0.00 0.00 0.00 82 Class#new
|
40
|
+
0.01 0.00 0.00 0.00 0.00 250 Kernel#instance_variables
|
41
|
+
0.01 0.00 0.00 0.00 0.00 10 Module#class_eval
|
42
|
+
0.01 0.00 0.00 0.00 0.00 223 Module#method_added
|
43
|
+
0.01 0.00 0.00 0.00 0.00 258 Array#include?
|
44
|
+
0.01 0.00 0.00 0.00 0.00 50 ActiveSupport::BufferedLogger#clear_buffer
|
45
|
+
0.01 0.00 0.00 0.00 0.00 12 Gem::Version#<=>
|
46
|
+
0.01 3.10 0.00 0.00 3.10 1 Kernel#load
|
47
|
+
0.01 0.01 0.00 0.00 0.01 6 Gem::SourceIndex#search
|
48
|
+
0.01 0.00 0.00 0.00 0.00 96 Hash#[]=
|
49
|
+
0.01 0.00 0.00 0.00 0.00 6 Kernel#eval
|
50
|
+
0.01 0.00 0.00 0.00 0.00 50 StringIO#initialize
|
51
|
+
0.01 0.27 0.00 0.00 0.27 50 ActiveSupport::BufferedLogger#flush
|
52
|
+
0.01 0.00 0.00 0.00 0.00 76 Gem::Version#segments
|
53
|
+
0.01 0.00 0.00 0.00 0.00 8 Gem::Dependency#initialize
|
54
|
+
0.01 0.00 0.00 0.00 0.00 50 Hash#delete
|
55
|
+
0.01 0.00 0.00 0.00 0.00 140 Module#===
|
56
|
+
0.00 0.01 0.00 0.00 0.01 33 Gem::Ge
|
@@ -0,0 +1,79 @@
|
|
1
|
+
$ ruby-prof green_syslogger_benchmarks.rb
|
2
|
+
user system total real
|
3
|
+
gren_syslogger_buffered: 4.180000 3.630000 7.810000 ( 7.928079)
|
4
|
+
Thread ID: 2148237740
|
5
|
+
Total: 7.846172
|
6
|
+
|
7
|
+
%self total self wait child calls name
|
8
|
+
27.15 2.13 2.13 0.00 0.00 50000 <Module::<#Syslog: opened=true, ident="rails", options=1, facility=144, mask=255>>#debug
|
9
|
+
15.62 4.19 1.23 0.00 2.96 131 Array#each
|
10
|
+
10.75 7.43 0.84 0.00 6.58 50000 GreenSyslogger#add
|
11
|
+
5.46 0.85 0.43 0.00 0.43 100100 GreenSyslogger#buffer
|
12
|
+
4.91 0.49 0.39 0.00 0.10 250214 Hash#[]
|
13
|
+
4.87 0.38 0.38 0.00 0.00 350046 Array#[]
|
14
|
+
4.81 0.65 0.38 0.00 0.27 50000 GreenSyslogger#level?
|
15
|
+
4.22 5.04 0.33 0.00 4.71 50000 GreenSyslogger#auto_flush
|
16
|
+
3.54 0.28 0.28 0.00 0.00 50000 Time#strftime
|
17
|
+
3.34 7.69 0.26 0.00 7.43 50000 GreenSyslogger#debug
|
18
|
+
2.06 0.30 0.16 0.00 0.14 50002 <Class::Time>#now
|
19
|
+
1.84 2.27 0.14 0.00 2.13 50000 Kernel#send
|
20
|
+
1.55 7.81 0.12 0.00 7.69 1 Integer#times
|
21
|
+
1.40 0.11 0.11 0.00 0.00 50094 String#gsub!
|
22
|
+
1.35 0.11 0.11 0.00 0.00 100200 <Class::Thread>#current
|
23
|
+
1.33 0.10 0.10 0.00 0.00 100000 Fixnum#>=
|
24
|
+
1.32 0.10 0.10 0.00 0.00 100300 Kernel#hash
|
25
|
+
1.05 0.08 0.08 0.00 0.00 50002 <Class::Time>#allocate
|
26
|
+
0.77 0.06 0.06 0.00 0.00 50092 String#==
|
27
|
+
0.75 0.06 0.06 0.00 0.00 50002 Time#initialize
|
28
|
+
0.73 0.06 0.06 0.00 0.00 50001 Array#<<
|
29
|
+
0.69 0.05 0.05 0.00 0.00 50024 Array#size
|
30
|
+
0.13 0.01 0.01 0.00 0.01 16 Kernel#gem_original_require
|
31
|
+
0.08 0.01 0.01 0.00 0.00 33 <Class::Dir>#[]
|
32
|
+
0.05 0.01 0.00 0.00 0.00 44 Array#select
|
33
|
+
0.02 0.00 0.00 0.00 0.00 1572 String#=~
|
34
|
+
0.01 4.17 0.00 0.00 4.17 102 Mutex#synchronize
|
35
|
+
0.01 4.18 0.00 0.00 4.18 100 GreenSyslogger#flush
|
36
|
+
0.01 0.00 0.00 0.00 0.00 100 GreenSyslogger#clear_buffer
|
37
|
+
0.01 0.01 0.00 0.00 0.01 33 Gem::GemPathSearcher#matching_files
|
38
|
+
0.01 0.00 0.00 0.00 0.00 29 ActiveSupport::Inflector#underscore
|
39
|
+
0.01 0.00 0.00 0.00 0.00 30 ActiveSupport::Autoload#autoload
|
40
|
+
0.01 7.85 0.00 0.00 7.85 1 Kernel#load
|
41
|
+
0.01 0.00 0.00 0.00 0.00 146 Hash#[]=
|
42
|
+
0.01 0.00 0.00 0.00 0.00 100 Hash#delete
|
43
|
+
0.01 0.00 0.00 0.00 0.00 12 Integer#upto
|
44
|
+
0.01 0.01 0.00 0.00 0.01 6 <Module::Gem>#activate
|
45
|
+
0.00 0.00 0.00 0.00 0.00 250 Kernel#instance_variables
|
46
|
+
0.00 0.00 0.00 0.00 0.00 258 Array#include?
|
47
|
+
0.00 0.00 0.00 0.00 0.00 12 Gem::Version#<=>
|
48
|
+
0.00 0.00 0.00 0.00 0.00 192 Module#method_added
|
49
|
+
0.00 0.01 0.00 0.00 0.01 6 Gem::SourceIndex#search
|
50
|
+
0.00 0.00 0.00 0.00 0.00 107 Hash#default
|
51
|
+
0.00 0.00 0.00 0.00 0.00 6 Kernel#eval
|
52
|
+
0.00 0.00 0.00 0.00 0.00 76 Gem::Version#segments
|
53
|
+
0.00 0.00 0.00 0.00 0.00 8 Gem::Dependency#initialize
|
54
|
+
0.00 0.00 0.00 0.00 0.00 6 Hash#values
|
55
|
+
0.00 0.00 0.00 0.00 0.00 140 Module#===
|
56
|
+
0.00 0.03 0.00 0.00 0.03 14 Kernel#require
|
57
|
+
0.00 0.01 0.00 0.00 0.01 33 Gem::GemPathSearcher#matching_file?
|
58
|
+
0.00 0.00 0.00 0.00 0.00 27 Class#new
|
59
|
+
0.00 0.00 0.00 0.00 0.00 12 Module#define_method
|
60
|
+
0.00 0.00 0.00 0.00 0.00 35 Kernel#dup
|
61
|
+
0.00 0.00 0.00 0.00 0.00 53 <Class::File>#join
|
62
|
+
0.00 0.00 0.00 0.00 0.00 7 Module#attr_accessor
|
63
|
+
0.00 0.00 0.00 0.00 0.00 3 Hash#each_key
|
64
|
+
0.00 0.00 0.00 0.00 0.00 11 Array#map
|
65
|
+
0.00 0.00 0.00 0.00 0.00 10 Gem::Specification#full_gem_path
|
66
|
+
0.00 0.00 0.00 0.00 0.00 6 <Class::SyslogLogger>#make_methods
|
67
|
+
0.00 0.00 0.00 0.00 0.00 6 Gem::Requirement#initialize
|
68
|
+
0.00 0.00 0.00 0.00 0.00 66 Symbol#to_s
|
69
|
+
0.00 0.00 0.00 0.00 0.00 1 <Module::<#Syslog: opened=true, ident="rails", options=1, facility=144, mask=255>>#open
|
70
|
+
0.00 0.00 0.00 0.00 0.00 10 Gem::Specification#full_name
|
71
|
+
0.00 0.00 0.00 0.00 0.00 5 Array#index
|
72
|
+
0.00 0.00 0.00 0.00 0.00 13 Module#attr_reader
|
73
|
+
0.00 0.00 0.00 0.00 0.00 33 <Module::Gem>#suffix_pattern
|
74
|
+
0.00 0.00 0.00 0.00 0.00 6 Gem::Version#initialize
|
75
|
+
0.00 0.00 0.00 0.00 0.00 10 Gem::Specification#installation_path
|
76
|
+
0.00 0.00 0.00 0.00 0.00 6 <Class::Gem::Requirement>#parse
|
77
|
+
0.00 0.00 0.00 0.00 0.00 1 ActiveSupport::Autoload#eager_autoload
|
78
|
+
0.00 0.00 0.00 0.00 0.00 10 <Class::File>#directory?
|
79
|
+
0.00 0.00 0.00 0.00 0.00 51 Arr
|
@@ -0,0 +1,63 @@
|
|
1
|
+
$ ruby-prof green_syslogger_benchmarks.rb
|
2
|
+
user system total real
|
3
|
+
syslog_logger: 2.230000 1.850000 4.080000 ( 4.161498)
|
4
|
+
Thread ID: 2148237740
|
5
|
+
Total: 4.119740
|
6
|
+
|
7
|
+
%self total self wait child calls name
|
8
|
+
51.96 2.14 2.14 0.00 0.00 50000 <Module::<#Syslog: opened=true, ident="rails", options=3, facility=8, mask=255>>#debug
|
9
|
+
15.05 1.18 0.62 0.00 0.56 50000 SyslogLogger#clean
|
10
|
+
12.78 3.90 0.53 0.00 3.37 50000 SyslogLogger#debug
|
11
|
+
4.47 4.08 0.18 0.00 3.90 1 Integer#times
|
12
|
+
4.31 0.29 0.18 0.00 0.11 50035 Kernel#dup
|
13
|
+
3.42 0.14 0.14 0.00 0.00 100094 String#gsub!
|
14
|
+
1.58 0.07 0.07 0.00 0.00 50006 String#strip!
|
15
|
+
1.42 0.06 0.06 0.00 0.00 50030 String#initialize_copy
|
16
|
+
1.41 0.06 0.06 0.00 0.00 50047 String#to_s
|
17
|
+
1.37 0.06 0.06 0.00 0.00 50030 <Class::String>#allocate
|
18
|
+
1.37 0.06 0.06 0.00 0.00 50000 Fixnum#<
|
19
|
+
0.26 0.01 0.01 0.00 0.01 18 Kernel#gem_original_require
|
20
|
+
0.12 0.00 0.00 0.00 0.00 33 <Class::Dir>#[]
|
21
|
+
0.10 0.01 0.00 0.00 0.00 44 Array#select
|
22
|
+
0.04 0.00 0.00 0.00 0.00 1572 String#=~
|
23
|
+
0.03 0.02 0.00 0.00 0.01 34 Array#each
|
24
|
+
0.02 4.09 0.00 0.00 4.09 1 <Class::GreenSysloggerBenchmarks>#do
|
25
|
+
0.01 0.01 0.00 0.00 0.01 33 Gem::GemPathSearcher#matching_files
|
26
|
+
0.01 0.00 0.00 0.00 0.00 10 Module#class_eval
|
27
|
+
0.01 0.00 0.00 0.00 0.00 29 ActiveSupport::Inflector#underscore
|
28
|
+
0.01 0.00 0.00 0.00 0.00 30 ActiveSupport::Autoload#autoload
|
29
|
+
0.01 0.00 0.00 0.00 0.00 12 Integer#upto
|
30
|
+
0.01 0.01 0.00 0.00 0.01 6 <Module::Gem>#activate
|
31
|
+
0.01 0.00 0.00 0.00 0.00 250 Kernel#instance_variables
|
32
|
+
0.01 0.00 0.00 0.00 0.00 223 Module#method_added
|
33
|
+
0.01 0.00 0.00 0.00 0.00 258 Array#include?
|
34
|
+
0.01 0.00 0.00 0.00 0.00 12 Gem::Version#<=>
|
35
|
+
0.01 4.12 0.00 0.00 4.12 1 Kernel#load
|
36
|
+
0.01 0.01 0.00 0.00 0.01 6 Gem::SourceIndex#search
|
37
|
+
0.01 0.00 0.00 0.00 0.00 6 Kernel#eval
|
38
|
+
0.00 0.00 0.00 0.00 0.00 76 Gem::Version#segments
|
39
|
+
0.00 0.00 0.00 0.00 0.00 32 Class#new
|
40
|
+
0.00 0.00 0.00 0.00 0.00 8 Gem::Dependency#initialize
|
41
|
+
0.00 0.00 0.00 0.00 0.00 140 Module#===
|
42
|
+
0.00 0.00 0.00 0.00 0.00 14 Module#attr_reader
|
43
|
+
0.00 0.00 0.00 0.00 0.00 118 Hash#[]
|
44
|
+
0.00 0.03 0.00 0.00 0.03 16 Kernel#require
|
45
|
+
0.00 0.01 0.00 0.00 0.01 33 Gem::GemPathSearcher#matching_file?
|
46
|
+
0.00 0.00 0.00 0.00 0.00 6 Hash#values
|
47
|
+
0.00 0.00 0.00 0.00 0.00 12 Module#define_method
|
48
|
+
0.00 0.00 0.00 0.00 0.00 53 <Class::File>#join
|
49
|
+
0.00 0.00 0.00 0.00 0.00 8 Module#attr_accessor
|
50
|
+
0.00 0.00 0.00 0.00 0.00 78 Symbol#to_s
|
51
|
+
0.00 0.00 0.00 0.00 0.00 3 Hash#each_key
|
52
|
+
0.00 0.00 0.00 0.00 0.00 92 String#==
|
53
|
+
0.00 0.00 0.00 0.00 0.00 11 Array#map
|
54
|
+
0.00 0.00 0.00 0.00 0.00 6 Gem::Requirement#initialize
|
55
|
+
0.00 0.00 0.00 0.00 0.00 10 Gem::Specification#full_gem_path
|
56
|
+
0.00 0.00 0.00 0.00 0.00 6 <Class::SyslogLogger>#make_methods
|
57
|
+
0.00 0.00 0.00 0.00 0.00 1 <Module::<#Syslog: opened=true, ident="rails", options=3, facility=8, mask=255>>#open
|
58
|
+
0.00 0.00 0.00 0.00 0.00 10 Gem::Specification#full_name
|
59
|
+
0.00 0.00 0.00 0.00 0.00 10 Gem::Specification#installation_path
|
60
|
+
0.00 0.00 0.00 0.00 0.00 33 <Module::Gem>#suffix_pattern
|
61
|
+
0.00 0.00 0.00 0.00 0.00 5 Array#index
|
62
|
+
0.00 0.00 0.00 0.00 0.00 6 Gem::Version#initialize
|
63
|
+
0.00 0.00 0.00 0.00 0.00 6 <Class
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class TestingSingletonMethodsWithVariable
|
2
|
+
METHODS = %w(a b c d)
|
3
|
+
|
4
|
+
def initialize(favorite_method)
|
5
|
+
class << self
|
6
|
+
METHODS.each do |method_name|
|
7
|
+
if( favorite_method == method_name )
|
8
|
+
define_method method_name do
|
9
|
+
puts "#{method_name} its my favorite method"
|
10
|
+
end
|
11
|
+
else
|
12
|
+
define_method method_name do
|
13
|
+
puts "#{method_name} its not my favorite method"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
t = TestingSingletonMethodsWithVariable.new('b')
|
22
|
+
t.a
|
23
|
+
t.b
|
24
|
+
t.c
|
25
|
+
t.d
|
26
|
+
|
27
|
+
|
28
|
+
# $ ruby test/testing_singleton_methods_with_variable.rb
|
29
|
+
# test/testing_singleton_methods_with_variable.rb:7:in `initialize': undefined local variable or method `favorite_method' for #<Class:#<TestingSingletonMethodsWithVariable:0x1001a77b8>> (NameError)
|
30
|
+
# from test/testing_singleton_methods_with_variable.rb:6:in `each'
|
31
|
+
# from test/testing_singleton_methods_with_variable.rb:6:in `initialize'
|
32
|
+
# from test/testing_singleton_methods_with_variable.rb:21:in `new'
|
33
|
+
# from test/testing_singleton_methods_with_variable.rb:21
|
data/green_syslogger.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{green_syslogger}
|
5
|
-
s.version = "0.2.
|
5
|
+
s.version = "0.2.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Fernando Guillen <http://fernandoguillen.info> & Juan Jose Vidal <@j2vidal>"]
|
9
|
-
s.date = %q{2010-11-
|
9
|
+
s.date = %q{2010-11-17}
|
10
10
|
s.description = %q{Syslogger that makes your life greener}
|
11
11
|
s.email = %q{fguillen.mail@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["README.md", "lib/green_syslogger.rb"]
|
13
|
-
s.files = ["Manifest", "README.md", "Rakefile", "
|
13
|
+
s.files = ["Manifest", "README.md", "Rakefile", "experimental_test/benchmarks.txt", "experimental_test/green_syslogger_benchmarks_test.rb", "experimental_test/green_syslogger_mutithread_test.rb", "experimental_test/ruby_prof_buffered_logger.txt", "experimental_test/ruby_prof_green_syslogger.txt", "experimental_test/ruby_prof_syslog_logger.txt", "experimental_test/testing_singleton_methods_with_variable.rb", "lib/green_syslogger.rb", "test/green_syslogger_test.rb", "test/test_helper.rb", "green_syslogger.gemspec"]
|
14
14
|
s.homepage = %q{https://github.com/SponsorPay/GreenSyslogger}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Green_syslogger", "--main", "README.md"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = %q{green_syslogger}
|
18
18
|
s.rubygems_version = %q{1.3.7}
|
19
19
|
s.summary = %q{Syslogger that makes your life greener}
|
20
|
-
s.test_files = ["test/green_syslogger_test.rb"]
|
20
|
+
s.test_files = ["test/green_syslogger_test.rb", "test/test_helper.rb"]
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/green_syslogger.rb
CHANGED
@@ -9,31 +9,37 @@ require 'syslog'
|
|
9
9
|
# * Posibility to use custom 'tag' only in a concrete point so you can configure Syslog to filter this concrete message to another file
|
10
10
|
# * Compatible with `config.logger.auto_flushing = false` so every log of a simple request will be written on an atomic way
|
11
11
|
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# require 'green_syslogger'
|
13
|
+
# logger = GreenSyslogger.new
|
14
|
+
# logger.debug( 'debug message' )
|
15
|
+
#
|
16
|
+
# To configure it on the <RAILS_ENVIRONMENT>.rb:
|
17
|
+
#
|
18
|
+
# config.logger = GreenSyslogger.new([<default tag>], [<facility>], [<level>])
|
19
|
+
#
|
15
20
|
# By default
|
21
|
+
#
|
16
22
|
# GreenSyslogger.new('rails', 'local2', :debug)
|
17
|
-
#
|
23
|
+
#
|
18
24
|
# Example for Rails configuration:
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
+
#
|
26
|
+
# config.log_level = :info
|
27
|
+
# config.logger = GreenSyslogger.new('myapp', 'local1', config.log_level)
|
28
|
+
# config.colorize_logging = false
|
29
|
+
# config.logger.auto_flushing = false
|
30
|
+
#
|
25
31
|
# To use it:
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# To
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
32
|
+
#
|
33
|
+
# logger.debug("my debug message")
|
34
|
+
# logger.error("my error message")
|
35
|
+
#
|
36
|
+
# To use another tag:
|
37
|
+
#
|
38
|
+
# logger.custom("my custom message", [<tag>], [<level>])
|
39
|
+
#
|
34
40
|
# By default:
|
35
|
-
#
|
36
|
-
#
|
41
|
+
#
|
42
|
+
# logger.custom("my custom message", 'custom', :info)
|
37
43
|
#
|
38
44
|
class GreenSyslogger
|
39
45
|
attr_accessor :level
|
@@ -49,6 +55,14 @@ class GreenSyslogger
|
|
49
55
|
}
|
50
56
|
|
51
57
|
DEFAULT_MAX_BUFFER_SIZE = 500
|
58
|
+
DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
|
59
|
+
SEPARATOR = '---'
|
60
|
+
RAILS_REQUEST_INIT = "\n\nStarted"
|
61
|
+
RAILS_REQUEST_INIT_CLEANED = "Started"
|
62
|
+
RAILS_REQUEST_INIT_REGEX = /\n\nStarted/
|
63
|
+
|
64
|
+
@@syslog = nil
|
65
|
+
@@guard = nil
|
52
66
|
|
53
67
|
def initialize(tag = 'rails', facility = 'local2', level = :debug)
|
54
68
|
@tag = tag
|
@@ -56,12 +70,19 @@ class GreenSyslogger
|
|
56
70
|
@level = level
|
57
71
|
@max_buffer_size = 1
|
58
72
|
@buffer = {}
|
59
|
-
|
60
|
-
|
73
|
+
|
74
|
+
if( !@@guard )
|
75
|
+
@@guard = Mutex.new
|
76
|
+
end
|
77
|
+
|
78
|
+
if( !@@syslog || !@@syslog.opened? )
|
79
|
+
@@syslog = Syslog.open(@tag, Syslog::LOG_PID, Syslog.const_get("LOG_#{@facility.upcase}"))
|
80
|
+
end
|
61
81
|
end
|
62
82
|
|
63
83
|
def close
|
64
|
-
|
84
|
+
flush
|
85
|
+
@@syslog.close
|
65
86
|
end
|
66
87
|
|
67
88
|
# This method is a kind of a back door, using it you can
|
@@ -70,12 +91,12 @@ class GreenSyslogger
|
|
70
91
|
# level default to 'info'
|
71
92
|
# tag default 'ids-custom'
|
72
93
|
def custom(message, tag = 'custom', level = :info)
|
73
|
-
add(tag, level, message)
|
94
|
+
add(tag, level, message) if(level?(level))
|
74
95
|
end
|
75
96
|
|
76
97
|
LEVELS_MAP.each_key do |level|
|
77
98
|
define_method level do |message|
|
78
|
-
add(@tag, level, message)
|
99
|
+
add(@tag, level, message) if(level?(level))
|
79
100
|
end
|
80
101
|
|
81
102
|
define_method "#{level}?" do
|
@@ -94,26 +115,24 @@ class GreenSyslogger
|
|
94
115
|
end
|
95
116
|
|
96
117
|
def flush
|
97
|
-
|
98
|
-
buffer.
|
99
|
-
|
100
|
-
tag
|
101
|
-
|
102
|
-
message = buff[3]
|
103
|
-
|
104
|
-
message = "[#{date.strftime('%Y-%m-%d %H:%M:%S')}] #{message}"
|
118
|
+
@@guard.synchronize do
|
119
|
+
unless buffer.empty?
|
120
|
+
copy_buffer = buffer
|
121
|
+
copy_buffer.each do |date, tag, level, message|
|
122
|
+
message = "[#{date.strftime(DATE_FORMAT)}] #{message}"
|
105
123
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
124
|
+
if(tag == @tag)
|
125
|
+
@@syslog.send(LEVELS_MAP[level][0], message)
|
126
|
+
else
|
127
|
+
@@syslog = Syslog.reopen(tag, Syslog::LOG_PID, Syslog.const_get("LOG_#{@facility.upcase}"))
|
128
|
+
@@syslog.send(LEVELS_MAP[level][0], message)
|
129
|
+
@@syslog = Syslog.reopen(@tag, Syslog::LOG_PID, Syslog.const_get("LOG_#{@facility.upcase}"))
|
130
|
+
end
|
112
131
|
end
|
113
132
|
end
|
133
|
+
|
134
|
+
@buffer.delete(Thread.current) # clear buffer
|
114
135
|
end
|
115
|
-
|
116
|
-
clear_buffer
|
117
136
|
end
|
118
137
|
|
119
138
|
|
@@ -123,29 +142,24 @@ class GreenSyslogger
|
|
123
142
|
LEVELS_MAP[level][1] >= LEVELS_MAP[@level][1]
|
124
143
|
end
|
125
144
|
|
126
|
-
def add(tag, level, message)
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
add(tag, level, '---')
|
131
|
-
end
|
132
|
-
|
133
|
-
buffer << [Time.now, tag, level, message]
|
134
|
-
auto_flush
|
145
|
+
def add(tag, level, message)
|
146
|
+
# The init of the Rails request
|
147
|
+
if( message.gsub!(RAILS_REQUEST_INIT, RAILS_REQUEST_INIT_CLEANED) )
|
148
|
+
buffer << [Time.now, tag, level, SEPARATOR]
|
135
149
|
end
|
150
|
+
|
151
|
+
buffer << [Time.now, tag, level, message]
|
152
|
+
|
153
|
+
auto_flush
|
136
154
|
end
|
137
|
-
|
155
|
+
|
138
156
|
def auto_flush
|
139
157
|
self.flush if buffer.size >= @max_buffer_size
|
140
158
|
end
|
141
|
-
|
159
|
+
|
142
160
|
def buffer
|
143
161
|
@buffer[Thread.current] ||= []
|
144
162
|
end
|
145
|
-
|
146
|
-
def clear_buffer
|
147
|
-
@buffer.delete(Thread.current)
|
148
|
-
end
|
149
163
|
|
150
164
|
# This is really only for debbugging
|
151
165
|
def log_to_file(message)
|
@@ -1,9 +1,4 @@
|
|
1
|
-
require
|
2
|
-
require 'test/unit'
|
3
|
-
require 'mocha'
|
4
|
-
require 'delorean'
|
5
|
-
require File.expand_path(File.dirname(__FILE__) + '/../lib/green_syslogger')
|
6
|
-
|
1
|
+
require "#{File.dirname(__FILE__)}/test_helper"
|
7
2
|
|
8
3
|
class GreenSysloggerTest < Test::Unit::TestCase
|
9
4
|
|
@@ -17,7 +12,8 @@ class GreenSysloggerTest < Test::Unit::TestCase
|
|
17
12
|
end
|
18
13
|
|
19
14
|
def test_initialize_by_default
|
20
|
-
|
15
|
+
GreenSyslogger.class_eval('@@syslog').expects(:opened?).returns(false)
|
16
|
+
Syslog.expects(:open).with('rails', Syslog::LOG_PID, Syslog::LOG_LOCAL2).returns( GreenSyslogger.class_eval('@@syslog') )
|
21
17
|
@logger = GreenSyslogger.new
|
22
18
|
|
23
19
|
assert_equal('rails', @logger.instance_eval("@tag"))
|
@@ -27,7 +23,8 @@ class GreenSysloggerTest < Test::Unit::TestCase
|
|
27
23
|
end
|
28
24
|
|
29
25
|
def test_initialize_with_params
|
30
|
-
|
26
|
+
GreenSyslogger.class_eval('@@syslog').expects(:opened?).returns(false)
|
27
|
+
Syslog.expects(:open).with('my tag', Syslog::LOG_PID, Syslog::LOG_LOCAL3).returns( GreenSyslogger.class_eval('@@syslog') )
|
31
28
|
@logger = GreenSyslogger.new('my tag', 'local3', :info)
|
32
29
|
|
33
30
|
assert_equal('my tag', @logger.instance_eval("@tag"))
|
@@ -97,22 +94,31 @@ class GreenSysloggerTest < Test::Unit::TestCase
|
|
97
94
|
end
|
98
95
|
|
99
96
|
def test_flush
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
97
|
+
syslog = GreenSyslogger.class_eval('@@syslog')
|
98
|
+
|
99
|
+
order = sequence("order")
|
100
|
+
|
101
|
+
syslog.expects(:debug).with('[2010-10-10 10:10:10] wadus debug').in_sequence(order)
|
102
|
+
syslog.expects(:info).with('[2010-10-10 10:10:10] wadus info').in_sequence(order)
|
103
|
+
Syslog.expects(:reopen).with('new tag', Syslog::LOG_PID, Syslog::LOG_LOCAL2).returns(syslog).in_sequence(order)
|
104
|
+
syslog.expects(:info).with('[2010-10-10 10:10:10] wadus custom tag info').in_sequence(order)
|
105
|
+
Syslog.expects(:reopen).with('rails', Syslog::LOG_PID, Syslog::LOG_LOCAL2).returns(syslog).in_sequence(order)
|
106
|
+
syslog.expects(:debug).with('[2010-10-10 10:10:10] wadus debug again').in_sequence(order)
|
104
107
|
|
105
108
|
@logger.auto_flushing = false
|
106
|
-
@logger.debug('wadus debug')
|
107
|
-
@logger.info('wadus info')
|
108
|
-
@logger.custom('wadus custom tag info', 'new tag', :info)
|
109
|
-
@logger.debug('wadus info again')
|
110
109
|
|
110
|
+
Delorean.time_travel_to('2010-10-10 10:10:10') do
|
111
|
+
@logger.debug('wadus debug')
|
112
|
+
@logger.info('wadus info')
|
113
|
+
@logger.custom('wadus custom tag info', 'new tag', :info)
|
114
|
+
@logger.debug('wadus debug again')
|
115
|
+
end
|
116
|
+
|
111
117
|
@logger.flush
|
112
118
|
end
|
113
119
|
|
114
120
|
def test_especial_case_init_of_request
|
115
|
-
@logger.expects(
|
121
|
+
@logger.instance_eval('buffer').expects(:<<).twice
|
116
122
|
@logger.info("\n\nStarted")
|
117
123
|
end
|
118
124
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'mocha'
|
4
|
+
require 'delorean'
|
5
|
+
require 'logger'
|
6
|
+
require 'syslog_logger'
|
7
|
+
require 'active_support'
|
8
|
+
require 'fileutils'
|
9
|
+
require 'benchmark'
|
10
|
+
require 'stringio'
|
11
|
+
require 'buffered_syslogger'
|
12
|
+
require File.expand_path(File.dirname(__FILE__) + '/../lib/green_syslogger')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: green_syslogger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Fernando Guillen <http://fernandoguillen.info> & Juan Jose Vidal <@j2vidal>
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-17 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -32,9 +32,17 @@ files:
|
|
32
32
|
- Manifest
|
33
33
|
- README.md
|
34
34
|
- Rakefile
|
35
|
-
-
|
35
|
+
- experimental_test/benchmarks.txt
|
36
|
+
- experimental_test/green_syslogger_benchmarks_test.rb
|
37
|
+
- experimental_test/green_syslogger_mutithread_test.rb
|
38
|
+
- experimental_test/ruby_prof_buffered_logger.txt
|
39
|
+
- experimental_test/ruby_prof_green_syslogger.txt
|
40
|
+
- experimental_test/ruby_prof_syslog_logger.txt
|
41
|
+
- experimental_test/testing_singleton_methods_with_variable.rb
|
36
42
|
- lib/green_syslogger.rb
|
37
43
|
- test/green_syslogger_test.rb
|
44
|
+
- test/test_helper.rb
|
45
|
+
- green_syslogger.gemspec
|
38
46
|
has_rdoc: true
|
39
47
|
homepage: https://github.com/SponsorPay/GreenSyslogger
|
40
48
|
licenses: []
|
@@ -77,3 +85,4 @@ specification_version: 3
|
|
77
85
|
summary: Syslogger that makes your life greener
|
78
86
|
test_files:
|
79
87
|
- test/green_syslogger_test.rb
|
88
|
+
- test/test_helper.rb
|