RTALogger 2.1.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c31a37c1f8f9ce88c8fae11d7df9fe88d397e9e21da9c8b13ddce48fe5e216c5
4
- data.tar.gz: 920e2000e9cf216dea8251dd6e6b5b2e3e2c114533e7459cd698eb2131c69c65
3
+ metadata.gz: 7e81de465e520fd877b0a8be28723ca3df6edc4770a06811cd1321a47a9fe009
4
+ data.tar.gz: ee63b302ec830dcc25cab746f2b5adb6071b2677c1ed4d07884b933946b3e7ca
5
5
  SHA512:
6
- metadata.gz: 626deeb001694ef40e87743bb61742f1db0cbeeb46125f1f7b3185a52d33494d811439c3bc9d669c15e60563c9dc71d305159d3c801c06cdfcce82c4450970d0
7
- data.tar.gz: 2a3a39efce340c0e0e204ebf6390d17283f6804b3846b3b086e849c25d92e9aec9994beb2a06ab6c81cf10a9abc8af0ded19d37317adbbe5abe16c1744a43aff
6
+ metadata.gz: 527aead929bac69790be99d22b5d5e0232c96908f8c7935fb9877a2561b2b4cea82bb3ac4cd5b0f869b677e202d52e6b0bddd3bb845a2154b45436729fd3a9ad
7
+ data.tar.gz: be339710ef0c3cf2dd045e165062a058ba3b8a509777522f519505888255f051e5994cb8c2929d17797c06d7b8475d7f08b5e37d2c9d6d5ce48155b067c54ba7
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- RTALogger (2.1.0)
4
+ RTALogger (2.3.0)
5
5
  fluent-logger (~> 0.9)
6
6
  jbuilder (~> 2.10)
7
7
 
data/README.md CHANGED
@@ -94,7 +94,7 @@ To use log manager APIs, first step is to have a quick review on Log Data Struct
94
94
  "app_name": "TestApp",
95
95
  "severity_level": "trace",
96
96
  "buffer_size": 100,
97
- "flush_wait_seconds": 10,
97
+ "flush_wait_seconds": 5,
98
98
  "repositories":
