class_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 +3 -0
- data/Gemfile +4 -0
- data/README.md +130 -0
- data/Rakefile +2 -0
- data/class_logger.gemspec +21 -0
- data/lib/class_logger/version.rb +3 -0
- data/lib/class_logger.rb +52 -0
- metadata +71 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
Class Logger
|
2
|
+
============
|
3
|
+
|
4
|
+
Makes adding multiple loggers or custom loggers to any ruby class. Written mainly to have certain models in Rails log to a different file while maintaining the original logger (or overwriting it).
|
5
|
+
|
6
|
+
The idea came from [eandrejko](https://github.com/eandrejko) and his class_logger. I just added some more flexibility and made it to work outside of Rails.
|
7
|
+
|
8
|
+
Installation
|
9
|
+
------------
|
10
|
+
|
11
|
+
gem install class_logger
|
12
|
+
|
13
|
+
Options
|
14
|
+
-------
|
15
|
+
|
16
|
+
ClassLogger supports a bunch of options that are passed straight to the Logger. Most of these options should make sense, but they are described in further detail in Logger's rdoc files.
|
17
|
+
|
18
|
+
<dl>
|
19
|
+
<dt><strong>:rotate</strong></dt>
|
20
|
+
<dd>Set this to daily, weekly, etc. - anything Logger supports</dd>
|
21
|
+
|
22
|
+
<dt><strong>:max_size</strong></dt>
|
23
|
+
<dd>Set this to the size you want the log to rotate at (or set +rotate+ above)</dd>
|
24
|
+
|
25
|
+
<dt><strong>:keep</strong></dt>
|
26
|
+
<dd>Set this to how many logfiles you want to keep after rotating (or set +rotate+ above)</dd>
|
27
|
+
|
28
|
+
<dt><strong>:path</strong></dt>
|
29
|
+
<dd>The path to your log folder. (Default: "%<rails_root>s/log") -- see Interpolations section</dd>
|
30
|
+
|
31
|
+
<dt><strong>:in</strong></dt>
|
32
|
+
<dd>This is the name of your logfile. (Use: "%<class_name>s" to interpolate the class's name) (Default: "%<class_name>s.log") -- see Interpolations section</dd>
|
33
|
+
|
34
|
+
<dt><strong>:as</strong></dt>
|
35
|
+
<dd>This is the method your logger will be available to the class as. (Default: logger)</dd>
|
36
|
+
|
37
|
+
<dt><strong>:formatter</strong></dt>
|
38
|
+
<dd>This can be any custom proc or method you want to assign. (See Logger's rdoc files for more details on this)</dd>
|
39
|
+
|
40
|
+
<dt><strong>:level</strong></dt>
|
41
|
+
<dd>This is the log level</dd>
|
42
|
+
</dl>
|
43
|
+
|
44
|
+
Interpolations
|
45
|
+
--------------
|
46
|
+
|
47
|
+
The following can be used in the *path* or *in* options.
|
48
|
+
|
49
|
+
<dl>
|
50
|
+
<dt><strong>%<rails_root>s</strong></dt>
|
51
|
+
<dd>Will replace itself with Rails.root when in a rails app</dd>
|
52
|
+
|
53
|
+
<dt><strong>%<current>s</strong></dt>
|
54
|
+
<dd>Will replace itself with the +dirname+ of the file</dd>
|
55
|
+
|
56
|
+
<dt><strong>%<parent>s</strong></dt>
|
57
|
+
<dd>Will replace itself with the parent directory of the file</dd>
|
58
|
+
|
59
|
+
<dt><strong>%<class_name>s</strong></dt>
|
60
|
+
<dd>Will replace itself with the name of the class.</dd>
|
61
|
+
</dl>
|
62
|
+
|
63
|
+
Example Usage
|
64
|
+
-------------
|
65
|
+
|
66
|
+
<pre>
|
67
|
+
# simple use case to override active records logger
|
68
|
+
class Transaction < ActiveRecord::Base
|
69
|
+
include ClassLogger
|
70
|
+
has_logger
|
71
|
+
|
72
|
+
def process!
|
73
|
+
logger.info "Creating transation: #{amount}" # => goes to log/transaction.log
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# custom logs for special models within rails
|
79
|
+
# specifying a custom logfile and logger name
|
80
|
+
class Transaction < ActiveRecord::Base
|
81
|
+
include ClassLogger
|
82
|
+
has_logger :in => 'gateway.log', :as => :gateway_logger
|
83
|
+
|
84
|
+
def process!
|
85
|
+
gateway_logger.info "Creating transation: #{amount}" # => goes to log/gateway.log
|
86
|
+
logger.info "Hello default logger!" # => goes to log/<environment>.log
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# overriding active record's default logger with a custom logfile
|
91
|
+
class Transaction < ActiveRecord::Base
|
92
|
+
include ClassLogger
|
93
|
+
has_logger :in => 'gateway.log'
|
94
|
+
|
95
|
+
def process!
|
96
|
+
logger.info "Creating transation: #{amount}" # => goes to log/gateway.log
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# create a logger for a module
|
101
|
+
module Something
|
102
|
+
include ClassLogger
|
103
|
+
has_logger :path => File.expand_path("../log", __FILE__), :in => 'my_module.log'
|
104
|
+
has_logger :path => '/var/log', :in => 'utoh.log', :as => :utoh_logger
|
105
|
+
|
106
|
+
# has_logger only makes instance methods, so we need to wrap it up
|
107
|
+
def self.logger
|
108
|
+
self.loggers[:logger]
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.utoh
|
112
|
+
self.loggers[:utoh_logger]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
Something.logger.info "Testing 123"
|
116
|
+
Something.utoh.error "oops!"
|
117
|
+
|
118
|
+
# inside a class with a custom formatter
|
119
|
+
class Something
|
120
|
+
include ClassLogger
|
121
|
+
has_logger :path => "%<current>s/log", :rotate => :daily,
|
122
|
+
:formatter => proc{ |severity, time, program_name, message| "[%s](Something): %s\n" % [severity, message] }
|
123
|
+
|
124
|
+
def initialize
|
125
|
+
logger.debug "Created Something."
|
126
|
+
end
|
127
|
+
end
|
128
|
+
Something.new
|
129
|
+
Something.loggers[:logger].debug "System logger"
|
130
|
+
</pre>
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "class_logger/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "class_logger"
|
7
|
+
s.version = ClassLogger::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Rob Hurring"]
|
10
|
+
s.email = ["rob@ubrio.us"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Adds custom logger(s) to any ruby module or class}
|
13
|
+
s.description = %q{Allows you to create multiple loggers for any given class}
|
14
|
+
|
15
|
+
s.rubyforge_project = "class_logger"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
data/lib/class_logger.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module ClassLogger
|
4
|
+
def self.included(base)
|
5
|
+
base.extend DSL
|
6
|
+
end
|
7
|
+
|
8
|
+
module DSL
|
9
|
+
def has_logger(options = {})
|
10
|
+
send :extend, ClassMethods
|
11
|
+
default_options = {
|
12
|
+
:rotate => nil,
|
13
|
+
:max_size => nil,
|
14
|
+
:keep => nil,
|
15
|
+
:path => "%<rails_root>s/log",
|
16
|
+
:in => "%<class_name>s.log",
|
17
|
+
:as => :logger,
|
18
|
+
:formatter => proc{ |severity, time, program_name, message| "[%s,%s]: %s\n" % [severity, time, message] },
|
19
|
+
:level => ::Logger::DEBUG
|
20
|
+
}
|
21
|
+
self.setup_logger(default_options.merge(options))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module ClassMethods
|
26
|
+
def loggers
|
27
|
+
@@loggers ||= {}
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup_logger(options)
|
31
|
+
interpolations = {
|
32
|
+
:rails_root => (defined?(Rails) ? Rails.root : ''),
|
33
|
+
:class_name => self.to_s.downcase,
|
34
|
+
:current => File.dirname($FILENAME),
|
35
|
+
:parent => File.expand_path('../../', $FILENAME)
|
36
|
+
}
|
37
|
+
|
38
|
+
file_path = File.join(options[:path], options[:in]).to_s % interpolations
|
39
|
+
if (rotate = options[:rotate])
|
40
|
+
_logger = ::Logger.new(file_path, rotate)
|
41
|
+
else
|
42
|
+
_logger = ::Logger.new(file_path, options[:keep], options[:max_size])
|
43
|
+
end
|
44
|
+
_logger.formatter = options[:formatter]
|
45
|
+
_logger.level = options[:level]
|
46
|
+
|
47
|
+
as = options[:as]
|
48
|
+
self.loggers[as] = _logger
|
49
|
+
define_method(as){ self.class.loggers[as] }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: class_logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Rob Hurring
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-27 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Allows you to create multiple loggers for any given class
|
22
|
+
email:
|
23
|
+
- rob@ubrio.us
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- README.md
|
34
|
+
- Rakefile
|
35
|
+
- class_logger.gemspec
|
36
|
+
- lib/class_logger.rb
|
37
|
+
- lib/class_logger/version.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: ""
|
40
|
+
licenses: []
|
41
|
+
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project: class_logger
|
66
|
+
rubygems_version: 1.3.7
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: Adds custom logger(s) to any ruby module or class
|
70
|
+
test_files: []
|
71
|
+
|