Class: Bovem::Logger
- Inherits:
-
Logger
- Object
- Logger
- Bovem::Logger
- Defined in:
- lib/bovem/logger.rb
Overview
A custom logger.
Constant Summary collapse
- LEVEL_NAMES =
List of valid logger levels.
{"DEBUG" => :cyan, "INFO" => :green, "WARN" => :yellow, "ERROR" => :red, "FATAL" => :magenta}.freeze
Instance Attribute Summary collapse
-
#device ⇒ IO|String
readonly
The file or device to log messages to.
Class Method Summary collapse
-
.create(file = nil, level: Logger::INFO, formatter: nil) ⇒ Logger
Creates a new logger.
-
.default_file ⇒ String|IO
The default file for logging.
-
.default_formatter ⇒ Proc
The default formatter for logging.
-
.get_real_file(file) ⇒ String|IO
Translates a file to standard input or standard output in some special cases.
-
.start_time ⇒ Time
The log time of the first logger.
Instance Method Summary collapse
-
#initialize(logdev, shift_age = 0, shift_size = 1_048_576) ⇒ Logger
constructor
Creates a new logger.
Constructor Details
#initialize(logdev, shift_age = 0, shift_size = 1_048_576) ⇒ Logger
Creates a new logger.
25 26 27 28 |
# File 'lib/bovem/logger.rb', line 25 def initialize(logdev, shift_age = 0, shift_size = 1_048_576) @device = logdev super(logdev, shift_age, shift_size) end |
Instance Attribute Details
#device ⇒ IO|String (readonly)
Returns The file or device to log messages to.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bovem/logger.rb', line 12 class Logger < ::Logger attr_reader :device # List of valid logger levels. LEVEL_NAMES = {"DEBUG" => :cyan, "INFO" => :green, "WARN" => :yellow, "ERROR" => :red, "FATAL" => :magenta}.freeze # Creates a new logger. # # @see http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html # # @param logdev [String|IO] The log device. This is a filename (String) or IO object (typically STDOUT, STDERR, or an open file). # @param shift_age [Fixnum] Number of old log files to keep, or frequency of rotation (daily, weekly or monthly). # @param shift_size [Fixnum] Maximum logfile size (only applies when shift_age is a number). def initialize(logdev, shift_age = 0, shift_size = 1_048_576) @device = logdev super(logdev, shift_age, shift_size) end # Creates a new logger. # # @param file [String|IO] The log device. This is a filename (String) or IO object (typically STDOUT, STDERR, or an open file). # @param level [Fixnum] The minimum severity to log. See http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html for valid levels. # @param formatter [Proc] The formatter to use for logging. # @return [Logger] The new logger. def self.create(file = nil, level: Logger::INFO, formatter: nil) rv = new(get_real_file(file || default_file)) rv.level = level.to_integer rv.formatter = formatter || default_formatter rv rescue raise Bovem::Errors::InvalidLogger end # Translates a file to standard input or standard output in some special cases. # # @param file [String] The string to translate. # @return [String|IO] The translated file name. def self.get_real_file(file) case file when "STDOUT" then $stdout when "STDERR" then $stderr else file end end # The default file for logging. # @return [String|IO] The default file for logging. def self.default_file @default_file ||= $stdout end # The default formatter for logging. # @return [Proc] The default formatter for logging. def self.default_formatter @default_formatter ||= ::Proc.new do |severity, datetime, _, msg| color = LEVEL_NAMES.fetch(severity, :white) header = Bovem::Console.replace_markers( sprintf( "{mark=bright-#{color}}[%s T+%0.5f] %s:{/mark}", datetime.strftime("%Y/%b/%d %H:%M:%S"), [datetime.to_f - start_time.to_f, 0].max, severity.rjust(5) ) ) sprintf("%s %s\n", header, msg) end end # The log time of the first logger. This allows to show a `T+0.1234` information into the log. # @return [Time] The log time of the first logger. def self.start_time @start_time ||= ::Time.now end end |
Class Method Details
.create(file = nil, level: Logger::INFO, formatter: nil) ⇒ Logger
Creates a new logger.
36 37 38 39 40 41 42 43 |
# File 'lib/bovem/logger.rb', line 36 def self.create(file = nil, level: Logger::INFO, formatter: nil) rv = new(get_real_file(file || default_file)) rv.level = level.to_integer rv.formatter = formatter || default_formatter rv rescue raise Bovem::Errors::InvalidLogger end |
.default_file ⇒ String|IO
The default file for logging.
59 60 61 |
# File 'lib/bovem/logger.rb', line 59 def self.default_file @default_file ||= $stdout end |
.default_formatter ⇒ Proc
The default formatter for logging.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/bovem/logger.rb', line 65 def self.default_formatter @default_formatter ||= ::Proc.new do |severity, datetime, _, msg| color = LEVEL_NAMES.fetch(severity, :white) header = Bovem::Console.replace_markers( sprintf( "{mark=bright-#{color}}[%s T+%0.5f] %s:{/mark}", datetime.strftime("%Y/%b/%d %H:%M:%S"), [datetime.to_f - start_time.to_f, 0].max, severity.rjust(5) ) ) sprintf("%s %s\n", header, msg) end end |
.get_real_file(file) ⇒ String|IO
Translates a file to standard input or standard output in some special cases.
49 50 51 52 53 54 55 |
# File 'lib/bovem/logger.rb', line 49 def self.get_real_file(file) case file when "STDOUT" then $stdout when "STDERR" then $stderr else file end end |
.start_time ⇒ Time
The log time of the first logger. This allows to show a T+0.1234
information into the log.
82 83 84 |
# File 'lib/bovem/logger.rb', line 82 def self.start_time @start_time ||= ::Time.now end |