lib/vedeu/support/log.rb in vedeu-0.2.9 vs lib/vedeu/support/log.rb in vedeu-0.2.10

- old
+ new

@@ -1,138 +1,37 @@ -require 'fileutils' -require 'time' - module Vedeu - # Allows the creation of a lock-less log device. + # Provides the ability to log anything to the Vedeu log file. # # @api private - class MonoLogger < Logger + class Log - # Create a trappable Logger instance. - # - # @param logdev [String|IO] The filename (String) or IO object (typically - # STDOUT, STDERR or an open file). - # @param shift_age [] Number of old log files to keep, or frequency of - # rotation (daily, weekly, monthly). - # @param shift_size [] Maximum log file size (only applies when shift_age - # is a number). - # - # @example - # Logger.new(name, shift_age = 7, shift_size = 1048576) - # Logger.new(name, shift_age = 'weekly') - # - def initialize(logdev, shift_age=nil, shift_size=nil) - @progname = nil - @level = DEBUG - @default_formatter = Formatter.new - @formatter = nil - @logdev = nil - if logdev - @logdev = LocklessLogDevice.new(logdev) - end - end + class << self - # Ensures we can always write to the log file by creating a lock-less - # log device. - class LocklessLogDevice < LogDevice - - # @return [] - def initialize(log = nil) - @dev = @filename = @shift_age = @shift_size = nil - if log.respond_to?(:write) and log.respond_to?(:close) - @dev = log - else - @dev = open_logfile(log) - @dev.sync = true - @filename = log + # @return [TrueClass] + def logger + Logger.new(Configuration.log).tap do |log| + log.formatter = proc do |_, time, _, message| + [timestamp(time.utc.iso8601), message, "\n"].join + end end end - # @return [] - def write(message) - @dev.write(message) - rescue Exception => ignored - warn("log writing failed. #{ignored}") - end - - # @return [] - def close - @dev.close rescue nil - end - private - # @return [] - def open_logfile(filename) - if (FileTest.exist?(filename)) - open(filename, (File::WRONLY | File::APPEND)) - else - create_logfile(filename) - end - end + # Returns a formatted (red, underlined) UTC timestamp, + # eg. 2014-10-24T12:34:56Z + # + # @return [String] + def timestamp(utc_time) + return '' if @last_seen == utc_time - # @return [] - def create_logfile(filename) - logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT)) - logdev.sync = true - add_log_header(logdev) - logdev - end + @last_seen = utc_time - # @return [] - def add_log_header(file) - file.write( - "# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName] - ) + "\n\e[4m\e[31m" + utc_time + "\e[39m\e[24m\n" end - end - end - - # Provides the ability to Log anything to the Vedeu log file which is - # hard-coded to reside in `$HOME/.vedeu/vedeu.log`. - # - # @api private - class Log - - # @return [TrueClass] - def self.logger - @logger ||= MonoLogger.new(filename).tap do |log| - log.formatter = proc do |_, time, _, message| - utc_time = time.utc.iso8601 - - [timestamp(utc_time), message, "\n"].join - end - end - end - - private - - def self.timestamp(utc_time) - return "" if @last_seen == utc_time - - @last_seen = utc_time - - "\n\e[4m\e[31m" + utc_time + "\e[39m\e[24m\n" - end - - # @return [String] - def self.filename - @_filename ||= directory + '/vedeu.log' - end - - # @return [String] - def self.directory - FileUtils.mkdir_p(path) unless File.directory?(path) - - path - end - - # @return [String] - def self.path - Dir.home + '/.vedeu' - end + end # Log eigenclass end # Log end # Vedeu