lib/hanami/logger.rb in hanami-utils-1.0.0.beta3 vs lib/hanami/logger.rb in hanami-utils-1.0.0.rc1

- old
+ new

@@ -108,11 +108,11 @@ # @api private NEW_LINE = $/ # @since 1.0.0.beta1 # @api private - RESERVED_KEYS = [:app, :severity, :time].freeze + RESERVED_KEYS = %i(app severity time).freeze include Utils::ClassAttribute class_attribute :subclasses self.subclasses = Set.new @@ -254,15 +254,130 @@ # Initialize a logger # # @param application_name [String] an optional application name used for # tagging purposes # - # @param stream [String, IO, StringIO, Pathname] an optional log stream. This is a filename - # (String) or IO object (typically `$stdout`, `$stderr`, or an open file). + # @param args [Array<Object>] an optional set of arguments to honor Ruby's + # `Logger#initialize` arguments. See Ruby documentation for details. # + # @param stream [String, IO, StringIO, Pathname] an optional log stream. + # This is a filename (`String`) or `IO` object (typically `$stdout`, + # `$stderr`, or an open file). It defaults to `$stderr`. + # + # @param level [Integer,String] logging level. It can be expressed as an + # integer, according to Ruby's `Logger` from standard library or as a + # string with the name of the level + # + # @param formatter [Symbol,#_format] a formatter - We support `:json` as + # JSON formatter or an object that respond to `#_format(data)` + # # @since 0.5.0 - def initialize(application_name = nil, stream: $stdout, level: DEBUG, formatter: nil) - super(stream) + # + # @see https://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html#class-Logger-label-How+to+create+a+logger + # + # @example Basic usage + # require 'hanami/logger' + # + # logger = Hanami::Logger.new + # logger.info "Hello World" + # + # # => [Hanami] [DEBUG] [2017-03-30 15:41:01 +0200] Hello World + # + # @example Custom application name + # require 'hanami/logger' + # + # logger = Hanami::Logger.new('bookshelf') + # logger.info "Hello World" + # + # # => [bookshelf] [DEBUG] [2017-03-30 15:44:23 +0200] Hello World + # + # @example Logger level (Integer) + # require 'hanami/logger' + # + # logger = Hanami::Logger.new(level: 2) # WARN + # logger.info "Hello World" + # # => true + # + # logger.info "Hello World" + # # => true + # + # logger.warn "Hello World" + # # => [Hanami] [WARN] [2017-03-30 16:00:48 +0200] Hello World + # + # @example Logger level (Constant) + # require 'hanami/logger' + # + # logger = Hanami::Logger.new(level: Hanami::Logger::WARN) + # logger.info "Hello World" + # # => true + # + # logger.info "Hello World" + # # => true + # + # logger.warn "Hello World" + # # => [Hanami] [WARN] [2017-03-30 16:00:48 +0200] Hello World + # + # @example Logger level (String) + # require 'hanami/logger' + # + # logger = Hanami::Logger.new(level: 'warn') + # logger.info "Hello World" + # # => true + # + # logger.info "Hello World" + # # => true + # + # logger.warn "Hello World" + # # => [Hanami] [WARN] [2017-03-30 16:00:48 +0200] Hello World + # + # @example Use a file + # require 'hanami/logger' + # + # logger = Hanami::Logger.new(stream: "development.log") + # logger.info "Hello World" + # + # # => true + # + # File.read("development.log") + # # => + # # # Logfile created on 2017-03-30 15:52:48 +0200 by logger.rb/56815 + # # [Hanami] [DEBUG] [2017-03-30 15:52:54 +0200] Hello World + # + # @example Period rotation + # require 'hanami/logger' + # + # # Rotate daily + # logger = Hanami::Logger.new('bookshelf', 'daily', stream: 'development.log') + # + # @example File size rotation + # require 'hanami/logger' + # + # # leave 10 old log files where the size is about 1,024,000 bytes + # logger = Hanami::Logger.new('bookshelf', 10, 1024000, stream: 'development.log') + # + # @example Use a StringIO + # require 'hanami/logger' + # + # stream = StringIO.new + # logger = Hanami::Logger.new(stream: stream) + # logger.info "Hello World" + # + # # => true + # + # stream.rewind + # stream.read + # + # # => "[Hanami] [DEBUG] [2017-03-30 15:55:22 +0200] Hello World\n" + # + # @example JSON formatter + # require 'hanami/logger' + # + # logger = Hanami::Logger.new(formatter: :json) + # logger.info "Hello World" + # + # # => {"app":"Hanami","severity":"DEBUG","time":"2017-03-30T13:57:59Z","message":"Hello World"} + def initialize(application_name = nil, *args, stream: $stdout, level: DEBUG, formatter: nil) + super(stream, *args) @level = _level(level) @stream = stream @application_name = application_name @formatter = Formatter.fabricate(formatter, self.application_name)