lumber 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/LICENSE +20 -0
- data/README.rdoc +36 -0
- data/TODO +2 -0
- data/VERSION +1 -0
- data/generators/lumber/USAGE +5 -0
- data/generators/lumber/lumber_generator.rb +19 -0
- data/generators/lumber/templates/log4r.yml +18 -0
- data/lib/lumber/log4r.rb +40 -0
- data/lib/lumber/lumber.rb +72 -0
- data/lib/lumber.rb +6 -0
- data/test/lumber_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +85 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Matt Conway
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
= lumber
|
2
|
+
|
3
|
+
Lumber tries to make it easy to use the more robust log4r[http://log4r.sourceforge.net/] logging system within your rails application.
|
4
|
+
To do this it sets up log4r configuration from a yml file, and provides utility methods for adding a
|
5
|
+
:logger accessor to classes dynamically as they get created. In the default setup shown below, calls
|
6
|
+
to logger from a model/controller/mailer, will include that classes name in the log output.
|
7
|
+
|
8
|
+
To use it, first "gem install lumber", run the lumber generator (./script generate lumber) to get the log4r.yml config file, then make the following edits
|
9
|
+
to config/environment.rb:
|
10
|
+
|
11
|
+
# before Rails::Initializer.run
|
12
|
+
#
|
13
|
+
require 'lumber'
|
14
|
+
Lumber.init()
|
15
|
+
|
16
|
+
# Inside the block for Rails::Initializer.run
|
17
|
+
#
|
18
|
+
config.after_initialize do
|
19
|
+
# setup log4r heirarchy - these need to happen after frameworks
|
20
|
+
# are loaded, but before subclasses get defined
|
21
|
+
Lumber.setup_logger_heirarchy(ActiveRecord::Base, "rails::models")
|
22
|
+
Lumber.setup_logger_heirarchy(ActionController::Base, "rails::controllers")
|
23
|
+
Lumber.setup_logger_heirarchy(ActionMailer::Base, "rails::mailers")
|
24
|
+
end
|
25
|
+
|
26
|
+
If you want to change the log level for a different environment, add a line like below to the config/environments/<env>.rb
|
27
|
+
|
28
|
+
# Set info as the default log level for production
|
29
|
+
Log4r::Logger.root.level = Log4r::INFO
|
30
|
+
|
31
|
+
You should be able to use lumber in a non-rails project too, but your call to Lumber.init will need to be different.
|
32
|
+
I don't currently need to do this, so let me know if you have any problems.
|
33
|
+
|
34
|
+
== Copyright
|
35
|
+
|
36
|
+
Copyright (c) 2009 Matt Conway. See LICENSE for details.
|
data/TODO
ADDED
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'find'
|
3
|
+
|
4
|
+
class LumberGenerator < Rails::Generator::Base
|
5
|
+
|
6
|
+
def manifest
|
7
|
+
record do |m|
|
8
|
+
m.file('log4r.yml', 'config/log4r.yml')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def banner
|
15
|
+
usage = "Usage: #{$0} lumber\n"
|
16
|
+
usage << " Install configuration files for lumber\n"
|
17
|
+
return usage
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
log4r_config:
|
2
|
+
pre_config:
|
3
|
+
root:
|
4
|
+
level: DEBUG
|
5
|
+
loggers:
|
6
|
+
- name: "rails"
|
7
|
+
outputters:
|
8
|
+
- logfile
|
9
|
+
|
10
|
+
outputters:
|
11
|
+
- type: FileOutputter
|
12
|
+
name: logfile
|
13
|
+
filename: "#{log_file}"
|
14
|
+
trunc: 'false'
|
15
|
+
formatter :
|
16
|
+
date_pattern: '%H:%M:%S'
|
17
|
+
pattern : '%-5l %d #{hostname} %c[#{Process.pid}]: %m'
|
18
|
+
type : PatternFormatter
|
data/lib/lumber/log4r.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'log4r/yamlconfigurator'
|
3
|
+
require 'log4r/outputter/datefileoutputter'
|
4
|
+
require 'active_support/core_ext/array.rb'
|
5
|
+
require 'active_support/core_ext/class/attribute_accessors.rb'
|
6
|
+
|
7
|
+
class Log4r::Logger
|
8
|
+
# Set to false to disable the silencer
|
9
|
+
cattr_accessor :silencer
|
10
|
+
self.silencer = true
|
11
|
+
|
12
|
+
# Silences the logger for the duration of the block.
|
13
|
+
def silence(temporary_level = nil)
|
14
|
+
temporary_level = Log4r::ERROR unless temporary_level
|
15
|
+
if silencer
|
16
|
+
begin
|
17
|
+
old_logger_level, self.level = level, temporary_level
|
18
|
+
yield self
|
19
|
+
ensure
|
20
|
+
self.level = old_logger_level
|
21
|
+
end
|
22
|
+
else
|
23
|
+
yield self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Convenience method for logging exceptions
|
28
|
+
def log_exception(exception, details = {})
|
29
|
+
details = details.stringify_keys
|
30
|
+
max = details.keys.max { |a,b| a.length <=> b.length }
|
31
|
+
env = details.keys.sort.inject [] do |env, key|
|
32
|
+
env << '* ' + ("%-*s: %s" % [max.length, key, details[key].to_s.strip])
|
33
|
+
end
|
34
|
+
|
35
|
+
details_str = env.join("\n")
|
36
|
+
trace = exception.backtrace.join("\n")
|
37
|
+
error("Exception '#{exception.class_name}', '#{exception.message}', details:\n#{details_str}\nBacktrace:\n#{trace}")
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "socket"
|
2
|
+
|
3
|
+
module Lumber
|
4
|
+
|
5
|
+
# Initializes log4r system. Needs to happen in
|
6
|
+
# config/environment.rb before Rails::Initializer.run
|
7
|
+
#
|
8
|
+
# Options:
|
9
|
+
#
|
10
|
+
# * :root - defaults to RAILS_ROOT if defined
|
11
|
+
# * :env - defaults to RAILS_ENV if defined
|
12
|
+
# * :config_file - defaults to <root>}/config/log4r.yml
|
13
|
+
# * :log_file - defaults to <root>}/log/<env>.log
|
14
|
+
#
|
15
|
+
# All config options get passed through to the log4r
|
16
|
+
# configurator for use in defining outputters
|
17
|
+
#
|
18
|
+
def self.init(opts = {})
|
19
|
+
opts[:root] ||= RAILS_ROOT if defined?(RAILS_ROOT)
|
20
|
+
opts[:env] ||= RAILS_ENV if defined?(RAILS_ENV)
|
21
|
+
opts[:config_file] ||= "#{opts[:root]}/config/log4r.yml"
|
22
|
+
opts[:log_file] ||= "#{opts[:root]}/log/#{opts[:env]}.log"
|
23
|
+
raise "Lumber.init missing one of :root, :env" unless opts[:root] && opts[:env]
|
24
|
+
|
25
|
+
cfg = Log4r::YamlConfigurator
|
26
|
+
opts.each do |k, v|
|
27
|
+
cfg[k.to_s] = v
|
28
|
+
end
|
29
|
+
cfg['hostname'] = Socket.gethostname
|
30
|
+
|
31
|
+
cfg.load_yaml_file(opts[:config_file])
|
32
|
+
|
33
|
+
# Workaround for rails bug: http://dev.rubyonrails.org/ticket/8665
|
34
|
+
if defined?(RAILS_DEFAULT_LOGGER)
|
35
|
+
Object.send(:remove_const, :RAILS_DEFAULT_LOGGER)
|
36
|
+
end
|
37
|
+
Object.const_set('RAILS_DEFAULT_LOGGER', Log4r::Logger['rails'])
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
# Makes :logger exist independently for subclasses and sets that logger
|
42
|
+
# to one that inherits from base_class for each subclass as its created.
|
43
|
+
# This allows you to have a finer level of control over logging, for example,
|
44
|
+
# put just a single class, or heirarchy of classes, into debug log level
|
45
|
+
#
|
46
|
+
# for example:
|
47
|
+
#
|
48
|
+
# Lumber.setup_logger_heirarchy(ActiveRecord::Base, "rails::models")
|
49
|
+
#
|
50
|
+
# causes all models that get created to have a log4r logger named
|
51
|
+
# "rails::models::<class_name>". This class can individually be
|
52
|
+
# put into debug log mode in production (see {log4r docs}[http://log4r.sourceforge.net/manual.html]), and log
|
53
|
+
# output will include "<class_name>" on every log from this class
|
54
|
+
# so that you can tell where a log statement came from
|
55
|
+
#
|
56
|
+
def self.setup_logger_heirarchy(base_class, parent_fullname)
|
57
|
+
base_class.class_eval do
|
58
|
+
class_inheritable_accessor :logger
|
59
|
+
self.logger = Log4r::Logger.new(parent_fullname)
|
60
|
+
|
61
|
+
class << self
|
62
|
+
def inherited_with_lumber_log4r(subclass)
|
63
|
+
inherited_without_lumber_log4r(subclass)
|
64
|
+
subclass.logger = Log4r::Logger.new("#{logger.fullname}::#{subclass.name}")
|
65
|
+
end
|
66
|
+
alias_method_chain :inherited, :lumber_log4r
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/lib/lumber.rb
ADDED
data/test/lumber_test.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lumber
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Conway
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-03 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thoughtbot-shoulda
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: log4r
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: Lumber tries to make it easy to use the more robust log4r logging system within your rails application. To do this it sets up log4r configuration from a yml file, and provides utility methods for adding a :logger accessor to classes dynamicaly as they get created.
|
36
|
+
email: matt@conwaysplace.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- LICENSE
|
43
|
+
- README.rdoc
|
44
|
+
files:
|
45
|
+
- LICENSE
|
46
|
+
- README.rdoc
|
47
|
+
- TODO
|
48
|
+
- VERSION
|
49
|
+
- generators/lumber/USAGE
|
50
|
+
- generators/lumber/lumber_generator.rb
|
51
|
+
- generators/lumber/templates/log4r.yml
|
52
|
+
- lib/lumber.rb
|
53
|
+
- lib/lumber/log4r.rb
|
54
|
+
- lib/lumber/lumber.rb
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://github.com/wr0ngway/lumber
|
57
|
+
licenses: []
|
58
|
+
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options:
|
61
|
+
- --charset=UTF-8
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: "0"
|
75
|
+
version:
|
76
|
+
requirements: []
|
77
|
+
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 1.3.4
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: Lumber integrates the log4r logging system within your application.
|
83
|
+
test_files:
|
84
|
+
- test/lumber_test.rb
|
85
|
+
- test/test_helper.rb
|