green_syslogger 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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