lib/semantic_logger/formatters/base.rb in semantic_logger-4.0.0 vs lib/semantic_logger/formatters/base.rb in semantic_logger-4.1.0

- old
+ new

@@ -1,30 +1,49 @@ +require 'time' module SemanticLogger module Formatters class Base - attr_accessor :time_format, :precision, :log_host, :log_application + attr_accessor :time_format, :log_host, :log_application + # Time precision varies by Ruby interpreter + # JRuby 9.1.8.0 supports microseconds + PRECISION = + if defined?(JRuby) + if (JRUBY_VERSION.to_f >= 9.1) + maint = JRUBY_VERSION.match(/\A\d\.\d\.(\d)\./)[1].to_i + (maint >= 8) || (JRUBY_VERSION.to_f > 9.1) ? 6 : 3 + else + 3 + end + else + 6 + end + TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%#{PRECISION}N" + # Parameters # time_format: [String|Symbol|nil] # See Time#strftime for the format of this string # :iso_8601 Outputs an ISO8601 Formatted timestamp # nil: Returns Empty string for time ( no time is output ). # Default: '%Y-%m-%d %H:%M:%S.%6N' - def initialize(options = {}) - options = options.dup - @precision = defined?(JRuby) ? 3 : 6 - default_format = "%Y-%m-%d %H:%M:%S.%#{precision}N" - @time_format = options.has_key?(:time_format) ? options.delete(:time_format) : default_format - @log_host = options.has_key?(:log_host) ? options.delete(:log_host) : true - @log_application = options.has_key?(:log_application) ? options.delete(:log_application) : true - raise(ArgumentError, "Unknown options: #{options.inspect}") if options.size > 0 + def initialize(time_format: TIME_FORMAT, log_host: true, log_application: true) + @time_format = time_format + @log_host = log_host + @log_application = log_application end + # Date & time + def time + format_time(log.time) if time_format + end + + private + # Return the Time as a formatted string def format_time(time) case time_format when :iso_8601 - time.utc.iso8601(precision) + time.utc.iso8601(PRECISION) when nil '' else time.strftime(time_format) end