Class: StrftimeLogger

Inherits:
Object
  • Object
show all
Includes:
Severity
Defined in:
lib/strftime_logger.rb,
lib/strftime_logger/bridge.rb,
lib/strftime_logger/formatter.rb,
lib/strftime_logger/adapter/file.rb,
lib/strftime_logger/ltsv_formatter.rb

Defined Under Namespace

Modules: Severity Classes: Adapter, Bridge, Formatter, LtsvFormatter

Constant Summary collapse

SEV_LABEL =
[:debug, :info, :warn, :error, :fatal, :unknown]

Constants included from Severity

Severity::DEBUG, Severity::ERROR, Severity::FATAL, Severity::INFO, Severity::UNKNOWN, Severity::WARN

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path, adapter = nil) ⇒ StrftimeLogger

Example:

StrftimeLogger.new('/var/log/foo/webapp.log.%Y%m%d') # String
StrftimeLogger.new('/var/log/foo/webapp.log.%Y%m%d_%H')

Exampl2:

# Hash
StrftimeLogger.new({
  debug:   '/var/log/foo/webapp.debug.log.%Y%m%d',
  info:    '/var/log/foo/webapp.info.log.%Y%m%d',
  warn:    '/var/log/foo/webapp.warn.log.%Y%m%d',
  error:   '/var/log/foo/webapp.error.log.%Y%m%d',
  fatal:   '/var/log/foo/webapp.fatal.log.%Y%m%d',
  unknown: '/var/log/foo/webapp.unknown.log.%Y%m%d'
})

Exampl3:

# With Specified Adapter
StrftimeLogger.new('/var/log/foo/webapp.log.%Y%m%d', [StrftimeLogger::Adapter::File])

Parameters:

  • path (Hash|IO|String)
  • adapters (Hash)


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
# File 'lib/strftime_logger.rb', line 54

def initialize(path, adapter = nil)
  @level = DEBUG
  @default_formatter = StrftimeLogger::Formatter.new
  @formatter = nil

  if path.is_a?(Hash)
    @path = path
  else
    # make a hash
    keys = SEV_LABEL
    vals = [path] * keys.size
    @path = Hash[*(keys.zip(vals).flatten(1))]
  end

  if adapter.nil?
    @adapter = {}
  elsif adapter.is_a?(Hash)
    @adapter = adapter
  else
    # make a hash
    keys = SEV_LABEL
    vals = [adapter] * keys.size
    @adapter = Hash[*(keys.zip(vals).flatten(1))]
  end

  @bridge = {}
  SEV_LABEL.each do |level|
    @bridge[level] = StrftimeLogger::Bridge.new(level, @path[level], @adapter[level])
  end
end

Instance Attribute Details

#formatterObject

Returns the value of attribute formatter.



28
29
30
# File 'lib/strftime_logger.rb', line 28

def formatter
  @formatter
end

#levelObject

Logging severity threshold (e.g. Logger::INFO).



27
28
29
# File 'lib/strftime_logger.rb', line 27

def level
  @level
end

Class Method Details

.str_to_level(str) ⇒ Object

Raises:

  • (ArgumentError)


90
91
92
93
94
# File 'lib/strftime_logger.rb', line 90

def self.str_to_level(str)
  level = SEV_LABEL.index(str.to_s.downcase.to_sym)
  raise ArgumentError, 'An argument for #log_level= must be a String or Symbol such as DEBUG, :warn' unless level
  level
end

Instance Method Details

#add(severity, message = nil, &block) ⇒ Object Also known as: log

Parameters:

  • severity (Int)

    log severity



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/strftime_logger.rb', line 101

def add(severity, message = nil, &block)
  severity ||= UNKNOWN

  if @bridge.nil? or severity < @level
    return true
  end

  log_level = SEV_LABEL[severity]
  if @bridge[log_level].nil?
    @bridge[log_level] = StrftimeLogger::Adapter.new(log_level, @path[log_level])
  end

  @bridge[log_level].write(format_message(severity, message, &block))
  true
end

#closeObject



167
168
169
170
171
172
# File 'lib/strftime_logger.rb', line 167

def close
  SEV_LABEL.each do |level|
    next if @bridge[level].nil?
    @bridge[level].close
  end
end

#debug(msg, &block) ⇒ Object



118
119
120
# File 'lib/strftime_logger.rb', line 118

def debug(msg, &block)
  add(DEBUG, msg, &block)
end

#debug?Boolean

Returns true iff the current severity level allows for the printing of DEBUG messages.

Returns:

  • (Boolean)


149
# File 'lib/strftime_logger.rb', line 149

def debug?; @level <= DEBUG; end

#error(msg, &block) ⇒ Object



130
131
132
# File 'lib/strftime_logger.rb', line 130

def error(msg, &block)
  add(ERROR, msg, &block)
end

#error?Boolean

Returns true iff the current severity level allows for the printing of ERROR messages.

Returns:

  • (Boolean)


161
# File 'lib/strftime_logger.rb', line 161

def error?; @level <= ERROR; end

#fatal(msg, &block) ⇒ Object



134
135
136
# File 'lib/strftime_logger.rb', line 134

def fatal(msg,  &block)
  add(FATAL, msg, &block)
end

#fatal?Boolean

Returns true iff the current severity level allows for the printing of FATAL messages.

Returns:

  • (Boolean)


165
# File 'lib/strftime_logger.rb', line 165

def fatal?; @level <= FATAL; end

#format_message(severity, message = nil, &block) ⇒ Object



174
175
176
# File 'lib/strftime_logger.rb', line 174

def format_message(severity, message = nil, &block)
  (@formatter || @default_formatter).call(severity, message, &block)
end

#info(msg, &block) ⇒ Object



122
123
124
# File 'lib/strftime_logger.rb', line 122

def info(msg, &block)
  add(INFO, msg, &block)
end

#info?Boolean

Returns true iff the current severity level allows for the printing of INFO messages.

Returns:

  • (Boolean)


153
# File 'lib/strftime_logger.rb', line 153

def info?; @level <= INFO; end

#log_level=(log_level) ⇒ Object



96
97
98
# File 'lib/strftime_logger.rb', line 96

def log_level=(log_level)
  @level = self.class.str_to_level(log_level)
end

#unknown(msg, &block) ⇒ Object



138
139
140
# File 'lib/strftime_logger.rb', line 138

def unknown(msg, &block)
  add(UNKNOWN, msg, &block)
end

#warn(msg, &block) ⇒ Object



126
127
128
# File 'lib/strftime_logger.rb', line 126

def warn(msg, &block)
  add(WARN, msg, &block)
end

#warn?Boolean

Returns true iff the current severity level allows for the printing of WARN messages.

Returns:

  • (Boolean)


157
# File 'lib/strftime_logger.rb', line 157

def warn?; @level <= WARN; end

#write(msg) ⇒ Object



142
143
144
145
# File 'lib/strftime_logger.rb', line 142

def write(msg)
  msg.chomp! if msg.respond_to?(:chomp!)
  @bridge[:info].write(format_message(nil, msg))
end