Skip to content

Instantly share code, notes, and snippets.

@keithrbennett
Created June 3, 2013 01:19
Show Gist options
  • Save keithrbennett/5695649 to your computer and use it in GitHub Desktop.
Save keithrbennett/5695649 to your computer and use it in GitHub Desktop.
Demonstrates the use of the Ruby 'logging' gem.
#!/usr/bin/env ruby
require 'facter'
require 'logging'
require 'pry'
require 'yaml'
GLOBAL_LOGGING = true
Logging.init :traze, :debug, :info, :warn, :error, :fatal
Logging.color_scheme( 'bright',
:levels => {
:info => :green,
:warn => :yellow,
:error => :red,
:fatal => [:white, :on_red]
},
:date => :blue,
:logger => :cyan,
:message => :magenta
)
def message_separator
('-' * 79) + "\n"
end
def verbose_layout
pattern_string = message_separator + '%F : %L\n%d %l %M()\n\n%m\n'
Logging.layouts.pattern(pattern: pattern_string)
end
def stdout_layout
pattern_string = message_separator + '%l %F : %L : %M()\n\n%m\n'
Logging.layouts.pattern(pattern: pattern_string, color_scheme: 'bright')
end
def configure_logger(logger)
logger.trace = true
logger.add_appenders(*appenders)
logger
end
def appenders
[
# Stdout
Logging.appenders.stdout('stdout',
level: :debug,
layout: stdout_layout),
# Trace log, recreated on each run.
Logging.appenders.file('trace.log',
level: :traze,
layout: verbose_layout,
truncate: true),
# Trace log, cumulative.
Logging.appenders.rolling_file('trace_perm.log',
level: :traze,
layout: verbose_layout,
truncate: false,
age: 5 * 60,
roll_by: :date),
# Error log (errors only), recreated on each run.
Logging.appenders.file('error.log',
level: :error,
layout: verbose_layout,
truncate: true),
# Error log (errors only), cumulative.
Logging.appenders.rolling_file('error_perm.log',
level: :error,
layout: verbose_layout,
truncate: false,
age: 5 * 60,
roll_by: :date)
]
end
def configure_global_logging
include Logging.globally
configure_logger(logger)
logger.info "Using global logging."
end
def create_logger
configure_logger(Logging.logger['global'])
end
def startup_message
data = {
'host name' => Facter.hostname,
'domain' => Facter.domain,
'fqdn' => Facter.fqdn,
'ip address' => Facter.ipaddress,
'ipv6 address' => Facter.ipaddress6,
'free memory' => Facter.memoryfree,
'total memory' => Facter.memorysize,
'physical processor count' => Facter.physicalprocessorcount,
'processor count' => Facter.processorcount,
'machine product name' => Facter.productname,
'architecture' => Facter.architecture,
'os' => Facter.operatingsystem,
'os release' => Facter.operatingsystemrelease,
'kernel' => Facter.kernel,
'kernel major version' => Facter.kernelmajversion,
'kernel release' => Facter.kernelrelease,
}
data.keys.inject('') { |msg, key| msg << "%25s: %s\n" % [key, data[key]] }
end
def demo_the_logger(my_logger)
my_logger.info "Starting test:\n\n#{startup_message}"
my_logger.traze 'Entered method'
my_logger.debug "logger: #{my_logger}"
my_logger.info "This program is running under the Ruby platform: #{RUBY_PLATFORM}."
my_logger.warn 'Only 1% of disk space is free.'
my_logger.error 'Input record has an invalid format.'
begin
puts 1 / 0
my_logger.info "Successfully divided by zero for the first time in human history!"
rescue => e
my_logger.error e
end
my_logger.fatal 'Bundler cannot connect to the gem server.'
sio = StringIO.new
my_logger._dump_configuration(sio, 4)
my_logger.debug "Logger: \n#{sio.string}"
logger.debug { "Logger: \n#{logger.to_yaml}" }
end
if GLOBAL_LOGGING
configure_global_logging
demo_the_logger(logger)
else
demo_the_logger(create_logger)
end
@ufo2mstar
Copy link

Hey @keithrbennett, the above example seems to be out of date.. commenting out some errors makes it run, but it would be cool if you can get this working the way you intended the example please 😄 Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment