logging-rails 0.1.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/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.1.0 / 2011-09-13
2
+
3
+ Enhancements
4
+ - Birthday!
data/README.md ADDED
@@ -0,0 +1,65 @@
1
+ logging-rails
2
+ =============
3
+
4
+ A Railtie for for integrating the [Logging](https://github.com/TwP/logging) framework into your Rails 3 application.
5
+
6
+ Features
7
+ --------
8
+
9
+ Install
10
+ -------
11
+
12
+ Add the ```logging-rails``` railtie gem to your rails project's Gemfile and run ```bundle install```.
13
+
14
+ ```ruby
15
+ gem 'logging-rails', :require => 'logging/rails'
16
+ ````
17
+
18
+ A generator is included with the railtie that will create a ```config/logging.rb```
19
+ configuration file for use in your rails project.
20
+
21
+ ```
22
+ rails generate logging:install
23
+ ```
24
+
25
+ Usage
26
+ -----
27
+
28
+ config.log_to
29
+
30
+ Logging.logger['ModelName'].level = :debug
31
+
32
+ Author
33
+ ------
34
+
35
+ Original author: [Elliot Winkler](https://github.com/mcmire)
36
+
37
+ Contributors:
38
+
39
+ * [Tim Pease](https://github.com/TwP)
40
+
41
+ License
42
+ -------
43
+
44
+ The MIT License
45
+
46
+ Copyright (c) 2011 by Tim Pease
47
+
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of this software and associated documentation files (the
50
+ *Software*), to deal in the Software without restriction, including
51
+ without limitation the rights to use, copy, modify, merge, publish,
52
+ distribute, sublicense, and/or sell copies of the Software, and to
53
+ permit persons to whom the Software is furnished to do so, subject to
54
+ the following conditions:
55
+
56
+ The above copyright notice and this permission notice shall be
57
+ included in all copies or substantial portions of the Software.
58
+
59
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
60
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
61
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
62
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
63
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
64
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
65
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+
2
+ begin
3
+ require 'bones'
4
+ rescue LoadError
5
+ abort '### Please install the "bones" gem ###'
6
+ end
7
+
8
+ task :default => 'gem'
9
+
10
+ Bones {
11
+ name 'logging-rails'
12
+ authors 'Tim Pease'
13
+ email 'tim.pease@gmail.com'
14
+ url 'http://rubygems.org/gems/logging-rails'
15
+
16
+ use_gmail
17
+
18
+ depend_on 'logging', '~> 1.6.1'
19
+ }
20
+
@@ -0,0 +1 @@
1
+ require File.expand_path('../logging/rails.rb', __FILE__)
@@ -0,0 +1,68 @@
1
+
2
+ require 'logging'
3
+ include Logging.globally
4
+
5
+ module Logging::Rails
6
+
7
+ # :stopdoc:
8
+ LIBPATH = ::File.expand_path('../..', __FILE__) + ::File::SEPARATOR
9
+ PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
10
+ # :startdoc:
11
+
12
+ class << self
13
+ # Returns the version string for the library.
14
+ #
15
+ def version
16
+ @version ||= File.read(path('version.txt')).strip
17
+ end
18
+
19
+ # Stores the given Logging configuration block for later evalution by the
20
+ # Railtie. This method is used in the 'config/logging.rb' configuration
21
+ # file.
22
+ #
23
+ def configure( &block )
24
+ @configuration = block
25
+ end
26
+
27
+ attr_reader :configuration
28
+
29
+ # Returns the path for Mr Bones. If any arguments are given,
30
+ # they will be joined to the end of the path using <tt>File.join</tt>.
31
+ #
32
+ def path( *args )
33
+ rv = args.empty? ? PATH : ::File.join(PATH, args.flatten)
34
+ if block_given?
35
+ begin
36
+ $LOAD_PATH.unshift PATH
37
+ rv = yield
38
+ ensure
39
+ $LOAD_PATH.shift
40
+ end
41
+ end
42
+ return rv
43
+ end
44
+
45
+ # Returns the lib path for Mr Bones. If any arguments are given,
46
+ # they will be joined to the end of the path using <tt>File.join</tt>.
47
+ #
48
+ def libpath( *args )
49
+ rv = args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
50
+ if block_given?
51
+ begin
52
+ $LOAD_PATH.unshift LIBPATH
53
+ rv = yield
54
+ ensure
55
+ $LOAD_PATH.shift
56
+ end
57
+ end
58
+ return rv
59
+ end
60
+ end
61
+
62
+ libpath {
63
+ require 'logging/rails/railtie'
64
+ require 'logging/rails/mixin'
65
+ }
66
+
67
+ end # Logging::Rails
68
+
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generates the configuration file used by the Logging framework.
3
+
4
+ Example:
5
+ rails generate logging:install
6
+
7
+ This will create:
8
+ config/logging.rb
@@ -0,0 +1,14 @@
1
+
2
+ module Logging::Rails
3
+ module Generators
4
+ class InstallGenerator < ::Rails::Generators::Base
5
+ namespace 'logging:install'
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ def generate_config
9
+ copy_file 'logging.rb', 'config/logging.rb'
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,111 @@
1
+
2
+ Logging::Rails.configure do |config|
3
+
4
+ # Objects will be converted to strings using the :format_as method.
5
+ Logging.format_as :inspect
6
+
7
+ # The default layout used by the appenders.
8
+ layout = Logging.layouts.pattern(:pattern => '[%d] %-5l %c : %m\n')
9
+
10
+ # Setup a color scheme called 'bright' than can be used to add color codes
11
+ # to the pattern layout. Color schemes should only be used with appenders
12
+ # that write to STDOUT or STDERR; inserting terminal color codes into a file
13
+ # is generally considered bad form.
14
+ #
15
+ Logging.color_scheme( 'bright',
16
+ :levels => {
17
+ :info => :green,
18
+ :warn => :yellow,
19
+ :error => :red,
20
+ :fatal => [:white, :on_red]
21
+ },
22
+ :date => :blue,
23
+ :logger => :cyan,
24
+ :message => :magenta
25
+ )
26
+
27
+ # Configure an appender that will write log events to STDOUT. A colorized
28
+ # pattern layout is used to format the log events into strings before
29
+ # writing.
30
+ #
31
+ Logging.appenders.stdout( 'stdout',
32
+ :auto_flushing => true,
33
+ :layout => Logging.layouts.pattern(
34
+ :pattern => '[%d] %-5l %c : %m\n',
35
+ :color_scheme => 'bright'
36
+ )
37
+ ) if config.log_to.include? 'stdout'
38
+
39
+ # Configure an appender that will write log events to a file. The file will
40
+ # be rolled on a daily basis, and the past 7 rolled files will be kept.
41
+ # Older files will be deleted. The default pattern layout is used when
42
+ # formatting log events into strings.
43
+ #
44
+ Logging.appenders.rolling_file( 'file',
45
+ :filename => config.paths['log'].first,
46
+ :keep => 7,
47
+ :age => 'daily',
48
+ :truncate => false,
49
+ :auto_flushing => true,
50
+ :layout => layout
51
+ ) if config.log_to.include? 'file'
52
+
53
+ # Configure an appender that will send an email for "error" and "fatal" log
54
+ # events. All other log events will be ignored. Furthermore, log events will
55
+ # be buffered for one minute (or 200 events) before an email is sent. This
56
+ # is done to prevent a flood of messages.
57
+ #
58
+ Logging.appenders.email( 'email',
59
+ :from => 'server@example.com',
60
+ :to => 'developers@example.com',
61
+ :server => 'smtp.example.com',
62
+ :domain => 'example.com',
63
+ :acct => 'server@example.com',
64
+ :passwd => 'password',
65
+ :subject => "Rails Error [#{%x(uname -n).strip}]",
66
+ :authtype => :login,
67
+
68
+ :auto_flushing => 200, # send an email after 200 messages have been buffered
69
+ :flush_period => 60, # send an email after one minute
70
+ :level => :error, # only process log events that are "error" or "fatal"
71
+ :layout => layout
72
+ ) if config.log_to.include? 'email'
73
+
74
+ # Setup the root logger with the Rails log level and the desired set of
75
+ # appenders. The list of appenders to use should be set in the environment
76
+ # specific configuration file.
77
+ #
78
+ # For example, in a production application you would not want to log to
79
+ # STDOUT, but you would want to send an email for "error" and "fatal"
80
+ # messages:
81
+ #
82
+ # => config/environments/production.rb
83
+ #
84
+ # config.log_to = %w[file email]
85
+ #
86
+ # In development you would want to log to STDOUT and possibly to a file:
87
+ #
88
+ # => config/environments/development.rb
89
+ #
90
+ # config.log_to = %w[stdout file]
91
+ #
92
+ Logging.logger.root.level = config.log_level
93
+ Logging.logger.root.appenders = config.log_to unless config.log_to.empty?
94
+
95
+ # Under Phusion Passenger smart spawning, we need to reopen all IO streams
96
+ # after workers have forked.
97
+ #
98
+ # The rolling file appender uses shared file locks to ensure that only one
99
+ # process will roll the log file. Each process writing to the file must have
100
+ # its own open file descriptor for flock to function properly. Reopening the
101
+ # file descriptors afte forking ensure that each worker has a unique file
102
+ # descriptor.
103
+ #
104
+ if defined?(PhusionPassenger)
105
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
106
+ Logging.reopen if forked
107
+ end
108
+ end
109
+
110
+ end
111
+
@@ -0,0 +1,40 @@
1
+
2
+ module Logging::Rails
3
+
4
+ # Include this module into your ApplicationController to provide
5
+ # per-controller log level configurability. You can also include this module
6
+ # into your models or anywhere else you would like to control the log level.
7
+ #
8
+ # Alternatively, you can use the `include Logging.globally` trick to add a
9
+ # `logger` method to every Object in the ruby interpreter. See
10
+ # https://github.com/TwP/logging/blob/master/lib/logging.rb#L214 for more
11
+ # details.
12
+ #
13
+ module Mixin
14
+
15
+ # This method is called when the module is included into a class. It will
16
+ # extend the including class so it also has a class-level `logger` method.
17
+ #
18
+ def self.included( other )
19
+ other.__send__(:remove_method, :logger) if other.instance_methods.include? :logger
20
+ other.extend self
21
+ end
22
+
23
+ # This method is called when the modules is extended into another class or
24
+ # module. It will remove any existing `logger` method and insert its own
25
+ # version.
26
+ #
27
+ def self.extended( other )
28
+ eigenclass = class << other; self; end
29
+ eigenclass.__send__(:remove_method, :logger) if eigenclass.instance_methods.include? :logger
30
+ end
31
+
32
+ # Returns the logger instance.
33
+ #
34
+ def logger
35
+ @logger ||= ::Logging::Logger[self]
36
+ end
37
+ end # Mixin
38
+
39
+ end # Logging::Rails
40
+
@@ -0,0 +1,53 @@
1
+
2
+ module Logging::Rails
3
+
4
+ # The Railtie is used to inject the Logging framework into the Rails
5
+ # application.
6
+ #
7
+ class Railtie < ::Rails::Railtie
8
+
9
+ generators do
10
+ require File.expand_path('../generators/install_generator', __FILE__)
11
+ end
12
+
13
+ config.before_configuration do
14
+ config.log_to = %w[file]
15
+ end
16
+
17
+ initializer 'logging.configure', :before => 'initialize_logger' do |app|
18
+ file = ::Rails.root.join('config/logging.rb')
19
+ load file if File.exists? file
20
+ ::Logging::Rails.configuration.call app.config if ::Logging::Rails.configuration
21
+ end
22
+
23
+ initializer 'logging.initialize', :before => 'initialize_logger' do
24
+ ::Rails.logger = ::Logging::Logger[::Rails]
25
+ end
26
+
27
+ initializer 'logging.active_record.logger', :before => 'active_record.logger' do
28
+ ActiveSupport.on_load(:active_record) { self.__send__(:include, ::Logging::Rails::Mixin) }
29
+ end
30
+
31
+ initializer 'logging.action_controller.logger', :before => 'action_controller.logger' do
32
+ ActiveSupport.on_load(:action_controller) { self.__send__(:include, ::Logging::Rails::Mixin) }
33
+ end
34
+
35
+ initializer 'logging.action_mailer.logger', :before => 'action_mailer.logger' do
36
+ ActiveSupport.on_load(:action_mailer) { self.__send__(:include, ::Logging::Rails::Mixin) }
37
+ end
38
+
39
+ initializer 'logging.active_support.dependencies.logger' do
40
+ ActiveSupport::Dependencies.logger = ::Logging::Logger[ActiveSupport::Dependencies]
41
+ end
42
+
43
+ initializer 'logging.initialize_cache', :after => 'initialize_cache' do
44
+ ::Rails.cache.logger = ::Logging::Logger[::Rails.cache]
45
+ end
46
+
47
+ config.after_initialize do
48
+ ::Logging.show_configuration if ::Logging::Logger[::Rails].debug?
49
+ end
50
+
51
+ end # Railtie
52
+ end # Logging::Rails
53
+
data/version.txt ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logging-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tim Pease
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-16 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: logging
16
+ requirement: &2166095040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.6.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2166095040
25
+ - !ruby/object:Gem::Dependency
26
+ name: bones
27
+ requirement: &2166094440 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 3.7.1
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2166094440
36
+ description: A Railtie for for integrating the [Logging](https://github.com/TwP/logging)
37
+ framework into your Rails 3 application.
38
+ email: tim.pease@gmail.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files:
42
+ - History.txt
43
+ - lib/logging/rails/generators/USAGE
44
+ files:
45
+ - History.txt
46
+ - README.md
47
+ - Rakefile
48
+ - lib/logging-rails.rb
49
+ - lib/logging/rails.rb
50
+ - lib/logging/rails/generators/USAGE
51
+ - lib/logging/rails/generators/install_generator.rb
52
+ - lib/logging/rails/generators/templates/logging.rb
53
+ - lib/logging/rails/mixin.rb
54
+ - lib/logging/rails/railtie.rb
55
+ - version.txt
56
+ homepage: http://rubygems.org/gems/logging-rails
57
+ licenses: []
58
+ post_install_message:
59
+ rdoc_options:
60
+ - --main
61
+ - README.md
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project: logging-rails
78
+ rubygems_version: 1.8.6
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: A Railtie for for integrating the [Logging](https://github.
82
+ test_files: []