Class: TestaLogger::Logger

Inherits:
Object
  • Object
show all
Includes:
Persistence
Defined in:
lib/testa_logger/logger.rb,
lib/testa_logger/logger/options.rb,
lib/testa_logger/logger/dispatcher.rb,
lib/testa_logger/logger/persistence.rb

Overview

noinspection RubyTooManyMethodsInspection

Defined Under Namespace

Modules: Persistence Classes: Dispatcher, Options

Constant Summary collapse

TAG =
"TestaLogger"
DEBUG =

Low-level information, mostly for developers.

0
INFO =

Generic (useful) information about system operation.

1
WARN =

A warning.

2
ERROR =

A handleable error condition.

3
FATAL =

An unhandleable error that results in a program crash.

4
UNKNOWN =

An unknown message that should always be logged.

5
NO_TAG =
"NO-TAG"

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Persistence

#init_s3_client, #persist, #persist_with_record

Constructor Details

#initialize(app, group, subgroup = nil, options = {}) ⇒ Logger

Returns a new instance of Logger.



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/testa_logger/logger.rb', line 36

def initialize(app, group, subgroup = nil, options = {})
  @app = app
  @group = group
  @subgroup = subgroup
  @options = Options.new(app, group, subgroup, options)
  create_log_file
  setup_dispatcher
  # start_write_thread
  init_s3_client if @options.persist
  # at_exit { flush_queue }
end

Instance Attribute Details

#appString

Returns:

  • (String)


13
14
15
# File 'lib/testa_logger/logger.rb', line 13

def app
  @app
end

#groupString

Returns:

  • (String)


13
14
15
# File 'lib/testa_logger/logger.rb', line 13

def group
  @group
end

#optionsOptions

Returns:



16
17
18
# File 'lib/testa_logger/logger.rb', line 16

def options
  @options
end

#subgroupString

Returns:

  • (String)


13
14
15
# File 'lib/testa_logger/logger.rb', line 13

def subgroup
  @subgroup
end

#write_threadThread

Returns:

  • (Thread)


19
20
21
# File 'lib/testa_logger/logger.rb', line 19

def write_thread
  @write_thread
end

Instance Method Details

#create_log_fileObject



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/testa_logger/logger.rb', line 48

def create_log_file
  options.filepath = "/tmp/#{SecureRandom.uuid}.log" if options.filepath.nil?
  FileUtils.mkdir_p(File.dirname(options.filepath))
  before_shift = options.persist ? proc { persist } : nil
  @log_device = LogDevice.new(options.filepath,
                              shift_age: options.shift_age,
                              shift_size: 1_048_576,
                              shift_period_suffix: "%d%m%Y",
                              binmode: false,
                              before_shift: before_shift)
end

#debug(tag = nil, *args, &block) ⇒ Object



91
92
93
# File 'lib/testa_logger/logger.rb', line 91

def debug(tag = nil, *args, &block)
  add_log_to_queue(DEBUG, tag, args, &block)
end

#debug!Object

Sets the severity to DEBUG.



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

def debug!
  options.level = DEBUG
end

#debug?Boolean

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

Returns:

  • (Boolean)


125
126
127
# File 'lib/testa_logger/logger.rb', line 125

def debug?
  options.level <= DEBUG
end

#error(tag = nil, *args, &block) ⇒ Object



103
104
105
# File 'lib/testa_logger/logger.rb', line 103

def error(tag = nil, *args, &block)
  add_log_to_queue(ERROR, tag, args, &block)
end

#error!Object

Sets the severity to ERROR.



163
164
165
# File 'lib/testa_logger/logger.rb', line 163

def error!
  options.level = ERROR
end

#error?Boolean

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

Returns:

  • (Boolean)


158
159
160
# File 'lib/testa_logger/logger.rb', line 158

def error?
  options.level <= ERROR
end

#fatal(tag = nil, *args, &block) ⇒ Object



107
108
109
# File 'lib/testa_logger/logger.rb', line 107

def fatal(tag = nil, *args, &block)
  add_log_to_queue(FATAL, tag, args, &block)
end

#fatal!Object

Sets the severity to FATAL.



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

def fatal!
  options.level = FATAL
end

#fatal?Boolean

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

Returns:

  • (Boolean)


169
170
171
# File 'lib/testa_logger/logger.rb', line 169

def fatal?
  options.level <= FATAL
end

#flush_queueObject



77
78
79
# File 'lib/testa_logger/logger.rb', line 77

def flush_queue
  queue_pop while @queue.size.positive?
end

#formatterObject



87
88
89
# File 'lib/testa_logger/logger.rb', line 87

def formatter
  options.formatter
end

#info(tag = nil, *args, &block) ⇒ Object



95
96
97
# File 'lib/testa_logger/logger.rb', line 95

def info(tag = nil, *args, &block)
  add_log_to_queue(INFO, tag, args, &block)
end

#info!Object

Sets the severity to INFO.



141
142
143
# File 'lib/testa_logger/logger.rb', line 141

def info!
  options.level = INFO
end

#info?Boolean

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

Returns:

  • (Boolean)


136
137
138
# File 'lib/testa_logger/logger.rb', line 136

def info?
  options.level <= INFO
end

#levelObject



178
179
180
# File 'lib/testa_logger/logger.rb', line 178

def level
  options.level
end

#level=(severity) ⇒ Object



115
116
117
118
119
120
121
# File 'lib/testa_logger/logger.rb', line 115

def level=(severity)
  if severity.is_a?(Integer)
    options.level = severity
  else
    SEV_LABEL.index(severity.to_s.downcase.upcase).to_i
  end
end

#queue_popObject



81
82
83
84
85
# File 'lib/testa_logger/logger.rb', line 81

def queue_pop
  text = @queue.pop
  Thread.stop if Thread.current["stop"]
  @log_device.write(text)
end

#setup_dispatcherObject



60
61
62
63
64
65
66
# File 'lib/testa_logger/logger.rb', line 60

def setup_dispatcher
  @dispatcher = Dispatcher.new(
    self,
    options.faye_url,
    options.faye_token
  )
end

#silence(severity = ERROR, &block) ⇒ Object



182
183
184
185
186
187
188
# File 'lib/testa_logger/logger.rb', line 182

def silence(severity = ERROR, &block)
  old_level = options.level
  options.level = severity
  result = block&.call
  options.level = old_level
  result
end

#start_write_threadObject



68
69
70
71
72
73
74
75
# File 'lib/testa_logger/logger.rb', line 68

def start_write_thread
  @pid = Process.pid
  # we must use this queue in order to be able to collect logs in trap context
  @queue = Queue.new
  @write_thread = Thread.new do
    loop { queue_pop }
  end
end

#unknown(tag = nil, *args, &block) ⇒ Object



111
112
113
# File 'lib/testa_logger/logger.rb', line 111

def unknown(tag = nil, *args, &block)
  add_log_to_queue(UNKNOWN, tag, args, &block)
end

#warn(tag = nil, *args, &block) ⇒ Object



99
100
101
# File 'lib/testa_logger/logger.rb', line 99

def warn(tag = nil, *args, &block)
  add_log_to_queue(WARN, tag, args, &block)
end

#warn!Object

Sets the severity to WARN.



152
153
154
# File 'lib/testa_logger/logger.rb', line 152

def warn!
  options.level = WARN
end

#warn?Boolean

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

Returns:

  • (Boolean)


147
148
149
# File 'lib/testa_logger/logger.rb', line 147

def warn?
  options.level <= WARN
end