99
99
  [
100
100
  {
@@ -104,7 +104,8 @@ To use log manager APIs, first step is to have a quick review on Log Data Struct
104
104
  "formatter":
105
105
  {
106
106
  "type": "text",
107
- "delimiter": "|"
107
+ "delimiter": "|",
108
+ "colorize": true
108
109
  },
109
110
  "filters":
110
111
  [
@@ -206,7 +207,7 @@ the result will be:
206
207
  "app_name": "TestApp",
207
208
  "severity_level": "trace",
208
209
  "buffer_size": 100,
209
- "flush_wait_seconds": 10,
210
+ "flush_wait_seconds": 5,
210
211
  "repositories":
211
212
  [
212
213
  {
@@ -216,7 +217,8 @@ the result will be:
216
217
  "formatter":
217
218
  {
218
219
  "type": "text",
219
- "delimiter": "|"
220
+ "delimiter": "|",
221
+ "colorize": true
220
222
  },
221
223
  "filters":
222
224
  [
@@ -291,7 +293,7 @@ the result will be:
291
293
  - buffer_size: Minimune possible value for this attribute is 100 and defines memory buffer size (number of buffered log objects) to
292
294
  decread api consumers wait time. when the buffer is full the flush operation will
293
295
  save buffered logs to log repositoies.
294
- - flush_wait_seconds: Minimum possible value for this attribure is 10 seconds and defines time in soconds which log managers wait to flush buffered log records
296
+ - flush_wait_seconds: Minimum possible value for this attribure is 5 seconds and defines time in soconds which log managers wait to flush buffered log records
295
297
  to log repository.
296
298
  - repositories: Array of log repositories. It is possible to define multiple log repositories to
297
299
  store log data. there are variaty of log repositories and it is possible to
@@ -305,6 +307,8 @@ the result will be:
305
307
  - "foramtter" is the text, json or any custome defined types as LogRecord formatter
306
308
  - "type": ["text"/"json"] type of formatter
307
309
  - "delimiter": [any text delimiter you need.(as an instance pipe line "|")]
310
+ - "colorize": [true/false] default value of this attribute is false.
311
+ if you need to colorize your out put format on standard output set this attribute to true.
308
312
  if formatter not defined then the json formatter will be used
309
313
  2- file: Store log data in a file.
310
314
  - "type": "console"
@@ -348,13 +352,14 @@ the result will be:
348
352
  "enable": [true/false] this will enable or disable filtering opration of current filter.
349
353
  "default_regex": "valid regual expression" to compare with corresponding attribute.
350
354
  * It's possible to implement customize filter classes and integerate with RTALogger filter factory.
355
+ * In RTALogger version 2.2.0 colorize out put format is availabel.
351
356
  - topics: This is an optional item. When you need to customize a specific topic severity level or
352
357
  enable value, you can define the settings here.
353
358
  - title: The topic title to customize. (mandatoy).
354
359
  - severity_level: Defines which level of log data will be stored in log repositories.
355
360
  - enable: [true/false] to enable or disable logging process of the topic.
356
361
  ```
357
- ###Some useful features
362
+ ##Some useful features
358
363
  ```ruby
359
364
  # change log manager app name at run time
360
365
  log_manager.app_name = 'myTestApp'
@@ -387,7 +392,7 @@ the result will be:
387
392
  # log_manager.enable
388
393
  # log_manager.default_severity_level
389
394
  # log_manager.buffer_size (minimum is 100)
390
- # log_manager.flush_wait_time (minimum 15 second)
395
+ # log_manager.flush_wait_time (minimum 5 second)
391
396
  # repository.enable
392
397
  # topic.enable
393
398
  # topic.severity_level
@@ -1,3 +1,3 @@
1
1
  module RTALogger
2
- VERSION = '2.1.0'.freeze
2
+ VERSION = '2.3.0'.freeze
3
3
  end
@@ -9,7 +9,7 @@ module RTALogger
9
9
  begin
10
10
  load lib_file
11
11
  rescue
12
- raise "unable to load formatter class file: #{lib_file}"
12
+ raise "unable to load filter class file: #{lib_file}"
13
13
  end
14
14
 
15
15
  filter_class_name = 'RTALogger::' + ('log_filter_' + type.to_s).split('_').map(&:capitalize).join
@@ -21,7 +21,7 @@ module RTALogger
21
21
  return nil unless formatter_class
22
22
  result = formatter_class.new
23
23
 
24
- return result if config_json.empty?
24
+ return result if config_json.nil? || config_json.empty?
25
25
  result.load_config(config_json) if result.present?
26
26
  return result
27
27
  end
@@ -3,11 +3,14 @@ module RTALogger
3
3
  def initialize
4
4
  @title = self.class.to_s.split('::').last.underscore
5
5
  @enable = true
6
+ @action = :accept
6
7
  end
7
8
 
8
9
  attr_accessor :title
9
10
  attr_accessor :enable
10
11
  attr_accessor :default_regex
12
+ # possible values: accept, ignore
13
+ attr_accessor :action
11
14
 
12
15
  def match_conditions(log_record)
13
16
  return true if !@enable
@@ -18,11 +21,13 @@ module RTALogger
18
21
  @title = config_json['title'] if config_json['title'].present?
19
22
  @enable = config_json['enable'].nil? ? true : config_json['enable'].present?
20
23
  @default_regex = config_json['default_regex'] if config_json['default_regex'].present?
24
+ @action = valid_action(config_json['action']) if config_json['action'].present?
21
25
  end
22
26
 
23
27
  def apply_run_time_config(config_json)
24
28
  @enable = config_json['enable'].nil? ? true : config_json['enable'].present?
25
29
  @default_regex = config_json['default_regex'] if config_json['default_regex'].present?
30
+ @action = valid_action(config_json['action']) if config_json['action'].present?
26
31
  end
27
32
 
28
33
  def to_builder
@@ -35,5 +40,18 @@ module RTALogger
35
40
 
36
41
  jb
37
42
  end
43
+
44
+ private
45
+
46
+ def valid_action(action_value)
47
+ case action_value.to_s.downcase
48
+ when 'accept'
49
+ :accept
50
+ when 'ignore'
51
+ :ignore
52
+ else
53
+ :accept
54
+ end
55
+ end
38
56
  end
39
57
  end
@@ -7,7 +7,9 @@ module RTALogger
7
7
  result = super
8
8
  return result unless result
9
9
 
10
- return default_regex.present? ? (Regexp.new(@default_regex).match(log_record.context_id.to_s)) : result
10
+ result = default_regex.present? ? (Regexp.new(@default_regex).match(log_record.context_id.to_s)) : result
11
+ result = !result if @action == :ignore
12
+ return result
11
13
  end
12
14
  end
13
15
  end
@@ -7,7 +7,9 @@ module RTALogger
7
7
  result = super
8
8
  return result unless result
9
9
 
10
- return default_regex.present? ? (Regexp.new(@default_regex).match(log_record.full_message)) : result
10
+ result = default_regex.present? ? (Regexp.new(@default_regex).match(log_record.full_message)) : result
11
+ result = !result if @action == :ignore
12
+ return result
11
13
  end
12
14
  end
13
15
  end
@@ -7,7 +7,9 @@ module RTALogger
7
7
  result = super
8
8
  return result unless result
9
9
 
10
- return default_regex.present? ? (Regexp.new(@default_regex).match(log_record.topic_title)) : result
10
+ result = default_regex.present? ? (Regexp.new(@default_regex).match(log_record.topic_title)) : result
11
+ result = !result if @action == :ignore
12
+ return result
11
13
  end
12
14
  end
13
15
  end
@@ -1,16 +1,24 @@
1
1
  require 'jbuilder'
2
2
  require_relative 'string'
3
+ require_relative 'severity_level'
3
4
 
4
5
  module RTALogger
5
6
  class LogFormatterBase
7
+ include SeverityLevel
8
+
6
9
  def initialize
7
10
  @delimiter = '|'
11
+ @colorize = false
8
12
  end
9
13
 
10
14
  attr_accessor :delimiter
15
+ attr_accessor :colorize
11
16
 
12
17
  def load_config(config_json)
18
+ return unless config_json.present?
19
+
13
20
  @delimiter = config_json['delimiter'].nil? ? true : config_json['delimiter']
21
+ @colorize = config_json['colorize'].nil? ? false : config_json['colorize']
14
22
  end
15
23
 
16
24
  def format(log_record)
@@ -20,7 +28,8 @@ module RTALogger
20
28
  def to_builder
21
29
  jb = Jbuilder.new do |json|
22
30
  json.type self.class.to_s.split('::').last.underscore.sub('log_formatter_', '')
23
- json.delimiter delimiter
31
+ json.delimiter @delimiter
32
+ json.colorize @colorize
24
33
  end
25
34
 
26
35
  jb
@@ -29,5 +38,41 @@ module RTALogger
29
38
  def reveal_config
30
39
  to_builder.target!
31
40
  end
41
+
42
+ def apply_run_time_config(config_json)
43
+ return unless config_json.present?
44
+
45
+ @delimiter = config_json['delimiter'] unless config_json['delimiter'].nil?
46
+ @colorize = config_json['colorize'] unless config_json['colorize'].nil?
47
+ end
48
+
49
+ protected
50
+
51
+ def severity_text(severity)
52
+ text = parse_severity_level_to_s(severity)
53
+ text = severity_colorized_text(severity, text) if @colorize
54
+ return text
55
+ end
56
+
57
+ def severity_colorized_text(severity, text)
58
+ case severity
59
+ when 0
60
+ text.trace_color
61
+ when 1
62
+ text.debug_color
63
+ when 2
64
+ text
65
+ when 3
66
+ text.warning_color
67
+ when 4
68
+ text.error_color
69
+ when 5
70
+ text.fatal_color
71
+ when 6
72
+ text.unknown_color
73
+ else
74
+ text
75
+ end
76
+ end
32
77
  end
33
78
  end
@@ -1,12 +1,11 @@
1
1
  require 'jbuilder'
2
2
  require_relative 'log_formatter_base'
3
- require_relative 'severity_level'
3
+ require_relative 'string'
4
4
 
5
5
  module RTALogger
6
6
  # json formatter which receive log_record and
7
7
  # returns it's data as json string
8
8
  class LogFormatterJson < LogFormatterBase
9
- include SeverityLevel
10
9
 
11
10
  def format(log_record)
12
11
  return '' unless log_record
@@ -20,7 +19,21 @@ module RTALogger
20
19
  json.message log_record.message.flatten.join(' ')
21
20
  end
22
21
 
23
- jb.target!
22
+ result = jb.target!
23
+ result = colorize_json(result) if @colorize
24
+
25
+ return result
26
+ end
27
+
28
+ protected
29
+
30
+ def colorize_json(json_text)
31
+ json_text.gsub(/"severity":"TRACE"/i, '"severity":"TRACE"'.trace_color)
32
+ .gsub(/"severity":"DEBUG"/i, '"severity":"DEBUG"'.debug_color)
33
+ .gsub(/"severity":"WARN"/i, '"severity":"WARN"'.warning_color)
34
+ .gsub(/"severity":"ERROR"/i, '"severity":"ERROR"'.error_color)
35
+ .gsub(/"severity":"FATAL"/i, '"severity":"FATAL"'.fatal_color)
36
+ .gsub(/"severity":"UNKNOWN"/i, '"severity":"UNKNOWN"'.unknown_color)
24
37
  end
25
38
  end
26
39
  end
@@ -1,12 +1,9 @@
1
1
  require_relative 'log_formatter_base'
2
- require_relative 'severity_level'
3
2
 
4
3
  module RTALogger
5
4
  # text formatter which receive log_record and
6
5
  # returns it's data as delimited text string
7
6
  class LogFormatterText < LogFormatterBase
8
- include SeverityLevel
9
-
10
7
  def format(log_record)
11
8
  return '' unless log_record
12
9
 
@@ -14,7 +11,7 @@ module RTALogger
14
11
  result << @delimiter << log_record.app_name
15
12
  result << @delimiter << log_record.topic_title
16
13
  result << @delimiter << log_record.context_id.to_s
17
- result << @delimiter << parse_severity_level_to_s(log_record.severity)
14
+ result << @delimiter << severity_text(log_record.severity)
18
15
  result << @delimiter << log_record.message.join(' ').gsub(delimiter, '$<$')
19
16
 
20
17
  result
@@ -27,7 +27,7 @@ module RTALogger
27
27
  @topic_semaphore = Mutex.new
28
28
  @log_semaphore = Mutex.new
29
29
  self.buffer_size = ENV.fetch('RTA_LOGGER_BUFFER_SIZE', 100)
30
- self.flush_wait_time = ENV.fetch('RTA_LOGGER_FLUSH_WAIT_SECONDS', 15)
30
+ self.flush_wait_time = ENV.fetch('RTA_LOGGER_FLUSH_WAIT_SECONDS', 5)
31
31
  @topics = {}
32
32
  @log_records = []
33
33
  @propagator = LogFactory.new_log_propagator
@@ -64,13 +64,14 @@ module RTALogger
64
64
  end
65
65
 
66
66
  def flush_wait_time=(time_in_seconds)
67
- @flush_wait_time = time_in_seconds < 10 ? 10 : time_in_seconds
67
+ @flush_wait_time = time_in_seconds < 5 ? 5 : time_in_seconds
68
68
  end
69
69
 
70
70
  def config_use_json_file(file_name, title = '')
71
71
  config_json = load_config_from_json_file(file_name, title)
72
72
  @config_file_name = file_name if config_json
73
73
  apply_config(config_json)
74
+ self
74
75
  rescue StandardError => e
75
76
  @propagator.drop_all_repositories
76
77
  @propagator.add_log_repository(LogFactory.create_repository(:console))
@@ -79,6 +80,7 @@ module RTALogger
79
80
  def config_use_json_string(config_string, title = '')
80
81
  config_json = load_config_from_json_string(config_string, title)
81
82
  apply_config(config_json)
83
+ self
82
84
  rescue StandardError => e
83
85
  @propagator.drop_all_repositories
84
86
  @propagator.add_log_repository(LogFactory.create_repository(:console))
@@ -92,7 +92,7 @@ module RTALogger
92
92
  if repository.present?
93
93
  repository.apply_run_time_config(repository_config)
94
94
  else
95
- repository = ::RTALogger::LogFactory.create_repository(repository_config['type'], config_json)
95
+ repository = ::RTALogger::LogFactory.create_repository(repository_config['type'], repository_config)
96
96
  add_log_repository(repository)
97
97
  end
98
98
  end
@@ -47,9 +47,8 @@ module RTALogger
47
47
  @enable = config_json['enable'].nil? ? true : config_json['enable']
48
48
  @title = config_json['title'].nil? ? self.class.to_s.split('::').last.underscore : config_json['title']
49
49
  formatter_config = config_json['formatter']
50
- if formatter_config && formatter_config['type']
51
- @formatter = LogFactory.create_formatter(formatter_config['type'], formatter_config)
52
- end
50
+
51
+ @formatter = LogFactory.create_formatter(formatter_config['type'], formatter_config) if formatter_config && formatter_config['type']
53
52
 
54
53
  apply_config_filters(config_json)
55
54
  end
@@ -57,6 +56,7 @@ module RTALogger
57
56
  def to_builder
58
57
  jb = Jbuilder.new do |json|
59
58
  json.type self.class.to_s.split('::').last.underscore.sub('log_repository_', '')
59
+ json.title @title
60
60
  json.enable enable
61
61
  json.formatter @formatter.to_builder.attributes!
62
62
  json.filters do
@@ -86,6 +86,7 @@ module RTALogger
86
86
  def apply_run_time_config(config_json)
87
87
  return unless config_json
88
88
  @enable = config_json['enable'] unless config_json['enable'].nil?
89
+ @formatter.apply_run_time_config(config_json['formatter'])
89
90
  apply_run_time_config_filters(config_json)
90
91
  end
91
92
 
@@ -36,6 +36,8 @@ module RTALogger
36
36
 
37
37
  def apply_run_time_config(config_json)
38
38
  super config_json
39
+
40
+ @formatter.colorize = false
39
41
  end
40
42
 
41
43
  protected
@@ -62,6 +62,8 @@ module RTALogger
62
62
  @port = config_json['port'] unless config_json['port'].nil?
63
63
  @tls_options = config_json['tls_options'] unless config_json['tls_options'].nil?
64
64
  @semaphore.synchronize { @fluent_logger = nil }
65
+
66
+ @formatter.colorize = false
65
67
  end
66
68
 
67
69
  protected
@@ -10,7 +10,7 @@
10
10
  "app_name": "TestApp",
11
11
  "severity_level": "trace",
12
12
  "buffer_size": 100,
13
- "flush_wait_seconds": 10,
13
+ "flush_wait_seconds": 5,
14
14
  "repositories":
15
15
  [
16
16
  {
@@ -20,18 +20,21 @@
20
20
  "formatter":
21
21
  {
22
22
  "type": "text",
23
- "delimiter": "|"
23
+ "delimiter": "|",
24
+ "colorize": true
24
25
  },
25
26
  "filters":
26
27
  [
27
28
  {
28
29
  "type": "topic",
30
+ "action" : "ignore",
29
31
  "title": "topic_filter_1",
30
- "enable": true,
31
- "default_regex" : "^test$"
32
+ "enable": false,
33
+ "default_regex" : "^test$",
32
34
  },
33
35
  {
34
36
  "type": "message",
37
+ "action" : "accept",
35
38
  "title": "message_filter_1",
36
39
  "enable": false,
37
40
  "default_regex" : "error"
@@ -52,9 +55,9 @@
52
55
  }
53
56
  },
54
57
  {
55
- "enable": false,
56
58
  "title": "fluentd_repo_1",
57
59
  "type": "fluentd",
60
+ "enable": false,
58
61
  "host": "localhost",
59
62
  "port": "8888",
60
63
  "formatter":
@@ -1,5 +1,14 @@
1
1
  require_relative 'log_factory_manager'
2
2
  require_relative 'log_factory_repository'
3
+ # require_relative 'string'
4
+
5
+ # puts 'trace'.gray
6
+ # puts 'debug'.green
7
+ # puts 'info'
8
+ # puts 'warning'.brown
9
+ # puts 'error'.red
10
+ # puts 'fatal'.bg_red
11
+ # puts 'unknown'.bg_cyan
3
12
 
4
13
  controller_name = 'test_controller'
5
14
  userID = 5
@@ -1,9 +1,40 @@
1
1
  class String
2
2
  def underscore
3
3
  self.gsub(/::/, '/').
4
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/, '\1_\2').
6
6
  tr("-", "_").
7
7
  downcase
8
8
  end
9
+
10
+ def black; "\e[30m#{self}\e[0m" end
11
+ def red; "\e[31m#{self}\e[0m" end
12
+ def green; "\e[32m#{self}\e[0m" end
13
+ def brown; "\e[33m#{self}\e[0m" end
14
+ def blue; "\e[34m#{self}\e[0m" end
15
+ def magenta; "\e[35m#{self}\e[0m" end
16
+ def cyan; "\e[36m#{self}\e[0m" end
17
+ def gray; "\e[37m#{self}\e[0m" end
18
+
19
+ def bg_black; "\e[40m#{self}\e[0m" end
20
+ def bg_red; "\e[41m#{self}\e[0m" end
21
+ def bg_green; "\e[42m#{self}\e[0m" end
22
+ def bg_brown; "\e[43m#{self}\e[0m" end
23
+ def bg_blue; "\e[44m#{self}\e[0m" end
24
+ def bg_magenta; "\e[45m#{self}\e[0m" end
25
+ def bg_cyan; "\e[46m#{self}\e[0m" end
26
+ def bg_gray; "\e[47m#{self}\e[0m" end
27
+
28
+ def bold; "\e[1m#{self}\e[22m" end
29
+ def italic; "\e[3m#{self}\e[23m" end
30
+ def underline; "\e[4m#{self}\e[24m" end
31
+ def blink; "\e[5m#{self}\e[25m" end
32
+ def reverse_color; "\e[7m#{self}\e[27m" end
33
+
34
+ def trace_color; self.gray end
35
+ def debug_color; self.green end
36
+ def warning_color; self.brown end
37
+ def error_color; self.red end
38
+ def fatal_color; self.bg_red end
39
+ def unknown_color; self.bg_cyan end
9
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RTALogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Babak Bahreini, RTA Backend Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-28 00:00:00.000000000 Z
11
+ date: 2021-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluent-logger