Skip to content

Commit 76769c5

Browse files
committed
Initial release
0 parents  commit 76769c5

10 files changed

Lines changed: 208 additions & 0 deletions

File tree

‎.gitignore‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/.bundle/
2+
/.yardoc
3+
/Gemfile.lock
4+
/_yardoc/
5+
/coverage/
6+
/doc/
7+
/pkg/
8+
/spec/reports/
9+
/tmp/
10+
*.bundle
11+
*.so
12+
*.o
13+
*.a
14+
mkmf.log

‎Gemfile‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
source 'https://rubygems.org'
2+
3+
# Specify your gem's dependencies in humorous_log_formatter.gemspec
4+
gemspec

‎LICENSE.txt‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Copyright (c) 2014 Peter Boling
2+
3+
MIT License
4+
5+
Permission is hereby granted, free of charge, to any person obtaining
6+
a copy of this software and associated documentation files (the
7+
"Software"), to deal in the Software without restriction, including
8+
without limitation the rights to use, copy, modify, merge, publish,
9+
distribute, sublicense, and/or sell copies of the Software, and to
10+
permit persons to whom the Software is furnished to do so, subject to
11+
the following conditions:
12+
13+
The above copyright notice and this permission notice shall be
14+
included in all copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

‎README.md‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# HumorousLogFormatter
2+
3+
You want Humorous Log Levels and Color (in Rails development)? Can chickens turtle all the way down? Of course!
4+
5+
## Installation
6+
7+
Add this line to your application's Gemfile:
8+
9+
```ruby
10+
gem 'humorous_log_formatter'
11+
```
12+
13+
And then execute:
14+
15+
$ bundle
16+
17+
Or install it yourself as:
18+
19+
$ gem install humorous_log_formatter
20+
21+
## Usage
22+
23+
* Use the source.
24+
* There are a bunch of CONSTANTS defined in the code, and everything this gem does is driven by them.
25+
* Override them for magic.
26+
27+
## Contributing
28+
29+
1. Fork it ( https://github.com/[my-github-username]/humorous_log_formatter/fork )
30+
2. Create your feature branch (`git checkout -b my-new-feature`)
31+
3. Commit your changes (`git commit -am 'Add some feature'`)
32+
4. Push to the branch (`git push origin my-new-feature`)
33+
5. Create a new Pull Request

‎Rakefile‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
require "bundler/gem_tasks"
2+

‎humorous_log_formatter.gemspec‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# coding: utf-8
2+
require File.expand_path('../lib/humorous_log_formatter/version', __FILE__)
3+
4+
Gem::Specification.new do |spec|
5+
spec.name = "humorous_log_formatter"
6+
spec.version = HumorousLogFormatter::VERSION
7+
spec.authors = ["Peter Boling"]
8+
spec.email = ["peter.boling@gmail.com"]
9+
spec.summary = %q{Humorous Log Levels and Color For Rails.}
10+
spec.description = %q{Humorous Log Levels and Color For Rails. Customizable!}
11+
spec.homepage = "https://github.com/pboling/humorous_log_formatter"
12+
spec.license = "MIT"
13+
14+
spec.files = `git ls-files -z`.split("\x0")
15+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17+
spec.require_paths = ["lib"]
18+
19+
spec.add_development_dependency "bundler", "~> 1.7"
20+
spec.add_development_dependency "rake", "~> 10.0"
21+
22+
# Development Dependencies
23+
spec.add_development_dependency(%q<rails>, ["> 3"])
24+
spec.add_development_dependency(%q<activesupport>, ["> 3"])
25+
26+
end

‎lib/humorous_log_formatter.rb‎

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Copyright (c) 2014 Peter H. Boling of 9thBit LLC
2+
# Released under the MIT license
3+
# For Rails 3+
4+
# Patterned after this LogFormatter:
5+
# https://github.com/QutBioacousticsResearchGroup/bioacoustic-workbench/blob/master/config/initializers/log_formatting.rb
6+
# And some of this:
7+
# http://95.154.230.254/ip-1/encoded/Oi8vcGFzdGViaW4uY29tL1hxRU1keGRT
8+
# Makes as much as possible constant values to not bog down GC and make it whip fast
9+
require "humorous_log_formatter/version"
10+
11+
module HumorousLogFormatter
12+
class LogFormatter
13+
# TODO: For Rails 4, uncomment the line below
14+
#include ActiveSupport::TaggedLogging::Formatter
15+
SEVERITY_TO_TAG_MAP = {'DEBUG' => 'meh', 'INFO' => 'fyi', 'WARN' => 'hmm', 'ERROR' => 'wtf', 'FATAL' => 'omg', 'UNKNOWN' => '???'}
16+
SEVERITY_TO_COLOR_MAP = {'DEBUG' => '0;37', 'INFO' => '32', 'WARN' => '33', 'ERROR' => '31', 'FATAL' => '31', 'UNKNOWN' => '37'}
17+
USE_HUMOROUS_SEVERITIES = begin
18+
if ENV['LOG_HUMOR']
19+
ENV['LOG_HUMOR'] != 'false' # Default to true
20+
else
21+
Rails.env.development?
22+
end
23+
end
24+
USE_COLOR = begin
25+
if ENV['LOG_COLOR']
26+
ENV['LOG_COLOR'] != 'false' # Default to true
27+
else
28+
Rails.env.development?
29+
end
30+
end
31+
32+
THIS_FILE_PATH = File.expand_path(".")
33+
34+
FORMATTED_SEVERITY = USE_HUMOROUS_SEVERITIES ?
35+
lambda { |severity| sprintf("%-3s", "#{SEVERITY_TO_TAG_MAP[severity]}") } :
36+
lambda { |severity| sprintf("%-5s", "#{severity}") }
37+
38+
FORMATTED_MESSAGE = if USE_COLOR
39+
lambda { |severity, formatted_time, msg|
40+
color = SEVERITY_TO_COLOR_MAP[severity]
41+
"[\033[#{color}m#{formatted_time}\033[0m] [\033[#{color}m#{FORMATTED_SEVERITY.call(severity)}\033[0m] #{msg.strip}\n"
42+
}
43+
else
44+
lambda { |severity, formatted_time, msg|
45+
"[#{formatted_time}] [#{FORMATTED_SEVERITY.call(severity)}] #{msg.strip}\n"
46+
}
47+
end
48+
49+
def exception_values(e)
50+
trace = e.backtrace.select { |x| !line.starts_with?(THIS_FILE_PATH) }
51+
trace = trace.map { |l| colorize_exception(l) } if USE_COLOR
52+
first = "\n" + trace.first + ": " + e.message + " (#{e.class})"
53+
rest = "\t" + trace[1..-1].join("\n\t")
54+
return first + "\n" + rest
55+
end
56+
57+
def colorize_exception(line)
58+
"\033[01;32m#{line}\033[0m"
59+
end
60+
61+
def call(severity, time, progname, msg)
62+
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S.") << time.usec.to_s[0..2].rjust(3)
63+
text = if msg.is_a? String
64+
msg
65+
elsif msg.is_a? Exception
66+
" --> Exception: " + exception_values(msg)
67+
else
68+
"!!!!! UNKNOWN TYPE: #{msg.class}" + msg.to_s
69+
end
70+
FORMATTED_MESSAGE.call(severity, formatted_time, text)
71+
end
72+
73+
require "humorous_log_formatter/railtie"
74+
75+
end
76+
end
77+
78+
79+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Copyright (c) 2014 Peter H. Boling of 9thBit LLC
2+
# Released under the MIT license
3+
# For Rails 3+
4+
class ActiveSupport::BufferedLogger
5+
# At some point after Rails 3 ActiveSupport::BufferedLogger began inheriting from Logger rather than Object.
6+
unless method_defined? :formatter=
7+
def formatter=(formatter)
8+
@log.formatter = formatter
9+
end
10+
end
11+
end
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Copyright (c) 2014 Peter H. Boling of 9thBit LLC
2+
# Released under the MIT license
3+
# For Rails 3+
4+
module HumorousLogFormatter
5+
class Railtie < ::Rails::Railtie
6+
7+
require 'humorous_log_formatter/ext/active_support_buffered_logger'
8+
9+
config.after_initialize do
10+
Rails.logger.formatter = HumorousLogFormatter::LogFormatter.new
11+
end
12+
13+
end
14+
end
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module HumorousLogFormatter
2+
VERSION = "0.0.1"
3+
end

0 commit comments

Comments
 (0)