kim-logger 0.0.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/.gitignore +4 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/kim-logger.gemspec +22 -0
- data/lib/.kim-logger.rb.swo +0 -0
- data/lib/.kim-logger.rb.swp +0 -0
- data/lib/kim-logger/email_device.rb +54 -0
- data/lib/kim-logger/version.rb +5 -0
- data/lib/kim-logger.rb +80 -0
- data/spec/kim-logger/.email_device_spec.rb.swp +0 -0
- data/spec/kim-logger/.kim-logger_spec.rb.swp +0 -0
- data/spec/kim-logger/email_device_spec.rb +9 -0
- data/spec/kim-logger/kim-logger_spec.rb +35 -0
- data/spec/spec_helper.rb +1 -0
- metadata +97 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/kim-logger.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "kim-logger/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "kim-logger"
|
7
|
+
s.version = Kim::Logger::VERSION
|
8
|
+
s.authors = ["Giancarlo Palavicini"]
|
9
|
+
s.email = ["kasthor@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Improves standard logger to add multiple devices}
|
12
|
+
s.description = %q{Some improvements to add multiple devices for logger as well as adding an e-mail device}
|
13
|
+
|
14
|
+
s.rubyforge_project = "kim-logger"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'kim'
|
22
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Kim
|
2
|
+
class EmailDevice
|
3
|
+
attr_accessor :email, :settings
|
4
|
+
|
5
|
+
#DEFAULTS
|
6
|
+
@@settings = {
|
7
|
+
:from => 'logger@localhost',
|
8
|
+
:subject => 'Email Log',
|
9
|
+
:host => 'localhost',
|
10
|
+
:port => 25
|
11
|
+
}
|
12
|
+
|
13
|
+
def initialize email, settings = {}
|
14
|
+
self.email = email
|
15
|
+
self.settings = settings
|
16
|
+
end
|
17
|
+
|
18
|
+
def write message
|
19
|
+
send_email effective_settings[:from], self.email, message
|
20
|
+
end
|
21
|
+
|
22
|
+
def close
|
23
|
+
# Do nothing
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.settings
|
27
|
+
@@settings
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.settings= value
|
31
|
+
@@settings = value
|
32
|
+
end
|
33
|
+
|
34
|
+
def effective_settings
|
35
|
+
@@settings.deep_merge self.settings
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def send_email from, to, message
|
41
|
+
email = <<-MESSAGE
|
42
|
+
From: #{from}
|
43
|
+
To: #{to}
|
44
|
+
Subject: #{ effective_settings[:subject] }
|
45
|
+
|
46
|
+
#{message}
|
47
|
+
MESSAGE
|
48
|
+
|
49
|
+
Net::SMTP.start effective_settings[:host], effective_settings[:port] do |smtp|
|
50
|
+
smtp.send_message message, from, to
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/kim-logger.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require "kim"
|
2
|
+
require "logger"
|
3
|
+
require "net/smtp"
|
4
|
+
require "./lib/kim-logger/version"
|
5
|
+
require "./lib/kim-logger/email_device"
|
6
|
+
|
7
|
+
Logger.class_exec do
|
8
|
+
# Redefine initialization to have the same behavior
|
9
|
+
# but instead of just one logdev create an array of devices with multiple a log level for each
|
10
|
+
def initialize logdev, shift_age = 0, shift_size = 1048576, options = {}
|
11
|
+
@formater = nil
|
12
|
+
@progname = nil
|
13
|
+
@default_formatter = Logger::Formatter.new
|
14
|
+
|
15
|
+
@logdevs = []
|
16
|
+
|
17
|
+
options[:shift_age] ||= shift_age
|
18
|
+
options[:shift_size] ||= shift_size
|
19
|
+
|
20
|
+
add_device Logger::DEBUG, logdev, options
|
21
|
+
end
|
22
|
+
|
23
|
+
def add severity, message = nil, progname = nil, &block
|
24
|
+
severity ||= Logger::UNKNOWN
|
25
|
+
|
26
|
+
progname ||= @progname
|
27
|
+
|
28
|
+
unless message
|
29
|
+
if block_given?
|
30
|
+
message = yield
|
31
|
+
else
|
32
|
+
message = progname
|
33
|
+
progname = @progname
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
@logdevs.each do | logdev |
|
38
|
+
next unless severity >= logdev[:level]
|
39
|
+
|
40
|
+
logdev[:dev].write( format_message( format_severity(severity), Time.now, progname, message ))
|
41
|
+
end
|
42
|
+
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
def << msg
|
47
|
+
@logdevs.each{|item| item[:dev].write msg }
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_device severity, logdev, options = {}
|
51
|
+
case logdev
|
52
|
+
when /^[A-Za-z0-9+.%_-]+@[A-Za-z0-9+.%_-]+\.[A-Za-z0-9+.%_-]+$/ # is email
|
53
|
+
@logdevs << { :dev => Kim::EmailDevice.new(logdev, options), :level => severity }
|
54
|
+
else
|
55
|
+
@logdevs << { :dev => ::Logger::LogDevice.new(logdev, options), :level => severity }
|
56
|
+
end
|
57
|
+
|
58
|
+
cleanup_devices
|
59
|
+
end
|
60
|
+
|
61
|
+
def close
|
62
|
+
@logdevs.each{|item| item[:dev].close }
|
63
|
+
end
|
64
|
+
|
65
|
+
# Level is no longer a 1 variable statement, but for backward compatibility I'm assuming it refers to the first device
|
66
|
+
|
67
|
+
def level
|
68
|
+
@logdevs[0][:level] if @logdevs[0]
|
69
|
+
end
|
70
|
+
|
71
|
+
def level= value
|
72
|
+
@logdevs[0][:level] = value if @logdevs[0]
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def cleanup_devices
|
78
|
+
@logdevs.reject!{|dev| dev.nil?}
|
79
|
+
end
|
80
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,35 @@
|
|
1
|
+
describe Kim::Logger do
|
2
|
+
let(:logdev) {
|
3
|
+
logdev = mock("Log").tap{ |logdev|
|
4
|
+
logdev.stub!(:write)
|
5
|
+
logdev.stub!(:close)
|
6
|
+
}
|
7
|
+
}
|
8
|
+
it "should be able to replicate normal behavior" do
|
9
|
+
logdev.should_receive(:write).with(/Test/)
|
10
|
+
log = Logger.new logdev
|
11
|
+
log.debug "Test"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be included in standard logger" do
|
15
|
+
log = Logger.new logdev
|
16
|
+
log.should respond_to(:add_device)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should send log messages to several devices" do
|
20
|
+
logdev2 = mock("Log2").tap { |logdev|
|
21
|
+
logdev.should_receive(:write).with(/Test/)
|
22
|
+
logdev.stub! :close
|
23
|
+
}
|
24
|
+
logdev.should_receive(:write).with(/Test/)
|
25
|
+
log = Logger.new logdev
|
26
|
+
log.add_device Logger::DEBUG, logdev2
|
27
|
+
|
28
|
+
log.debug "Test"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should recognize when we need an e-mail device" do
|
32
|
+
Kim::EmailDevice.should_receive(:new)
|
33
|
+
log = Logger.new "test@test.com"
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "./lib/kim-logger.rb"
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kim-logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Giancarlo Palavicini
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-10-12 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: kim
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description: Some improvements to add multiple devices for logger as well as adding an e-mail device
|
35
|
+
email:
|
36
|
+
- kasthor@gmail.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- .rspec
|
46
|
+
- Gemfile
|
47
|
+
- Rakefile
|
48
|
+
- kim-logger.gemspec
|
49
|
+
- lib/.kim-logger.rb.swo
|
50
|
+
- lib/.kim-logger.rb.swp
|
51
|
+
- lib/kim-logger.rb
|
52
|
+
- lib/kim-logger/email_device.rb
|
53
|
+
- lib/kim-logger/version.rb
|
54
|
+
- spec/kim-logger/.email_device_spec.rb.swp
|
55
|
+
- spec/kim-logger/.kim-logger_spec.rb.swp
|
56
|
+
- spec/kim-logger/email_device_spec.rb
|
57
|
+
- spec/kim-logger/kim-logger_spec.rb
|
58
|
+
- spec/spec_helper.rb
|
59
|
+
homepage: ""
|
60
|
+
licenses: []
|
61
|
+
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
hash: 3
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
version: "0"
|
85
|
+
requirements: []
|
86
|
+
|
87
|
+
rubyforge_project: kim-logger
|
88
|
+
rubygems_version: 1.8.7
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: Improves standard logger to add multiple devices
|
92
|
+
test_files:
|
93
|
+
- spec/kim-logger/.email_device_spec.rb.swp
|
94
|
+
- spec/kim-logger/.kim-logger_spec.rb.swp
|
95
|
+
- spec/kim-logger/email_device_spec.rb
|
96
|
+
- spec/kim-logger/kim-logger_spec.rb
|
97
|
+
- spec/spec_helper.rb
|