Module: SemanticLogger
- Defined in:
- lib/semantic_logger/base.rb,
lib/semantic_logger.rb,
lib/semantic_logger/logger.rb,
lib/semantic_logger/version.rb,
lib/semantic_logger/loggable.rb,
lib/semantic_logger/appender/base.rb,
lib/semantic_logger/appender/file.rb,
lib/semantic_logger/appender/syslog.rb,
lib/semantic_logger/semantic_logger.rb,
lib/semantic_logger/appender/mongodb.rb,
lib/semantic_logger/appender/wrapper.rb
Overview
Wrapper appender
Wraps the Rails log, log4r, or Ruby Logger with the SemanticLogger API's
Defined Under Namespace
Modules: Appender, Loggable Classes: Base, Logger
Constant Summary collapse
- VERSION =
"2.7.0"- LEVELS =
Logging levels in order of most detailed to most severe
[:trace, :debug, :info, :warn, :error, :fatal]
Class Method Summary collapse
-
.[](klass) ⇒ Object
Return a logger for the supplied class or class_name.
-
.add_appender(appender, log_level = nil, &block) ⇒ Object
Add a new logging appender as a new destination for all log messages emitted from Semantic Logger.
-
.appenders ⇒ Object
Returns [SemanticLogger::Appender::Base] a copy of the list of active appenders for debugging etc.
-
.default_level ⇒ Object
Returns the global default log level for new Logger instances.
-
.default_level=(level) ⇒ Object
Allow for setting the global default log level This change only applies to new loggers, existing logger levels will not be changed in any way.
-
.flush ⇒ Object
Wait until all queued log messages have been written and flush all active appenders.
-
.on_metric(&block) ⇒ Object
Supply a block to be called whenever a metric is seen during benchmark logging.
-
.remove_appender(appender) ⇒ Object
Remove an existing appender Currently only supports appender instances.
-
.reopen ⇒ Object
After forking an active process call SemanticLogger.reopen to re-open any open file handles etc to resources.
Class Method Details
.[](klass) ⇒ Object
Return a logger for the supplied class or class_name
7 8 9 |
# File 'lib/semantic_logger/semantic_logger.rb', line 7 def self.[](klass) SemanticLogger::Logger.new(klass) end |
.add_appender(appender, log_level = nil, &block) ⇒ Object
Add a new logging appender as a new destination for all log messages emitted from Semantic Logger
Appenders will be written to in the order that they are added
If a block is supplied then it will be used to customize the format of the messages sent to that appender. See SemanticLogger::Logger.new for more information on custom formatters
Parameters
appender [String|IO|SemanticLogger::Appender::Base|::Logger]
Filename to write log to
Or,
STDOUT, STDERR, or any IO stream to write log to
Or,
Any SemanticLogger::Appender instance such as
SemanticLogger::Appender::File
SemanticLogger::Appender::Wrapper
SemanticLogger::Appender::Mongodb
Or,
A custom appender derived from SemanticLogger::Appender::Base
Or,
Ruby built-in Logger, or any logger that implements the following methods:
:debug, :info, :warn, :error, :fatal
log_level [Symbol]
Optional
By setting the log_level higher than the SemanticLogger::default_level
this appender can exclude lower level log
Any one of SemanticLogger::LEVELS. For example: :trace, :debug, :info, :warn, :error, :fatal
Examples:
# Send all logging output to Standard Out (Screen)
SemanticLogger.add_appender(STDOUT)
# Send all logging output to a file
SemanticLogger.add_appender('logfile.log')
# Send all logging output to a file and only :info and above to standard output
SemanticLogger.add_appender('logfile.log')
SemanticLogger.add_appender(STDOUT, :info)
Log to an existing logger:
# Send Semantic logging output to an existing logger
require 'logger'
require 'semantic_logger'
# Built-in Ruby logger
log = Logger.new(STDOUT)
log.level = Logger::DEBUG
SemanticLogger.default_level = :debug
SemanticLogger.add_appender(log)
logger = SemanticLogger['Example']
logger.info "Hello World"
logger.debug("Login time", :user => 'Joe', :duration => 100, :ip_address=>'127.0.0.1')
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/semantic_logger/semantic_logger.rb', line 83 def self.add_appender(appender, log_level=nil, &block) appender_instance = if appender.is_a?(String) || appender.is_a?(IO) # $stderr, STDOUT, other IO, or a filename SemanticLogger::Appender::File.new(appender, log_level, &block) elsif appender.is_a? Appender::Base # Already an instance of an appender appender.log_level = log_level if log_level appender.formatter = block if block appender else # Check if the custom appender responds to all the log levels. For example Ruby ::Logger if does_not_implement = LEVELS[1..-1].find{|i| !appender.respond_to?(i)} raise "Supplied appender does not implement:#{does_not_implement}. It must implement all of #{LEVELS[1..-1].inspect}" end raise "Change the log level to #{log_level}, update the log level directly against the supplied appender" if log_level SemanticLogger::Appender::Wrapper.new(appender, &block) end @@appenders << appender_instance # Start appender thread if it is not already running SemanticLogger::Logger.start_appender_thread appender_instance end |
.appenders ⇒ Object
Returns [SemanticLogger::Appender::Base] a copy of the list of active appenders for debugging etc. Use SemanticLogger.add_appender and SemanticLogger.remove_appender to manipulate the active appenders list
119 120 121 |
# File 'lib/semantic_logger/semantic_logger.rb', line 119 def self.appenders @@appenders.clone end |
.default_level ⇒ Object
Returns the global default log level for new Logger instances
19 20 21 |
# File 'lib/semantic_logger/semantic_logger.rb', line 19 def self.default_level @@default_level end |
.default_level=(level) ⇒ Object
Allow for setting the global default log level This change only applies to new loggers, existing logger levels will not be changed in any way
14 15 16 |
# File 'lib/semantic_logger/semantic_logger.rb', line 14 def self.default_level=(level) @@default_level = level end |
.flush ⇒ Object
Wait until all queued log messages have been written and flush all active appenders
125 126 127 |
# File 'lib/semantic_logger/semantic_logger.rb', line 125 def self.flush SemanticLogger::Logger.flush end |
.on_metric(&block) ⇒ Object
Supply a block to be called whenever a metric is seen during benchmark logging
Parameters
block
The block to be called
Example:
SemanticLogger.on_metric do |log_struct|
puts "#{log_struct.metric} was received. Log Struct: #{log_struct.inspect}"
end
149 150 151 |
# File 'lib/semantic_logger/semantic_logger.rb', line 149 def self.on_metric(&block) SemanticLogger::Logger.on_metric(&block) end |
.remove_appender(appender) ⇒ Object
Remove an existing appender Currently only supports appender instances
111 112 113 |
# File 'lib/semantic_logger/semantic_logger.rb', line 111 def self.remove_appender(appender) @@appenders.delete(appender) end |
.reopen ⇒ Object
After forking an active process call SemanticLogger.reopen to re-open any open file handles etc to resources
Note: Only appenders that implement the reopen method will be called
133 134 135 136 137 |
# File 'lib/semantic_logger/semantic_logger.rb', line 133 def self.reopen @@appenders.each {|appender| appender.reopen if appender.respond_to?(:reopen)} # After a fork the appender thread is not running, start it if it is not running SemanticLogger::Logger.start_appender_thread end |