green_syslogger 0.1.0

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 ADDED
@@ -0,0 +1,5 @@
1
+ README.md
2
+ Rakefile
3
+ lib/green_syslogger.rb
4
+ test/green_syslogger_test.rb
5
+ Manifest
data/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # GreenLogger
2
+
3
+ Syslogger that makes your life greener
4
+
5
+ ## Install
6
+
7
+ $ [sudo] gem install green_syslogger
8
+
9
+ ## Usage
10
+
11
+ require 'green_syslogger'
12
+ logger = GreenSyslogger.new
13
+ logger.debug( 'debug message' )
14
+
15
+ To configure it on the <RAILS_ENVIRONMENT>.rb:
16
+
17
+ config.logger = GreenSyslogger.new(<default tag>, <facility>, <level>)
18
+
19
+
20
+ By default
21
+
22
+ GreenSyslogger.new('rails', 'local2', :debug)
23
+
24
+
25
+ To use it:
26
+
27
+ logger.debug("my debug message")
28
+ logger.error("my error message")
29
+
30
+
31
+ To user another tag:
32
+
33
+ logger.custom("my custom message", <tag>, <level>)
34
+
35
+
36
+ By default:
37
+
38
+ logger.custom("my custom message", 'custom', :info)
39
+
40
+ ## TODO
41
+
42
+
43
+ ## Credits
44
+
45
+ * Authors: [Fernando Guillen](http://fernandoguillen.info) & [Juan Jose Vidal](http://twitter.com/j2vidal)
46
+ * Copyright: Copyright (c) 2010 Fernando Guillen
47
+ * License: Released under the MIT license.
48
+
49
+ ## Thanks to
50
+
51
+ *SponsorPay* for let us open it.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('green_syslogger', '0.1.0') do |p|
6
+ p.description = "Syslogger that makes your life greener"
7
+ p.url = "http://github.com/fguillen/GreenSyslogger"
8
+ p.author = "Fernando Guillen <http://fernandoguillen.info> & Juan Jose Vidal <@j2vidal>"
9
+ p.email = "fguillen.mail@gmail.com"
10
+ p.ignore_pattern = ["tmp/*"]
11
+ p.development_dependencies = []
12
+ p.runtime_dependencies = []
13
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{green_syslogger}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Fernando Guillen <http://fernandoguillen.info> & Juan Jose Vidal <@j2vidal>"]
9
+ s.date = %q{2010-11-09}
10
+ s.description = %q{Syslogger that makes your life greener}
11
+ s.email = %q{fguillen.mail@gmail.com}
12
+ s.extra_rdoc_files = ["README.md", "lib/green_syslogger.rb"]
13
+ s.files = ["README.md", "Rakefile", "lib/green_syslogger.rb", "test/green_syslogger_test.rb", "Manifest", "green_syslogger.gemspec"]
14
+ s.homepage = %q{http://github.com/fguillen/GreenSyslogger}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Green_syslogger", "--main", "README.md"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{green_syslogger}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{Syslogger that makes your life greener}
20
+ s.test_files = ["test/green_syslogger_test.rb"]
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
+ else
28
+ end
29
+ else
30
+ end
31
+ end
@@ -0,0 +1,93 @@
1
+ require 'syslog'
2
+
3
+ #
4
+ # Custom log
5
+ #
6
+ # To install it cofigure it on the <RAILS_ENVIRONMENT>.rb:
7
+ # config.logger = GreenSyslogger.new(<default tag>, <facility>, <level>)
8
+ #
9
+ # By default
10
+ # GreenSyslogger.new('rails', 'local2', :debug)
11
+ #
12
+ # To use it:
13
+ #
14
+ # logger.debug("my debug message")
15
+ # logger.error("my error message")
16
+ #
17
+ # To user another tag:
18
+ #
19
+ # logger.custom("my custom message", <tag>, <level>)
20
+ #
21
+ # By default:
22
+ #
23
+ # logger.custom("my custom message", 'custom', :info)
24
+ #
25
+ class GreenSyslogger
26
+ attr_accessor :level
27
+
28
+ # Mapping between Logger levels and Syslog levels
29
+ LEVELS_MAP = {
30
+ :debug => [:debug , 0],
31
+ :info => [:info , 1],
32
+ :warn => [:warning , 2],
33
+ :error => [:err , 3],
34
+ :fatal => [:emerg , 4],
35
+ :unknown => [:debub , 5]
36
+ }
37
+
38
+ DEFAULT_CONF = [ Syslog::LOG_PID, Syslog::LOG_LOCAL2 ]
39
+
40
+ def initialize(tag = 'rails', facility = 'local2', level = :debug)
41
+ @tag = tag
42
+ @facility = facility
43
+ @level = level
44
+ @syslog = Syslog.open( @tag, Syslog::LOG_PID, Syslog.const_get( "LOG_#{@facility.upcase}" ) )
45
+ end
46
+
47
+ def close
48
+ @syslog.close
49
+ end
50
+
51
+ def opened?
52
+ @syslog.opened?
53
+ end
54
+
55
+ # level default to 'info'
56
+ # tag default 'ids-custom'
57
+ def custom(message, tag = 'ids-custom', level = :info)
58
+ @syslog = Syslog.reopen( tag, Syslog::LOG_PID, Syslog.const_get( "LOG_#{@facility.upcase}" ) )
59
+ self.log(message, level)
60
+ @syslog = Syslog.reopen( @tag, Syslog::LOG_PID, Syslog.const_get( "LOG_#{@facility.upcase}" ) )
61
+ end
62
+
63
+ # level default to 'info'
64
+ def log(message, level = :info)
65
+ # File.open("/tmp/ids.log", 'w') { |f| f.write(message) }
66
+ @syslog.send(LEVELS_MAP[level][0], clean(message))
67
+ end
68
+
69
+ LEVELS_MAP.each_key do |level|
70
+ define_method level do |message|
71
+ if self.send("#{level}?")
72
+ self.log(message, level)
73
+ end
74
+ end
75
+
76
+ define_method "#{level}?" do
77
+ LEVELS_MAP[level][1] >= LEVELS_MAP[@level][1]
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ # Clean up messages so they're nice and pretty.
84
+ # Taken from SyslogLogger with small variation
85
+ def clean(message)
86
+ message = message.to_s.dup
87
+ message.strip!
88
+ message.gsub!(/%/, '%%') # syslog(3) freaks on % (printf)
89
+ message.gsub!(/\^\[[^m]*m/, '') # remove useless ansi color codes
90
+ return message
91
+ end
92
+
93
+ end
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'mocha'
4
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/green_syslogger')
5
+
6
+
7
+ class GreenSysloggerTest < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @logger = GreenSyslogger.new
11
+ @message = "wadus message"
12
+ end
13
+
14
+ def teardown
15
+ @logger.close
16
+ end
17
+
18
+ def test_initialize_by_default
19
+ Syslog.expects(:open).with('rails', Syslog::LOG_PID, Syslog::LOG_LOCAL2).returns( @logger.instance_eval('@syslog') )
20
+ @logger = GreenSyslogger.new
21
+ assert_equal(:debug, @logger.instance_eval("@level"))
22
+ end
23
+
24
+ def test_initialize_with_params
25
+ Syslog.expects(:open).with('my tag', Syslog::LOG_PID, Syslog::LOG_LOCAL3).returns( @logger.instance_eval('@syslog') )
26
+ @logger = GreenSyslogger.new('my tag', 'local3', :info)
27
+ assert_equal(:info, @logger.instance_eval("@level"))
28
+ end
29
+
30
+ def test_has_a_collection_of_methods
31
+ GreenSyslogger::LEVELS_MAP.each_key do |level|
32
+ @logger.expects(:log).with(@message, level)
33
+ @logger.send(level, @message)
34
+ end
35
+ end
36
+
37
+ def test_log
38
+ @logger.instance_eval('@syslog').expects(:debug).with(@message)
39
+ @logger.log(@message, :debug)
40
+ end
41
+
42
+ def test_log_cleaned
43
+ @logger.expects(:clean).with(@message).returns("#{@message} cleaned")
44
+ @logger.instance_eval('@syslog').expects(:debug).with("#{@message} cleaned")
45
+ @logger.log(@message, :debug)
46
+ end
47
+
48
+ def test_clean
49
+ dirty_message = "^[[1m^[[36mSQL (0.339ms)^[[0m ^[[1m select landing_page_id, count(*) cnt from transactions \n where landing_page_id in (4278,4279,4334,4338,4340,4342) \n and status >= 45 and created_at >= '2010-11-08T11:30:22'\n group by landing_page_id\n^[[0m"
50
+ clean_message = "SQL (0.339ms) select landing_page_id, count(*) cnt from transactions \n where landing_page_id in (4278,4279,4334,4338,4340,4342) \n and status >= 45 and created_at >= '2010-11-08T11:30:22'\n group by landing_page_id\n"
51
+
52
+ assert_equal(clean_message, @logger.send(:clean, dirty_message))
53
+ end
54
+
55
+ def test_log_in_debug_level
56
+ @logger.level = :debug
57
+ @logger.expects(:log).times(3)
58
+ @logger.debug(@message)
59
+ @logger.info(@message)
60
+ @logger.error(@message)
61
+ end
62
+
63
+ def test_log_in_info_level
64
+ @logger.level = :info
65
+ @logger.expects(:log).times(2)
66
+ @logger.debug(@message)
67
+ @logger.info(@message)
68
+ @logger.error(@message)
69
+ end
70
+
71
+ def test_log_with_custom_tag
72
+ Syslog.expects(:reopen).returns(@logger.instance_eval('@syslog')).twice
73
+ @logger.expects(:log)
74
+ @logger.custom(@message)
75
+ end
76
+
77
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: green_syslogger
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Fernando Guillen <http://fernandoguillen.info> & Juan Jose Vidal <@j2vidal>
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-09 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Syslogger that makes your life greener
23
+ email: fguillen.mail@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.md
30
+ - lib/green_syslogger.rb
31
+ files:
32
+ - README.md
33
+ - Rakefile
34
+ - lib/green_syslogger.rb
35
+ - test/green_syslogger_test.rb
36
+ - Manifest
37
+ - green_syslogger.gemspec
38
+ has_rdoc: true
39
+ homepage: http://github.com/fguillen/GreenSyslogger
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --line-numbers
45
+ - --inline-source
46
+ - --title
47
+ - Green_syslogger
48
+ - --main
49
+ - README.md
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 11
67
+ segments:
68
+ - 1
69
+ - 2
70
+ version: "1.2"
71
+ requirements: []
72
+
73
+ rubyforge_project: green_syslogger
74
+ rubygems_version: 1.3.7
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Syslogger that makes your life greener
78
+ test_files:
79
+ - test/green_syslogger_test.rb