Created
June 3, 2013 01:19
-
-
Save keithrbennett/5695649 to your computer and use it in GitHub Desktop.
Demonstrates the use of the Ruby 'logging' gem.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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!