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 +5 -0
- data/README.md +51 -0
- data/Rakefile +13 -0
- data/green_syslogger.gemspec +31 -0
- data/lib/green_syslogger.rb +93 -0
- data/test/green_syslogger_test.rb +77 -0
- metadata +79 -0
data/Manifest
ADDED
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
|