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