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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --require ./spec/spec_helper.rb
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in kim-logger.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -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
@@ -0,0 +1,5 @@
1
+ module Kim
2
+ module Logger
3
+ VERSION = "0.0.1"
4
+ end
5
+ 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
@@ -0,0 +1,9 @@
1
+ describe Kim::EmailDevice do
2
+ it "should send an e-mail when in use" do
3
+ Net::SMTP.should_receive :start
4
+
5
+ log = Logger.new "test@test.com"
6
+ log.debug "Test"
7
+ end
8
+ end
9
+
@@ -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
@@ -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