hodel_3000_compliant_logger 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,52 @@
1
+ == Hodel 3000 Compliant Logger
2
+
3
+ The Hodel 3000 Compliant Logger outputs like SyslogLogger (http://seattlerb.rubyforge.org/SyslogLogger/), except it doesn't need a syslog daemon running, such that your log come out exactly like syslog logs.
4
+
5
+ Mostly, this is intended to let you use tools that assume your log are in this syslog format, including:
6
+
7
+ * Rails Analyzer Tools: http://rails-analyzer.rubyforge.org/
8
+ * oink: http://github.com/noahd1/oink
9
+
10
+ See initial announcement here: http://nubyonrails.com/articles/a-hodel-3000-compliant-logger-for-the-rest-of-us
11
+
12
+ === Installation and congiguration
13
+
14
+ gem install hodel_3000_compliant_logger
15
+
16
+ The main thing hodel_3000_complaint_logger provides is the Hodel3000ComplaintLogger class. It's a subclass of Logger (http://ruby-doc.org/core/classes/Logger.html), so you can use it as you would any Logger, really, except it outputs slightly different.
17
+
18
+ require 'hodel_3000_compliant_logger'
19
+ log = Hodel3000ComplaintLogger.new(STDOUT)
20
+ log.level = Logger::WARN
21
+
22
+ log.debug("Created logger")
23
+ log.info("Program started")
24
+ log.warn("Nothing to do!")
25
+
26
+ Most likely, you'll want to use it to replace the builtin Rails logger, by updating config/environment.rb:
27
+
28
+ Rails::Initializer.run do |config|
29
+ config.gem 'hodel_3000_compliant_logger'
30
+ begin
31
+ require 'hodel_3000_compliant_logger'
32
+ config.logger = Hodel3000CompliantLogger.new(config.log_path)
33
+ rescue
34
+ $stderr.puts "Hodel3000CompliantLogger unavailable, oink will be disabled"
35
+ end
36
+ end
37
+
38
+ Note, the block inside Rails::Initializer runs before you environment is fully loaded, so you need this in a begin/rescue block so `rake gems:install` doesn't fall on its face.
39
+
40
+ === NOTE
41
+
42
+ If you are using FastCGI, you may need to hard-code the hostname instead of using Socket.gethostname
43
+
44
+ == Author
45
+
46
+ Geoffrey Grosenbach, with help from Eric Hodel
47
+
48
+ http://topfunky.com
49
+
50
+ == Changes
51
+
52
+ * Nov 29, 2007: Improvements and spec from Chris Bernard [http://logicleaf.com/]
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "hodel_3000_compliant_logger"
8
+ gem.version = "0.1.0"
9
+ gem.summary = %Q{Alternate logger for Rails that emits syslog-style output. For use with pl_analyze gem.}
10
+ gem.description = %Q{Alternate logger for Rails that emits syslog-style output. For use with pl_analyze gem.}
11
+ gem.email = "boss@topfunky.com"
12
+ gem.homepage = "http://github.com/topfunky/hodel_3000_compliant_logger"
13
+ gem.authors = ["Geoffrey Grosenbach"]
14
+ gem.add_development_dependency "rspec", "~> 1.3.0"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'spec/rake/spectask'
23
+ Spec::Rake::SpecTask.new(:spec) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.spec_files = FileList['spec/**/*_spec.rb']
26
+ end
27
+ task :default => :spec
@@ -0,0 +1,47 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{hodel_3000_compliant_logger}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Geoffrey Grosenbach"]
12
+ s.date = %q{2010-09-30}
13
+ s.description = %q{Alternate logger for Rails that emits syslog-style output. For use with pl_analyze gem.}
14
+ s.email = %q{boss@topfunky.com}
15
+ s.extra_rdoc_files = [
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ "README.rdoc",
20
+ "Rakefile",
21
+ "hodel_3000_compliant_logger.gemspec",
22
+ "lib/hodel_3000_compliant_logger.rb",
23
+ "spec/hodel_3000_compliant_logger_spec.rb"
24
+ ]
25
+ s.homepage = %q{http://github.com/topfunky/hodel_3000_compliant_logger}
26
+ s.rdoc_options = ["--charset=UTF-8"]
27
+ s.require_paths = ["lib"]
28
+ s.rubygems_version = %q{1.3.7}
29
+ s.summary = %q{Alternate logger for Rails that emits syslog-style output. For use with pl_analyze gem.}
30
+ s.test_files = [
31
+ "spec/hodel_3000_compliant_logger_spec.rb"
32
+ ]
33
+
34
+ if s.respond_to? :specification_version then
35
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
36
+ s.specification_version = 3
37
+
38
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
39
+ s.add_development_dependency(%q<rspec>, ["~> 1.3.0"])
40
+ else
41
+ s.add_dependency(%q<rspec>, ["~> 1.3.0"])
42
+ end
43
+ else
44
+ s.add_dependency(%q<rspec>, ["~> 1.3.0"])
45
+ end
46
+ end
47
+
@@ -0,0 +1,31 @@
1
+ require 'logger'
2
+ require 'English'
3
+
4
+ # A logger for use with pl_analyze and other tools that expect syslog-style log output.
5
+ class Hodel3000CompliantLogger < Logger
6
+
7
+ ##
8
+ # Note: If you are using FastCGI you may need to hard-code the hostname here instead of using Socket.gethostname
9
+ def format_message(severity, timestamp, progname, msg)
10
+ "#{timestamp.strftime("%b %d %H:%M:%S")} #{hostname} rails[#{$PID}]: #{msg2str(msg).gsub(/\n/, '').lstrip}\n"
11
+ end
12
+
13
+ private
14
+
15
+ def hostname
16
+ @parsed_hostname ||= Socket.gethostname.split('.').first
17
+ end
18
+
19
+ def msg2str(msg)
20
+ case msg
21
+ when ::String
22
+ msg
23
+ when ::Exception
24
+ "#{ msg.message } (#{ msg.class }): " <<
25
+ (msg.backtrace || []).join(" | ")
26
+ else
27
+ msg.inspect
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,39 @@
1
+ $: << File.dirname(__FILE__) + "/../lib"
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'hodel_3000_compliant_logger'
6
+
7
+ describe Hodel3000CompliantLogger do
8
+
9
+ before :each do
10
+ @out = StringIO.new
11
+ @log = Hodel3000CompliantLogger.new(@out)
12
+ Socket.stub(:gethostname).and_return('hostname.domain')
13
+ end
14
+
15
+ it "should log stuff in a syslog-like format so that Eric Hodel's Rails Analyzer Tools can parse it" do
16
+ msg = "Yo ho hello there!"
17
+ @log.info(msg)
18
+ @out.string.should match(/^\w{3} \d{2} \d{2}:\d{2}:\d{2} hostname rails\[\d+\]: #{msg}\n$/)
19
+ end
20
+
21
+ it "should handle an Exception object used as an argument in Logger#error, rather than blow chunks" do
22
+ @log.error(Exception.new)
23
+ @out.string.should match(/Exception/)
24
+ end
25
+
26
+ it "should display a semi-readable stack trace (albiet on one line) when Logger#error(SomeException) was called" do
27
+ @log.error(toss_runtime_error)
28
+ @out.string.should match(/.*? \| .*? \| .*? \|/) # pipe separated stack frames
29
+ @out.string.should match(/\n$/)
30
+ @out.string.count("\n").should == 1
31
+ end
32
+
33
+ def toss_runtime_error
34
+ raise "Catastrophic Failure"
35
+ rescue => e
36
+ return e
37
+ end
38
+ end
39
+
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hodel_3000_compliant_logger
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
+ - Geoffrey Grosenbach
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-30 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 27
30
+ segments:
31
+ - 1
32
+ - 3
33
+ - 0
34
+ version: 1.3.0
35
+ type: :development
36
+ version_requirements: *id001
37
+ description: Alternate logger for Rails that emits syslog-style output. For use with pl_analyze gem.
38
+ email: boss@topfunky.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - README.rdoc
45
+ files:
46
+ - README.rdoc
47
+ - Rakefile
48
+ - hodel_3000_compliant_logger.gemspec
49
+ - lib/hodel_3000_compliant_logger.rb
50
+ - spec/hodel_3000_compliant_logger_spec.rb
51
+ has_rdoc: true
52
+ homepage: http://github.com/topfunky/hodel_3000_compliant_logger
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options:
57
+ - --charset=UTF-8
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ hash: 3
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ requirements: []
79
+
80
+ rubyforge_project:
81
+ rubygems_version: 1.3.7
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: Alternate logger for Rails that emits syslog-style output. For use with pl_analyze gem.
85
+ test_files:
86
+ - spec/hodel_3000_compliant_logger_spec.rb