reasonable_log4r 0.9.0
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 +18 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +17 -0
- data/LICENSE +30 -0
- data/README +10 -0
- data/Rakefile +27 -0
- data/init.rb +1 -0
- data/lib/reasonable_log4r.rb +2 -0
- data/lib/reasonable_log4r/monkey_patch_log4r.rb +188 -0
- data/lib/reasonable_log4r/version.rb +4 -0
- data/lib/tasks/desirable_tasks.rake +4 -0
- data/logging/configure-log4r.yml +32 -0
- data/reasonable_log4r.gemspec +20 -0
- metadata +75 -0
data/.gitignore
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
+
|
7
|
+
# Ignore bundler config
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore the default SQLite database.
|
11
|
+
/db/*.sqlite3
|
12
|
+
|
13
|
+
# Ignore all logfiles and tempfiles.
|
14
|
+
/log/*.log
|
15
|
+
/tmp
|
16
|
+
.idea/*
|
17
|
+
database.yml
|
18
|
+
/log/*.pid
|
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
# Declare your gem's dependencies in partitioned.gemspec.
|
4
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
+
# development dependencies will be added by default to the :development group.
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
gem 'log4r', '1.1.10'
|
9
|
+
|
10
|
+
# Declare any dependencies that are still in development here instead of in
|
11
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
12
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
13
|
+
# your gem to rubygems.org.
|
14
|
+
|
15
|
+
# To use debugger
|
16
|
+
# gem 'ruby-debug'
|
data/Gemfile.lock
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Copyright (c) 2010-2012, Fiksu, Inc.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are
|
6
|
+
met:
|
7
|
+
|
8
|
+
o Redistributions of source code must retain the above copyright
|
9
|
+
notice, this list of conditions and the following disclaimer.
|
10
|
+
|
11
|
+
o Redistributions in binary form must reproduce the above copyright
|
12
|
+
notice, this list of conditions and the following disclaimer in the
|
13
|
+
documentation and/or other materials provided with the
|
14
|
+
distribution.
|
15
|
+
|
16
|
+
o Fiksu, Inc. nor the names of its contributors may be used to
|
17
|
+
endorse or promote products derived from this software without
|
18
|
+
specific prior written permission.
|
19
|
+
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
Patches for Log4r
|
2
|
+
=================
|
3
|
+
|
4
|
+
* root loggers are no longer null loggers -- you can add outputters to them
|
5
|
+
* the global logger is used to set a global log level (root is no longer used for this)
|
6
|
+
* yaml configurator has been updated to handle new root logger semantics
|
7
|
+
* yaml configurator has been updated to accept a set of files AND sections (default section: log4r_config)
|
8
|
+
|
9
|
+
What this really means is that you can set up one outputter in the root
|
10
|
+
logger to manage the default logging behavior.
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
|
8
|
+
task :default => :spec
|
9
|
+
|
10
|
+
begin
|
11
|
+
require 'rdoc/task'
|
12
|
+
rescue LoadError
|
13
|
+
require 'rdoc/rdoc'
|
14
|
+
require 'rake/rdoctask'
|
15
|
+
RDoc::Task = Rake::RDocTask
|
16
|
+
end
|
17
|
+
|
18
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
19
|
+
rdoc.rdoc_dir = 'rdoc'
|
20
|
+
rdoc.title = 'ReasonableLog4r'
|
21
|
+
rdoc.options << '--line-numbers'
|
22
|
+
rdoc.rdoc_files.include('README')
|
23
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
24
|
+
end
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'reasonable_log4r.rb'
|
@@ -0,0 +1,188 @@
|
|
1
|
+
require 'log4r/logger'
|
2
|
+
require 'log4r/yamlconfigurator'
|
3
|
+
|
4
|
+
module Log4r
|
5
|
+
class RootLogger < Logger
|
6
|
+
def initialize
|
7
|
+
Log4r.define_levels(*Log4rConfig::LogLevels) # ensure levels are loaded
|
8
|
+
@level = ALL
|
9
|
+
@outputters = []
|
10
|
+
Repository['root'] = self
|
11
|
+
LoggerFactory.define_methods(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def is_root?; true end
|
15
|
+
|
16
|
+
# Set the global level. Any loggers defined thereafter will
|
17
|
+
# not log below the global level regardless of their levels.
|
18
|
+
|
19
|
+
def level=(alevel); @level = alevel end
|
20
|
+
|
21
|
+
# Does nothing
|
22
|
+
def additive=(foo); end
|
23
|
+
|
24
|
+
def outputters=(foo)
|
25
|
+
super
|
26
|
+
end
|
27
|
+
def trace=(foo)
|
28
|
+
super
|
29
|
+
end
|
30
|
+
def add(*foo)
|
31
|
+
super
|
32
|
+
end
|
33
|
+
def remove(*foo)
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class GlobalLogger < Logger
|
39
|
+
include Singleton
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
Log4r.define_levels(*Log4rConfig::LogLevels) # ensure levels are loaded
|
43
|
+
@level = ALL
|
44
|
+
@outputters = []
|
45
|
+
Repository['global'] = self
|
46
|
+
LoggerFactory.undefine_methods(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def is_root?; true end
|
50
|
+
|
51
|
+
# Set the global level. Any loggers defined thereafter will
|
52
|
+
# not log below the global level regardless of their levels.
|
53
|
+
|
54
|
+
def level=(alevel); @level = alevel end
|
55
|
+
|
56
|
+
# Does nothing
|
57
|
+
def outputters=(foo); end
|
58
|
+
# Does nothing
|
59
|
+
def trace=(foo); end
|
60
|
+
# Does nothing
|
61
|
+
def additive=(foo); end
|
62
|
+
# Does nothing
|
63
|
+
def add(*foo); end
|
64
|
+
# Does nothing
|
65
|
+
def remove(*foo); end
|
66
|
+
end
|
67
|
+
|
68
|
+
class Logger
|
69
|
+
# Returns the root logger. Identical to Logger.global
|
70
|
+
def self.root; return RootLogger.instance end
|
71
|
+
# Returns the root logger. Identical to Logger.root
|
72
|
+
def self.global; return GlobalLogger.instance end
|
73
|
+
|
74
|
+
# Get a logger with a fullname from the repository or nil if logger
|
75
|
+
# wasn't found.
|
76
|
+
|
77
|
+
def self.[](_fullname)
|
78
|
+
# forces creation of RootLogger if it doesn't exist yet.
|
79
|
+
if _fullname=='root'
|
80
|
+
return RootLogger.instance
|
81
|
+
end
|
82
|
+
if _fullname=='global'
|
83
|
+
return GlobalLogger.instance
|
84
|
+
end
|
85
|
+
Repository[_fullname]
|
86
|
+
end
|
87
|
+
|
88
|
+
class LoggerFactory #:nodoc:
|
89
|
+
# we want to log iff root.lev <= lev && logger.lev <= lev
|
90
|
+
# BTW, root is guaranteed to be defined by this point
|
91
|
+
def self.define_methods(logger)
|
92
|
+
undefine_methods(logger)
|
93
|
+
globlev = Log4r::Logger['global'].level
|
94
|
+
return if logger.level == OFF or globlev == OFF
|
95
|
+
toggle_methods(globlev, logger)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Logger logging methods are defined here.
|
99
|
+
def self.set_log(logger, lname)
|
100
|
+
# invoke caller iff the logger invoked is tracing
|
101
|
+
tracercall = (logger.trace ? "caller" : "nil")
|
102
|
+
# maybe pass parent a logevent. second arg is the switch
|
103
|
+
if logger.additive && !logger.is_root?
|
104
|
+
parentcall = "@parent.#{lname.downcase}(event, true)"
|
105
|
+
end
|
106
|
+
mstr = %-
|
107
|
+
def logger.#{lname.downcase}(data=nil, propagated=false)
|
108
|
+
if propagated then event = data
|
109
|
+
else
|
110
|
+
data = yield if block_given?
|
111
|
+
event = LogEvent.new(#{lname}, self, #{tracercall}, data)
|
112
|
+
end
|
113
|
+
@outputters.each {|o| o.#{lname.downcase}(event) }
|
114
|
+
#{parentcall}
|
115
|
+
end
|
116
|
+
-
|
117
|
+
module_eval mstr
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class YamlConfigurator
|
123
|
+
# Given a filename, loads the YAML configuration for Log4r.
|
124
|
+
def self.load_yaml_files(filenames, yaml_sections = ['log4r_config'])
|
125
|
+
cfgs = []
|
126
|
+
yaml_sections.each do |yaml_section|
|
127
|
+
filenames.each do |filename|
|
128
|
+
log4r_config = nil
|
129
|
+
docs = File.open(filename)
|
130
|
+
begin
|
131
|
+
YAML.load_documents(docs) do |doc|
|
132
|
+
doc.has_key?(yaml_section) and log4r_config = doc[yaml_section] and break
|
133
|
+
end
|
134
|
+
rescue Exception => e
|
135
|
+
raise "YAML error, file: #{filename}, error=#{e.message}"
|
136
|
+
end
|
137
|
+
if log4r_config
|
138
|
+
cfgs << log4r_config
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
cfgs.each do |cfg|
|
144
|
+
decode_pre_config(cfg['pre_config']) unless cfg['pre_config'].nil?
|
145
|
+
end
|
146
|
+
|
147
|
+
cfgs.each do |cfg|
|
148
|
+
cfg['outputters'].each{ |op| decode_outputter(op)} unless cfg['outputters'].nil?
|
149
|
+
end
|
150
|
+
|
151
|
+
cfgs.each do |cfg|
|
152
|
+
cfg['loggers'].each{ |lo| decode_logger(lo)} unless cfg['loggers'].nil?
|
153
|
+
end
|
154
|
+
|
155
|
+
cfgs.each do |cfg|
|
156
|
+
cfg['logserver'].each{ |lo| decode_logserver(lo)} unless cfg['logserver'].nil?
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.decode_pre_config(pre)
|
161
|
+
return Logger.root if pre.nil?
|
162
|
+
decode_custom_levels( pre['custom_levels'])
|
163
|
+
global_config( pre['global'])
|
164
|
+
root_config( pre['root'])
|
165
|
+
decode_parameters( pre['parameters'])
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.root_config(e)
|
169
|
+
return if e.nil?
|
170
|
+
globlev = e['level']
|
171
|
+
return if globlev.nil?
|
172
|
+
lev = LNAMES.index(globlev) # find value in LNAMES
|
173
|
+
Log4rTools.validate_level(lev, 4) # choke on bad level
|
174
|
+
Logger.root.level = lev
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.decode_logger(lo)
|
178
|
+
if lo['name'] == 'root'
|
179
|
+
l = Logger.root
|
180
|
+
elsif lo['name'] == 'global'
|
181
|
+
l = Logger.global
|
182
|
+
else
|
183
|
+
l = Logger.new lo['name']
|
184
|
+
end
|
185
|
+
decode_logger_common(l, lo)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
log4r_config:
|
2
|
+
pre_config:
|
3
|
+
custom_levels:
|
4
|
+
- DEBUG
|
5
|
+
- DEBUG_FINE
|
6
|
+
- DEBUG_MEDIUM
|
7
|
+
- DEBUG_GROSS
|
8
|
+
- DETAIL
|
9
|
+
- INFO
|
10
|
+
- WARN
|
11
|
+
- ALARM
|
12
|
+
- ERROR
|
13
|
+
- FATAL
|
14
|
+
global:
|
15
|
+
level: ALL
|
16
|
+
root :
|
17
|
+
level: ALL
|
18
|
+
|
19
|
+
loggers:
|
20
|
+
- name : root
|
21
|
+
level : ALL
|
22
|
+
outputters:
|
23
|
+
- stdout
|
24
|
+
|
25
|
+
outputters:
|
26
|
+
- type : StdoutOutputter
|
27
|
+
name : stdout
|
28
|
+
level : DEBUG
|
29
|
+
formatter:
|
30
|
+
date_pattern: '%y%m%d %H:%M:%S.%L'
|
31
|
+
pattern : '%d %p %C %l %M'
|
32
|
+
type : PatternFormatter
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require "reasonable_log4r/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'reasonable_log4r'
|
8
|
+
s.version = ReasonableLog4r::VERSION
|
9
|
+
s.license = 'New BSD License'
|
10
|
+
s.date = '2012-09-16'
|
11
|
+
s.summary = "Patches log4r gem to make it work in a reasonable way(Tm)."
|
12
|
+
s.description = "Reasonable patches to log4r gem including root loggers having outputters and yaml configurator supporting many files and yaml sections."
|
13
|
+
s.authors = ["Keith Gabryelski"]
|
14
|
+
s.email = 'keith@fiksu.com'
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.require_path = 'lib'
|
18
|
+
s.homepage = 'http://github.com/fiksu/reasonable_log4r'
|
19
|
+
s.add_dependency 'log4r', '1.1.10'
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reasonable_log4r
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Keith Gabryelski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: log4r
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.10
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.1.10
|
30
|
+
description: Reasonable patches to log4r gem including root loggers having outputters
|
31
|
+
and yaml configurator supporting many files and yaml sections.
|
32
|
+
email: keith@fiksu.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- Gemfile
|
39
|
+
- Gemfile.lock
|
40
|
+
- LICENSE
|
41
|
+
- README
|
42
|
+
- Rakefile
|
43
|
+
- init.rb
|
44
|
+
- lib/reasonable_log4r.rb
|
45
|
+
- lib/reasonable_log4r/monkey_patch_log4r.rb
|
46
|
+
- lib/reasonable_log4r/version.rb
|
47
|
+
- lib/tasks/desirable_tasks.rake
|
48
|
+
- logging/configure-log4r.yml
|
49
|
+
- reasonable_log4r.gemspec
|
50
|
+
homepage: http://github.com/fiksu/reasonable_log4r
|
51
|
+
licenses:
|
52
|
+
- New BSD License
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 1.8.24
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: Patches log4r gem to make it work in a reasonable way(Tm).
|
75
|
+
test_files: []
|