Permalink
Browse files

adding basic readme and examples

  • Loading branch information...
1 parent ab52933 commit dd9e33d5e01baa3735c30dd6b0d1dabd592c9775 @robhurring committed Jan 27, 2011
Showing with 98 additions and 0 deletions.
  1. +98 −0 README.rdoc
View
@@ -0,0 +1,98 @@
+= Class Logger
+
+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).
+
+== Installation
+
+gem install class_logger
+
+== Options
+
+ 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.
+
+ rotate:: Set this to daily, weekly, etc. - anything Logger supports
+ max_size:: Set this to the size you want the log to rotate at (or set +rotate+ above)
+ keep:: Set this to how many logfiles you want to keep after rotating (or set +rotate+ above)
+ path:: The path to your log folder. (Default: "%<rails_root>s/log")
+ in:: This is the name of your logfile. (Use: "%<class_name>s" to interpolate the class's name) (Default: "%<class_name>s.log")
+ as:: This is the method your logger will be available to the class as. (Default: logger)
+ formatter:: This can be any custom proc or method you want to assign. (See Logger's rdoc files for more details on this)
+ level:: This is the log level
+
+== Interpolations
+
+ The following can be used in the +path+ or +in+ options.
+
+ %<rails_root>s:: Will replace itself with Rails.root when in a rails app
+ %<current>s:: Will replace itself with the +dirname+ of the file
+ %<parent>s:: Will replace itself with the parent directory of the file
+ %<class_name>s:: Will replace itself with the name of the class.
+
+== Usage
+
+ # simple use case to override active records logger
+ class Transaction < ActiveRecord::Base
+ include ClassLogger
+ has_logger
+
+ def process!
+ logger.info "Creating transation: #{amount}" # => goes to log/transaction.log
+ end
+ end
+
+
+ # custom logs for special models within rails
+ # specifying a custom logfile and logger name
+ class Transaction < ActiveRecord::Base
+ include ClassLogger
+ has_logger :in => 'gateway.log', :as => :gateway_logger
+
+ def process!
+ gateway_logger.info "Creating transation: #{amount}" # => goes to log/gateway.log
+ logger.info "Hello default logger!" # => goes to log/<environment>.log
+ end
+ end
+
+ # overriding active record's default logger with a custom logfile
+ class Transaction < ActiveRecord::Base
+ include ClassLogger
+ has_logger :in => 'gateway.log'
+
+ def process!
+ logger.info "Creating transation: #{amount}" # => goes to log/gateway.log
+ end
+ end
+
+ # create a logger for a module
+ module Something
+ include ClassLogger
+ has_logger :path => File.expand_path("../log", __FILE__), :in => 'my_module.log'
+ has_logger :path => '/var/log', :in => 'utoh.log', :as => :utoh_logger
+
+ # has_logger only makes instance methods, so we need to wrap it up
+ def self.logger
+ self.loggers[:logger]
+ end
+
+ def self.utoh
+ self.loggers[:utoh_logger]
+ end
+ end
+ Something.logger.info "Testing 123"
+ Something.utoh.error "oops!"
+
+ # inside a class with a custom formatter
+ class Something
+ include ClassLogger
+ has_logger :path => "%<current>s/log", :rotate => :daily,
+ :formatter => proc{ |severity, time, program_name, message| "[%s](Something): %s\n" % [severity, message] }
+
+ def initialize
+ logger.debug "Created Something."
+ end
+ end
+ Something.new
+ Something.loggers[:logger].debug "System logger"
+
+
+

0 comments on commit dd9e33d

Please sign in to comment.