RTALogger 0.1.4 → 1.0.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: bbb273e7ee1ae08716218cd1338f233c0b5af1d652934cae575b319f7a4f5c66
4
- data.tar.gz: 010d8cc58971fa3252875c245d6b4deea9e5183ef122f17b6e403621e223f17c
3
+ metadata.gz: d4c558e31bfbc739d0ad9ebb218c96c61fdcc354b6ae9a9c0daa3ea4743786c3
4
+ data.tar.gz: b00ec909d9a8791671e29e949fb19cfb31e59d7fbf353532a70bfb216e6b4e45
5
5
  SHA512:
6
- metadata.gz: c91009d62b8810a5f2930c43e16a132673fa31487bd81c8843a4072244ea893f52d542364587fc94c9c3cf6de49e90351b72d9074491e740a395466400e4a722
7
- data.tar.gz: 0bd9f95d1a89cd1d0341f18f90e42e8fb0f1cffe11637d2f558e29a14a371e0380f18111ce2be208b7e8854ce9df1e2fb1d3e6da0b34ea5476090a9fdd97833a
6
+ metadata.gz: c6296831235e737111217cf51f4e3d477620d588319fb0540760b948028b26f87361e03cc7c453dd00ab3c4553a26ad045791e2d9e64d1153017246e664348bd
7
+ data.tar.gz: 39885f5f4f039199748d9201f632ac4e745bd41cced49971ddc70b9599281c556a2d85e3fb13332a76cb0b01d78f1efb88d510331071332ccfdcbd26528543a7
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- RTALogger (0.1.4)
4
+ RTALogger (1.0.0)
5
5
  fluent-logger (~> 0.9)
6
6
  jbuilder (~> 2.10)
7
7
 
data/README.md CHANGED
@@ -81,6 +81,51 @@ To use log manager APIs, first step is to have a quick review on Log Data Struct
81
81
  # the parameter is the json config file
82
82
  log_manager.config_use_json_file('rta_logger_config.json')
83
83
  ```
84
+ - Sample configuration json file
85
+ ```
86
+ {
87
+ "rta_logger":
88
+ {
89
+ "default_manager": "develop",
90
+ "log_managers":
91
+ [
92
+ {
93
+ "manager_name": "develop",
94
+ "enable": true,
95
+ "app_name": "TestApp",
96
+ "severity_level": "debug",
97
+ "buffer_size": 100,
98
+ "flush_wait_seconds": 15,
99
+ "repos":
100
+ [
101
+ {
102
+ "enable": true,
103
+ "type": "console",
104
+ "formatter": "delimited_text",
105
+ "delimiter": "|"
106
+ },
107
+ {
108
+ "enable": true,
109
+ "type": "File",
110
+ "file_path": "./log/log.txt",
111
+ "roll_period": "daily",
112
+ "roll_size": "1048576",
113
+ "formatter": "delimited_text",
114
+ "delimiter": "|"
115
+ },
116
+ {
117
+ "enable": true,
118
+ "type": "fluentd",
119
+ "host": "localhost",
120
+ "port": "8888",
121
+ "formatter": "json"
122
+ }
123
+ ]
124
+ }
125
+ ]
126
+ }
127
+ }
128
+ ```
84
129
  - Add new topic to log manager and get the topic instance
85
130
  ```ruby
86
131
  # the parameter is the topic name
@@ -112,50 +157,58 @@ the result will be:
112
157
  - json config file sample
113
158
  ```json
114
159
  {
115
- "RTALogger":
160
+ "rta_logger":
116
161
  {
117
- "Default_Manager": "Develop",
118
- "Log_Managers":
162
+ "default_manager": "develop",
163
+ "log_managers":
119
164
  [
120
165
  {
121
- "Manager_Name": "Develop",
122
- "Enable": true,
123
- "App_Name": "TestApp",
124
- "Log_Severity": 2,
125
- "Buffer_Size": 100,
126
- "Flush_Wait_Seconds": 15,
127
- "Formatter" : "JSON",
128
- "Repos":
166
+ "manager_name": "develop",
167
+ "enable": true,
168
+ "app_name": "TestApp",
169
+ "severity_level": "debug",
170
+ "buffer_size": 100,
171
+ "flush_wait_seconds": 15,
172
+ "repos":
129
173
  [
130
174
  {
131
- "Enable": true,
132
- "Type": "Console"
133
- },
134
- {
135
- "Enable": true,
136
- "Type": "UDP",
137
- "Host": "localhost",
138
- "Port": 8888
175
+ "enable": true,
176
+ "type": "console",
177
+ "formatter":
178
+ {
179
+ "type": "text",
180
+ "delimiter": "|"
181
+ }
139
182
  },
140
183
  {
141
- "Enable": false,
142
- "Type": "File",
143
- "File_Path": "../../log/log.txt",
144
- "Roll_Period": "daily",
145
- "Roll_Size": "1048576"
184
+ "enable": false,
185
+ "type": "file",
186
+ "file_path": "log.txt",
187
+ "roll_period": "daily",
188
+ "roll_size": "1048576",
189
+ "formatter":
190
+ {
191
+ "type": "text",
192
+ "delimiter": "|"
193
+ }
146
194
  },
147
195
  {
148
- "Enable": true,
149
- "Type": "Fluentd",
150
- "Host": "localhost",
151
- "Port": "24442",
152
- "TLS_Options":
196
+ "enable": false,
197
+ "type": "fluentd",
198
+ "host": "localhost",
199
+ "port": "8888",
200
+ "formatter":
153
201
  {
154
- "ca":",/path/to/cacert.pem",
155
- "cert":"/path/to/client-cert.pem",
156
- "key":"/path/to/client-key.pem",
157
- "key_passphrase":"test"
158
- }
202
+ "type": "json"
203
+ }
204
+ }
205
+ ],
206
+ "topics":
207
+ [
208
+ {
209
+ "title": "test",
210
+ "enable": true,
211
+ "severity_level": "info"
159
212
  }
160
213
  ]
161
214
  }
@@ -170,47 +223,64 @@ the result will be:
170
223
  log_manager.config_use_json_file('rta_logger_config.json')
171
224
 
172
225
  The file structure:
173
- - RTALogger : the root element of RTALogger json configuration.
174
- - Default_Manager: the name of default log manager config, when there is
226
+ - rta_logger : the root element of rta_logger json configuration.
227
+ - default_manager: the name of default log manager config, when there is
175
228
  multiple log manager configuration in Log_Managers array.
176
- - Log_Managers : the array of LogManagers with different configuration.
229
+ - log_managers : the array of LogManagers with different configuration.
177
230
  It is possible to define multiple log manager configurations for differen usages.
178
- - Name: the name of log manager. It will be used to define the default log manager.
179
- - Enable: (true/false) The value of this property activate or deactivate entire log manager.
180
- - App_Name: Application name as the owner of log data.
181
- - Log_Severity: Defines which level of log data will be stored in log repositories.
182
- - BufferSize: The memory buffer size (number of buffered log objects) to
231
+ - manager_name: the name of log manager. It will be used to define the default log manager.
232
+ - enable: (true/false) The value of this property activate or deactivate entire log manager.
233
+ - app_name: Application name as the owner of log data.
234
+ - severity_level: Defines which level of log data will be stored in log repositories.
235
+ - buffer_size: The memory buffer size (number of buffered log objects) to
183
236
  decread api consumers wait time. when the buffer is full the flush operation will
184
237
  save buffered logs to log repositoies.
185
- - Flush_Wait_Seconds: Time in soconds which log managers wait to flush buffered log objects
238
+ - flush_wait_seconds: Time in soconds which log managers wait to flush buffered log objects
186
239
  to log repository.
187
- - Formatter: (JSON/TEXT) declare log format when it's required to converrt log object to text.
188
- - Repos: Array of log repositories. It is possible to define multiple log repositories to
240
+ - repos: Array of log repositories. It is possible to define multiple log repositories to
189
241
  store log data. there are variaty of log repositories and it is possible to
190
242
  add new ones. Each item in Repos array will configure a log repository.
243
+ Pre-defined types are described below, also it's possible to implement your custome repo type
244
+ and register it to RTALogger.
191
245
  - Log repository types and config:
192
- 1- Console: Show log data in text format on standard out put
193
- - "Type":"Console"
194
- - "Enable": [true/false] this will activate or deactivate log repository.
195
- 2- File: Store log data in a file.
196
- - "Type":"Console"
197
- - "Enable": [true/false] this will activate or deactivate log repository.
198
- - "File_Path": [file path and file name] the path and the name to store log data.
199
- - "Roll_Period": ["daily"/"weekly"/"monthly"] the period to generate new log file.
200
- - "Roll_Size": [bytes] the maximum size of log file to
246
+ 1- console: Show log data in text format on standard out put
247
+ - "type": "console"
248
+ - "enable": [true/false] this will activate or deactivate log repository.
249
+ - "foramtter" is the text, json or any custome defined types as LogRecord formatter
250
+ - "type": ["text"/"json"] type of formatter
251
+ - "delimiter": [any text delimiter you need.(as an instance pipe line "|")]
252
+ if formatter not defined then the json formatter will be used
253
+ 2- file: Store log data in a file.
254
+ - "type": "console"
255
+ - "enable": [true/false] this will activate or deactivate log repository.
256
+ - "file_path": [file path and file name] the path and the name to store log data.
257
+ - "roll_period": ["daily"/"weekly"/"monthly"] the period to generate new log file.
258
+ - "roll_size": [bytes] the maximum size of log file to
201
259
  roll file and create the new log file
202
- 3- UDP: Send log data over UDP on network.
203
- - "Type":"Console"
204
- - "Enable": [true/false] this will activate or deactivate log repository.
205
- - "Host": IP of the server to send log data.
206
- - "Port": Port of server to send log data.
207
- 4- Fluentd: send log data to Fluentd Log collector over network using TCP/IP protocol.
208
- - "Type":"Console"
209
- - "Enable": [true/false] this will activate or deactivate log repository.
210
- - "Host": IP of the server to send log data.
211
- - "Port": Port of server to send log data.
212
- - "TLS_Options": TLS configuration to stablish a secure TCP connection to Fluentd Server.
213
-
260
+ - "foramtter" is the text, json or any custome defined types as LogRecord formatter
261
+ - "type": ["text"/"json"] type of formatter
262
+ - "delimiter": [any text delimiter you need.(as an instance pipe line "|")]
263
+ if formatter not defined then the json formatter will be used
264
+ 3- udp: Send log data over UDP on network.
265
+ - "type": "udp"
266
+ - "enable": [true/false] this will activate or deactivate log repository.
267
+ - "host": IP of the server to send log data.
268
+ - "port": Port of server to send log data.
269
+ 4- fluentd: send log data to Fluentd Log collector over network using TCP/IP protocol.
270
+ - "type": "fluentd"
271
+ - "enable": [true/false] this will activate or deactivate log repository.
272
+ - "host": IP of the server to send log data.
273
+ - "port": Port of server to send log data.
274
+ - "tls_options": TLS configuration to stablish a secure TCP connection to Fluentd Server.
275
+ - "foramtter" is the text, json or any custome defined types as LogRecord formatter
276
+ - "type": ["text"/"json"] type of formatter
277
+ - "delimiter": [any text delimiter you need.(as an instance pipe line "|")]
278
+ if formatter not defined then the json formatter will be used
279
+ - topics: This is an optional item. When you need to customize a specific topic severity level or
280
+ enable value, you can define the settings here.
281
+ - title: The topic title to customize. (mandatoy).
282
+ - severity_level: Defines which level of log data will be stored in log repositories.
283
+ - enable: [true/false] to enable or disable logging process of the topic.
214
284
  ```
215
285
  - Some useful features
216
286
  ```ruby
@@ -218,14 +288,38 @@ the result will be:
218
288
  log_manager.app_name = 'myTestApp'
219
289
 
220
290
  # update specific topic log level if necessary
221
- log_manager.update_topic_level(controller_name, RTALogger::LogSeverity::INFO)
291
+ log_manager.update_topic_severity_level(topic_title, RTALogger::SeverityLevel::INFO)
292
+
293
+ # update all topics severity level if necessary
294
+ log_manager.update_all_topics_severity_level(RTALogger::SeverityLevel::INFO)
222
295
 
223
- # update all topics log level if necessary
224
- log_manager.update_all_topics_log_level(RTALogger::LogSeverity::INFO)
296
+ # enable or disable specific topic if necessary
297
+ log_manager.update_topic_enable(topic_title, [true/false])
298
+
299
+ # enable or disable all topic if necessary
300
+ log_manager.update_all_topics_enable([true/false])
225
301
  ```
226
302
  - Implement and Expand
227
- It is possible to implement new log repositories.
228
- All repository classes should inherit from 'RTALogger::LogRepository'
303
+ It is possible to implement new log repositories. There will be fue rules to implement and
304
+ integrate new customized log repository with RTALogger LogManager.
305
+
306
+ 1- Define you class inside RTALogger module.
307
+
308
+ 2- The class should be inherited from 'RTALogger::LogRepository'.
309
+
310
+ 3- Also appropriate naming convention is necessary.
311
+ As an example if you are implementing a Console Repo, your class name should be LogRepositoryConsole and
312
+ your source code in a ruby file and name it log_repository_console.rb
313
+
314
+ 4- After implementing your own log repository, you should register the class at run-time using the following syntax:
315
+ ```ruby
316
+ RTALogger::LogFactory.register_log_repository :console, 'log_repository_console.rb'
317
+ ```
318
+ Another example: LogRepositoryMyCustomizedUdp
319
+
320
+ ```ruby
321
+ RTALogger::LogFactory.register_log_repository :my_customized_udp, 'log_repository_my_customized_udp.rb'
322
+ ```
229
323
  Here is 'LogRepositoryConsole' implementation:
230
324
  ```ruby
231
325
  require_relative 'log_repository'
@@ -1,3 +1,3 @@
1
1
  module RTALogger
2
- VERSION = '0.1.4'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -1,20 +1,35 @@
1
- require_relative 'log_formatter_text'
2
- require_relative 'log_formatter_json'
3
-
4
1
  module RTALogger
5
2
  # Log factory to get new instance of log formatter
6
3
  module LogFactory
7
4
  def self.log_formatter_default
8
- RTALogger::LogFormatterJSON.new
9
- # RTALogger::LogFormatterText.new
5
+ create_formatter(:json)
10
6
  end
11
7
 
12
- def self.log_formatter_json
13
- RTALogger::LogFormatterJSON.new
8
+ def self.create_formatter(type, config_json = '')
9
+ lib_file = @log_formatters[type.to_sym]
10
+ raise "unregistered formatter class: #{type.to_s}" if lib_file.nil? || lib_file.empty?
11
+
12
+ begin
13
+ load lib_file
14
+ rescue
15
+ raise "unable to load formatter class file: #{lib_file}"
16
+ end
17
+
18
+ formatter_class_name = 'RTALogger::' + ('log_formatter_' + type.to_s).split('_').map(&:capitalize).join
19
+ formatter_class = Object.const_get(formatter_class_name)
20
+ return nil unless formatter_class
21
+ result = formatter_class.new
22
+
23
+ return result if config_json.empty?
24
+ result.load_config(config_json) if result.present?
25
+ return result
14
26
  end
15
27
 
16
- def self.log_formatter_text
17
- RTALogger::LogFormatterText.new
28
+ def self.register_log_formatter(type, class_file_name)
29
+ @log_formatters[type.to_sym] = class_file_name
18
30
  end
31
+
32
+ @log_formatters = {:text => 'log_formatter_text.rb',
33
+ :json => 'log_formatter_json.rb'}
19
34
  end
20
35
  end
@@ -1,56 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'log_repository_console'
4
- require_relative 'log_repository_file'
5
- require_relative 'log_repository_udp'
6
- require_relative 'log_repository_fluent'
7
-
8
3
  module RTALogger
9
4
  # this module generates object instance
10
5
  module LogFactory
11
- def self.new_log_repository_console
12
- LogRepositoryConsole.new
13
- end
6
+ def self.create_repository(type, config_json = '')
7
+ lib_file = @log_repositories[type.to_sym]
8
+ raise "unregistered repository class: #{type.to_s}" if lib_file.nil? || lib_file.empty?
14
9
 
15
- def self.new_log_repository_file(file_path = 'log.txt', period = 'daily', shift_size = 1_048_576)
16
- LogRepositoryFile.new(file_path, period, shift_size)
17
- end
10
+ begin
11
+ load lib_file
12
+ rescue
13
+ raise "unable to load repository class file: #{lib_file}"
14
+ end
18
15
 
19
- def self.load_log_repository_file(config_json)
20
- file_path = config_json['File_Path'].to_s
21
- period = config_json['Roll_Period'].to_s
22
- shift_size = config_json['Roll_Size'].nil? ? 1_048_576 : config_json['Roll_Size'].to_i
23
- ::RTALogger::LogFactory.new_log_repository_file(file_path, period, shift_size)
24
- end
16
+ # repo_class_name = 'RTALogger::' + type.split('_').map(&:capitalize).join
17
+ repo_class_name = 'RTALogger::' + ('log_repository_' + type.to_s).split('_').map(&:capitalize).join
18
+ repo_class = Object.const_get(repo_class_name)
19
+ return nil unless repo_class
20
+ result = repo_class.new
25
21
 
26
- def self.new_log_repository_udp(host = '127.0.0.1', port = 4913)
27
- LogRepositoryUDP.new(host, port)
22
+ # result = LogRepository.create type.to_sym
23
+ return result if config_json.empty?
24
+ result.load_config(config_json) if result.present?
25
+ return result
28
26
  end
29
27
 
30
- def self.load_log_repository_udp(config_json)
31
- host = config_json['Host'].to_s
32
- port = config_json['Port'].nil? ? 4913 : config_json['Port'].to_i
33
- ::RTALogger::LogFactory.new_log_repository_udp(host, port)
28
+ def self.register_log_repository(type, class_file_name)
29
+ @log_repositories[type.to_sym] = class_file_name
34
30
  end
35
31
 
36
- def self.new_log_repository_fluent(host = 'localhost', port = '24224', tls_options = nil)
37
- LogRepositoryFluent.new(host, port, tls_options)
38
- end
39
-
40
- def self.load_log_repository_fluent(config_json)
41
- host = config_json['Host'].to_s
42
- port = config_json['Port'].to_s
43
- tls_options = config_json['TLS_Options']
44
- ::RTALogger::LogFactory.new_log_repository_fluent(host, port, tls_options)
45
- end
46
-
47
- def self.create_repository(type, config_json)
48
- result = nil
49
- result = new_log_repository_console if type.to_s.casecmp('Console').zero?
50
- result = load_log_repository_file(config_json) if type.to_s.casecmp('File').zero?
51
- result = load_log_repository_udp(config_json) if type.to_s.casecmp('UDP').zero?
52
- result = load_log_repository_fluent(config_json) if type.to_s.casecmp('Fluentd').zero?
53
- result
54
- end
32
+ @log_repositories = {:console => 'log_repository_console.rb',
33
+ :file => 'log_repository_file.rb',
34
+ :udp => 'log_repository_upd.rb',
35
+ :fluentd => 'log_repository_fluetnd.rb'}
55
36
  end
56
37
  end
@@ -5,8 +5,8 @@ require_relative 'log_topic'
5
5
  module RTALogger
6
6
  # this module generates object instance
7
7
  module LogFactory
8
- def self.new_log_topic(log_manager, topic_title, level = WARN)
9
- LogTopic.new(log_manager, topic_title, level)
8
+ def self.new_log_topic(log_manager, title, level = WARN, enable = true)
9
+ LogTopic.new(log_manager, title, level, enable)
10
10
  end
11
11
  end
12
12
  end
@@ -1,6 +1,16 @@
1
+ # Log Formatter base class
1
2
  module RTALogger
2
- # Log Formatter base class
3
3
  class LogFormatter
4
+ def initialize
5
+ @delimiter = '|'
6
+ end
7
+
8
+ attr_accessor :delimiter
9
+
10
+ def load_config(config_json)
11
+ @delimiter = config_json['delimiter'].nil? ? true : config_json['delimiter']
12
+ end
13
+
4
14
  def format(log_record)
5
15
  log_record.to_s
6
16
  end
@@ -4,7 +4,7 @@ require_relative 'log_formatter'
4
4
  module RTALogger
5
5
  # json formatter which receive log_record and
6
6
  # returns it's data as json string
7
- class LogFormatterJSON
7
+ class LogFormatterJson < LogFormatter
8
8
  def format(log_record)
9
9
  return '' unless log_record
10
10
 
@@ -4,15 +4,15 @@ module RTALogger
4
4
  # text formatter which receive log_record and
5
5
  # returns it's data as delimited text string
6
6
  class LogFormatterText < LogFormatter
7
- def format(log_record, delimiter = '|')
7
+ def format(log_record)
8
8
  return '' unless log_record
9
9
 
10
10
  result = log_record.occurred_at.strftime('%F %H:%M:%S:%3N')
11
- result << delimiter << log_record.app_name
12
- result << delimiter << log_record.topic_title
13
- result << delimiter << log_record.context_id
14
- result << delimiter << log_record.severity
15
- result << delimiter << log_record.message.join(' ').gsub(delimiter, '$<$')
11
+ result << @delimiter << log_record.app_name
12
+ result << @delimiter << log_record.topic_title
13
+ result << @delimiter << log_record.context_id
14
+ result << @delimiter << log_record.severity
15
+ result << @delimiter << log_record.message.join(' ').gsub(delimiter, '$<$')
16
16
 
17
17
  result
18
18
  end
@@ -1,28 +1,34 @@
1
1
  require 'date'
2
2
  require 'thread'
3
3
  require 'singleton'
4
+ require 'json'
5
+ require 'json/version'
6
+ require 'json/generic_object'
4
7
  require_relative 'log_factory_propagator'
5
8
  require_relative 'log_factory_repository'
6
9
  require_relative 'log_factory_topic'
7
- require_relative 'log_severity'
10
+ require_relative 'severity_level'
11
+ require 'jbuilder'
8
12
 
9
13
  # the module will contain all logger requirements
10
14
  module RTALogger
11
15
  # the class is the main class
12
16
  class LogManager
13
17
  include Singleton
14
- include LogSeverity
18
+ include SeverityLevel
15
19
  include RTALogger::LogFactory
16
20
 
17
21
  def initialize
18
22
  @enable = true
19
- @app_name = ENV.fetch('RTALogger_App_Name', 'unknownApp')
20
- @default_log_level = ENV.fetch('RTALogger_Log_Severity', ::RTALogger::LogSeverity::WARN)
23
+ @name = 'default_log_manager'
24
+ @app_name = ENV.fetch('RTA_LOGGER_APP_NAME', 'unknown_app')
25
+ @severity_level = ENV.fetch('RTA_LOGGER_SEVERITY_LEVEL', WARN)
26
+ @config_file_name = ''
21
27
  @topic_semaphore = Mutex.new
22
28
  @log_semaphore = Mutex.new
23
- @buffer_size = ENV.fetch('RTALogger_Buffer_Size', 100)
29
+ @buffer_size = ENV.fetch('RTA_LOGGER_BUFFER_SIZE', 100)
24
30
  @flush_size = @buffer_size * 20 / 100
25
- @flush_wait_time = ENV.fetch('RTALogger_Flush_Wait_Seconds', 15)
31
+ @flush_wait_time = ENV.fetch('RTA_LOGGER_FLUSH_WAIT_SECONDS', 15)
26
32
  @topics = {}
27
33
  @log_records = []
28
34
  @propagator = LogFactory.new_log_propagator
@@ -36,13 +42,25 @@ module RTALogger
36
42
  @flush_scheduler.run
37
43
  end
38
44
 
39
- def config_use_json_file(config_file_name, manager_name = '')
40
- config_json = load_config_from_json_file(config_file_name, manager_name)
45
+ attr_reader :name
46
+ attr_accessor :enable
47
+ attr_accessor :app_name
48
+ attr_reader :propagator
49
+ attr_accessor :default_severity_level
50
+ attr_accessor :buffer_size
51
+ attr_reader :flush_size
52
+ attr_accessor :flush_wait_time
53
+ attr_reader :topics
54
+ attr_reader :config_file_name
55
+
56
+ def config_use_json_file(file_name, manager_name = '')
57
+ config_json = load_config_from_json_file(file_name, manager_name)
58
+ @config_file_name = file_name if config_json
41
59
  apply_config(config_json)
42
60
  rescue StandardError => e
43
61
  puts e.message
44
62
  @propagator.drop_all_repositories
45
- @propagator.add_log_repository(LogFactory.new_log_repository_console)
63
+ @propagator.add_log_repository(LogFactory.create_repository(:console))
46
64
  end
47
65
 
48
66
  def config_use_json_string(config_string, manager_name = '')
@@ -51,21 +69,15 @@ module RTALogger
51
69
  rescue StandardError => e
52
70
  puts e.message
53
71
  @propagator.drop_all_repositories
54
- @propagator.add_log_repository(LogFactory.new_log_repository_console)
72
+ @propagator.add_log_repository(LogFactory.create_repository(:console))
55
73
  end
56
74
 
57
- attr_accessor :enable
58
- attr_accessor :app_name
59
- attr_reader :propagator
60
- attr_reader :default_log_level
61
-
62
- def add_topic(topic_title, log_level = @default_log_level)
75
+ def add_topic(title, severity_level = @default_severity_level, enable = true)
63
76
  @topic_semaphore.synchronize {
64
- @topics[topic_title.to_sym] ||= LogFactory.new_log_topic(self, topic_title, log_level)
77
+ @topics[title.to_sym] ||= LogFactory.new_log_topic(self, title, severity_level, enable)
65
78
  }
66
79
 
67
- @topics[topic_title.to_sym].enable = @enable
68
- @topics[topic_title.to_sym]
80
+ @topics[title.to_sym]
69
81
  end
70
82
 
71
83
  def add_log(log_record)
@@ -74,52 +86,100 @@ module RTALogger
74
86
  check_for_flush
75
87
  end
76
88
 
77
- def update_topic_log_level(topic, log_level = WARN)
78
- @topic_semaphore.synchronize { @topics[topic].log_level = log_level if @topics[topic] }
89
+ def update_topic_enable(topic, enable = true)
90
+ @topic_semaphore.synchronize { @topics[topic.to_sym].enable = enable if @topics[topic.to_sym] }
91
+ end
92
+
93
+ def update_all_topics_enable(enable = true)
94
+ @topic_semaphore.synchronize { @topics.keys.each { |topic| @topics[topic].enable = enable } }
95
+ end
96
+
97
+ def update_topic_severity_level(topic, severity_level = WARN)
98
+ @topic_semaphore.synchronize { @topics[topic.to_sym].severity_level = severity_level if @topics[topic.to_sym] }
99
+ end
100
+
101
+ def update_all_topics_severity_level(severity_level = WARN)
102
+ @topic_semaphore.synchronize { @topics.keys.each { |topic| @topics[topic].severity_level = severity_level } }
103
+ end
104
+
105
+ def to_builder
106
+ @topic_semaphore.synchronize do
107
+ jb = Jbuilder.new do |json|
108
+ json.name name
109
+ json.enable enable
110
+ json.app_name app_name
111
+ json.config_file_name config_file_name
112
+ json.default_severity_level default_severity_level
113
+ json.buffer_size buffer_size
114
+ json.flush_size flush_size
115
+ json.flush_wait_time flush_wait_time
116
+ json.topics do
117
+ json.array! topics.keys.collect { |topic_key| @topics[topic_key].to_builder.attributes! }
118
+ end
119
+ end
120
+
121
+ jb
122
+ end
79
123
  end
80
124
 
81
- def update_all_topics_log_level(log_level = WARN)
82
- @topic_semaphore.synchronize { @topics.keys.each { |topic| @topics[topic].log_level = log_level } }
125
+ def reveal_config
126
+ to_builder.target!
83
127
  end
84
128
 
85
129
  private
86
130
 
87
131
  def load_config_from_json_file(config_file_name, manager_name = '')
88
132
  config_file = File.open config_file_name
89
- config_json = JSON.load config_file
133
+ config_json = ::JSON.load(config_file)
90
134
  config_json = extract_config(config_json, manager_name)
91
135
  config_json
92
136
  end
93
137
 
94
138
  def load_config_from_json_string(config_string, manager_name = '')
95
- config_json = JSON.parse(config_string)
139
+ config_json = ::JSON.parse(config_string)
96
140
  config_json = extract_config(config_json, manager_name)
97
141
  config_json
98
142
  end
99
143
 
100
144
  def extract_config(json_data, manager_name = '')
101
- config_json = json_data['RTALogger']
145
+ config_json = json_data['rta_logger']
102
146
  raise 'RTALogger configuration not found!' unless config_json
103
- raise 'Log_Managers section does not exists json configuration' unless config_json['Log_Managers']
104
- raise 'No config manager defined in json configuration' unless config_json['Log_Managers'].count.positive?
105
- manager_name = config_json['Default_Manager'] if manager_name.blank?
147
+ raise 'Log_Managers section does not exists json configuration' unless config_json['log_managers']
148
+ raise 'No config manager defined in json configuration' unless config_json['log_managers'].count.positive?
149
+ manager_name = config_json['default_manager'] if manager_name.empty?
106
150
  unless manager_name.to_s.strip.empty?
107
- config_json = config_json['Log_Managers'].find { |item| item['Manager_Name'] == manager_name }
151
+ config_json = config_json['log_managers'].find { |item| item['manager_name'] == manager_name }
108
152
  end
109
- config_json ||= config_json['Log_Managers'][0]
153
+ config_json ||= config_json['log_managers'][0]
110
154
  raise 'Unable to extract RTA Log Manager configuration!' unless config_json
155
+ @name = manager_name if config_json
111
156
  config_json
112
157
  end
113
158
 
114
159
  def apply_config(config_json)
115
160
  raise 'json config not available' unless config_json
116
- @enable = config_json['Enable'].nil? ? true : config_json['Enable']
117
- @app_name = config_json['App_Name'] if config_json['App_Name'].present?
118
- @default_log_level = config_json['Log_Severity'] if config_json['Log_Severity'].present?
119
- @buffer_siz = config_json['Buffer_Size'] if config_json['Buffer_Size'].present?
120
- @flush_wait_time = config_json['Flush_Wait_Seconds'] if config_json['Flush_Wait_Seconds'].present?
161
+ @enable = config_json['enable'].nil? ? true : config_json['enable']
162
+ @app_name = config_json['app_name'] unless config_json['app_name'].empty?
163
+ @default_severity_level = parse_severity_level_to_i(config_json['severity_level']) if config_json['severity_level']
164
+ @buffer_size = config_json['buffer_size'] if config_json['buffer_size']
165
+ @flush_wait_time = config_json['flush_wait_seconds'] if config_json['flush_wait_seconds']
121
166
  @propagator.drop_all_repositories
122
- config_json['Repos']&.each { |item| @propagator.load_log_repository(item) }
167
+ apply_config_repos(config_json)
168
+ apply_config_topics(config_json)
169
+ end
170
+
171
+ def apply_config_repos(config_json)
172
+ config_json['repos']&.each { |item| @propagator.load_log_repository(item) }
173
+ end
174
+
175
+ def apply_config_topics(config_json)
176
+ config_json['topics']&.each do |topic|
177
+ next unless topic['title']
178
+ result_topic = add_topic(topic['title'])
179
+ next unless result_topic
180
+ result_topic.severity_level = parse_severity_level_to_i topic['severity_level'] if topic['severity_level']
181
+ result_topic.enable = topic['enable'] if topic['enable']
182
+ end
123
183
  end
124
184
 
125
185
  def initialize_flush_scheduler
@@ -153,7 +213,7 @@ module RTALogger
153
213
 
154
214
  def flush_all
155
215
  @log_semaphore.synchronize do
156
- @log_records[0...@log_records.count].each { |log| propagate(log) }
216
+ @log_records[0...@log_records.count].each { |log| propagate(log) }
157
217
  @log_records.clear
158
218
  end
159
219
  @propagator.propagate
@@ -162,5 +222,6 @@ module RTALogger
162
222
  def propagate(log_record)
163
223
  @propagator.add_log(log_record)
164
224
  end
225
+
165
226
  end
166
227
  end
@@ -19,9 +19,9 @@ module RTALogger
19
19
  end
20
20
 
21
21
  def load_log_repository(config_json)
22
- type = config_json['Type']
22
+ type = config_json['type']
23
23
  return if type.to_s.strip.empty?
24
- enable = config_json['Enable'].nil? ? true : config_json['Enable']
24
+ enable = config_json['enable'].nil? ? true : config_json['enable']
25
25
  return unless enable
26
26
 
27
27
  log_repository = ::RTALogger::LogFactory.create_repository(type, config_json)
@@ -21,7 +21,7 @@ module RTALogger
21
21
  end
22
22
 
23
23
  def topic_title
24
- @log_topic.topic_title
24
+ @log_topic.title
25
25
  end
26
26
  end
27
27
  end
@@ -7,6 +7,23 @@ module RTALogger
7
7
  @enable = true
8
8
  end
9
9
 
10
+ # @@sub_classes = {}
11
+
12
+ # def self.create type
13
+ # requested_class = @@sub_classes[type]
14
+ # if requested_class
15
+ # requested_class.new
16
+ # else
17
+ # raise "Bad log repository type: #{type}"
18
+ # end
19
+ # end
20
+ #
21
+ # def self.register repository_name
22
+ # @@sub_classes[repository_name] = self
23
+ # end
24
+
25
+ attr_accessor :enable
26
+
10
27
  def add_log_records(items)
11
28
  return 0 unless @enable
12
29
  @semaphore.synchronize do
@@ -15,7 +32,14 @@ module RTALogger
15
32
  flush_and_clear
16
33
  end
17
34
 
18
- attr_accessor :enable
35
+ def load_config(config_json)
36
+ @enable = config_json['enable'].nil? ? true : config_json['enable']
37
+
38
+ formatter_config = config_json['formatter']
39
+ if formatter_config && formatter_config['type']
40
+ @formatter = LogFactory.create_formatter(formatter_config['type'], formatter_config)
41
+ end
42
+ end
19
43
 
20
44
  protected
21
45
 
@@ -10,6 +10,12 @@ module RTALogger
10
10
  @formatter = RTALogger::LogFactory.log_formatter_default
11
11
  end
12
12
 
13
+ def load_config(config_json)
14
+ super
15
+ end
16
+
17
+ # register :console
18
+
13
19
  protected
14
20
 
15
21
  def flush_and_clear
@@ -1,6 +1,5 @@
1
1
  require 'logger'
2
2
  require_relative 'log_repository'
3
- require_relative 'log_factory_file_logger'
4
3
  require_relative 'log_factory_log_formatter'
5
4
 
6
5
  module RTALogger
@@ -8,12 +7,32 @@ module RTALogger
8
7
  class LogRepositoryFile < LogRepository
9
8
  def initialize(file_path = 'log.txt', period = 'daily', shift_size = 1_048_576)
10
9
  super()
11
- @file_logger = RTALogger::LogFactory.new_file_logger(file_path, period, shift_size)
10
+ @file_logger = create_ruby_logger(file_path, period, shift_size)
12
11
  @formatter = RTALogger::LogFactory.log_formatter_default
13
12
  end
14
13
 
14
+ def load_config(config_json)
15
+ super
16
+
17
+ file_path = config_json['file_path'].to_s
18
+ period = config_json['roll_period'].to_s
19
+ shift_size = config_json['roll_size'].nil? ? 1_048_576 : config_json['roll_size'].to_i
20
+ @file_logger = create_ruby_logger(file_path, period, shift_size)
21
+ end
22
+
23
+ # register :file
24
+
15
25
  protected
16
26
 
27
+ def create_ruby_logger(file_path, period, shift_size)
28
+ ruby_logger = Logger.new(file_path, period, shift_size)
29
+ ruby_logger.level = Logger::Severity::DEBUG
30
+ ruby_logger.formatter = proc do |_severity, _datetime, _progname, msg|
31
+ "#{msg}\n"
32
+ end
33
+ ruby_logger
34
+ end
35
+
17
36
  def flush_and_clear
18
37
  semaphore.synchronize do
19
38
  @log_records.each { |log_record| @file_logger.debug(@formatter.format(log_record)) }
@@ -5,15 +5,32 @@ module RTALogger
5
5
  class LogRepositoryFluent < LogRepository
6
6
  def initialize(host = 'localhost', port = 24224, tls_options = nil)
7
7
  super()
8
- @host = host
9
- @port = port
10
- @tls_options = tls_options
11
8
  @formatter = RTALogger::LogFactory.log_formatter_json
12
- if @tls_options
13
- @fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, :host => @host, :port => @port, :use_nonblock => true, :wait_writeable => false)
9
+ @fluent_logger = create_fluentd_logger(host, port, tls_options)
10
+ end
11
+
12
+ def load_config(config_json)
13
+ super
14
+
15
+ host = config_json['host'].to_s
16
+ port = config_json['port'].to_s
17
+ tls_options = config_json['tls_options']
18
+
19
+ @fluent_logger = create_fluentd_logger(host, port, tls_options)
20
+ end
21
+
22
+ # register :fluentd
23
+
24
+ protected
25
+
26
+ def create_fluentd_logger(host, port, tls_options)
27
+ unless tls_options
28
+ fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, :host => host, :port => port, :use_nonblock => true, :wait_writeable => false)
14
29
  else
15
- @fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, :host => @host, :port => @port, :tls_options => @tls_options, :use_nonblock => true, :wait_writeable => false)
30
+ fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, :host => host, :port => port, :tls_options => tls_options, :use_nonblock => true, :wait_writeable => false)
16
31
  end
32
+
33
+ fluent_logger
17
34
  end
18
35
 
19
36
  def flush_and_clear
@@ -5,18 +5,26 @@ module RTALogger
5
5
  class LogRepositoryUDP < LogRepository
6
6
  def initialize(host = '127.0.0.1', port = 4913)
7
7
  super()
8
- @host = host
9
- @port = port
8
+ @udp_socket = UDPSocket.new
9
+ @udp_socket.bind(host, port)
10
10
  end
11
11
 
12
+ def load_config(config_json)
13
+ super
14
+
15
+ host = config_json['host'].to_s
16
+ port = config_json['port'].nil? ? 4913 : config_json['port'].to_i
17
+ @udp_socket = UDPSocket.new
18
+ @udp_socket.bind(host, port)
19
+ end
20
+
21
+ # register :udp
22
+
12
23
  protected
13
24
 
14
25
  def flush_and_clear
15
26
  semaphore.synchronize do
16
- u1 = UDPSocket.new
17
- u1.bind(@host, @port)
18
- @log_records.each { |log_record| u1.send log_record.to_s, 0, @host, @port }
19
- u1.close
27
+ @log_records.each { |log_record| @udp_socket.send @formatter.format(log_record), 0, @host, @port }
20
28
  end
21
29
  super
22
30
  end
@@ -1,49 +1,59 @@
1
- require_relative 'log_severity'
1
+ require_relative 'severity_level'
2
2
  require_relative 'log_factory_record'
3
+ require 'jbuilder'
3
4
 
4
5
  module RTALogger
5
6
  # the main class to logging data as topic
6
7
  class LogTopic
7
- include LogSeverity
8
+ include SeverityLevel
8
9
  include RTALogger::LogFactory
9
10
 
10
- def initialize(log_manager, topic_title, log_level = WARN)
11
+ def initialize(log_manager, title, severity_level = WARN, enable = true)
11
12
  # Logger logger = Logger.new(Logger::DEBUG)
12
- @enable = true
13
+ @enable = enable
13
14
  @log_manager = log_manager
14
- @topic_title = topic_title.to_s.dup
15
- @log_level = log_level
15
+ @title = title.to_s.dup
16
+ @severity_level = severity_level
16
17
  end
17
18
 
18
19
  attr_accessor :enable
19
20
  attr_reader :log_manager
20
- attr_reader :topic_title
21
- attr_accessor :log_level
21
+ attr_reader :title
22
+ attr_accessor :severity_level
22
23
 
23
24
  def debug(context_id, *message)
24
- add(context_id, DEBUG, message) if @log_level.to_i <= DEBUG.to_i
25
+ add(context_id, DEBUG, message) if @severity_level.to_i <= DEBUG.to_i
25
26
  end
26
27
 
27
28
  def info(context_id, *message)
28
- add(context_id, INFO, message) if @log_level.to_i <= INFO.to_i
29
+ add(context_id, INFO, message) if @severity_level.to_i <= INFO.to_i
29
30
  end
30
31
 
31
32
  def warning(context_id, *message)
32
- add(context_id, WARN, message) if @log_level.to_i <= WARN.to_i
33
+ add(context_id, WARN, message) if @severity_level.to_i <= WARN.to_i
33
34
  end
34
35
 
35
36
  def error(context_id, *message)
36
- add(context_id, ERROR, message) if @log_level.to_i <= ERROR.to_i
37
+ add(context_id, ERROR, message) if @severity_level.to_i <= ERROR.to_i
37
38
  end
38
39
 
39
40
  def fatal(context_id, *message)
40
- add(context_id, FATAL, message) if @log_level.to_i <= FATAL.to_i
41
+ add(context_id, FATAL, message) if @severity_level.to_i <= FATAL.to_i
41
42
  end
42
43
 
43
44
  def unknown(context_id, *message)
44
- add(context_id, UNKNOWN, message) if @log_level.to_i <= UNKNOWN.to_i
45
+ add(context_id, UNKNOWN, message) if @severity_level.to_i <= UNKNOWN.to_i
45
46
  end
46
47
 
48
+ def to_builder
49
+ jb = Jbuilder.new do |json|
50
+ json.title title
51
+ json.severity_level parse_severity_level_to_s(severity_level)
52
+ json.enable enable
53
+ end
54
+
55
+ jb
56
+ end
47
57
  private
48
58
 
49
59
  def add(context_id, severity, *message)
@@ -1,35 +1,56 @@
1
1
  {
2
- "RTALogger":
2
+ "rta_logger":
3
3
  {
4
- "Default_Manager": "Develop",
5
- "Log_Managers":
4
+ "default_manager": "develop",
5
+ "log_managers":
6
6
  [
7
7
  {
8
- "Manager_Name": "Develop",
9
- "Enable": true,
10
- "App_Name": "TestApp",
11
- "Log_Severity": 2,
12
- "Buffer_Size": 100,
13
- "Flush_Wait_Seconds": 15,
14
- "Formatter" : "JSON",
15
- "Repos":
8
+ "manager_name": "develop",
9
+ "enable": true,
10
+ "app_name": "TestApp",
11
+ "severity_level": "debug",
12
+ "buffer_size": 100,
13
+ "flush_wait_seconds": 15,
14
+ "repos":
16
15
  [
17
16
  {
18
- "Enable": true,
19
- "Type": "Console"
17
+ "enable": true,
18
+ "type": "console",
19
+ "formatter":
20
+ {
21
+ "type": "text",
22
+ "delimiter": "|"
23
+ }
20
24
  },
21
25
  {
22
- "Enable": false,
23
- "Type": "File",
24
- "File_Path": "../../log/log.txt",
25
- "Roll_Period": "daily",
26
- "Roll_Size": "1048576"
26
+ "enable": true,
27
+ "type": "file",
28
+ "file_path": "log.txt",
29
+ "roll_period": "daily",
30
+ "roll_size": "1048576",
31
+ "formatter":
32
+ {
33
+ "type": "text",
34
+ "delimiter": "|"
35
+ }
27
36
  },
28
37
  {
29
- "Enable": true,
30
- "Type": "Fluentd",
31
- "Host": "localhost",
32
- "Port": "8888"
38
+ "enable": true,
39
+ "type": "fluentd",
40
+ "host": "localhost",
41
+ "port": "8888",
42
+ "formatter":
43
+ {
44
+ "type": "json"
45
+ }
46
+ }
47
+ ],
48
+ "topics":
49
+ [
50
+ {
51
+ "title": "test",
52
+ "enable": true,
53
+ "severity_level": "WARN"
33
54
  }
34
55
  ]
35
56
  }
@@ -4,6 +4,9 @@ require_relative 'log_factory_repository'
4
4
  controller_name = 'test_controller'
5
5
  userID = 5
6
6
 
7
+
8
+ # RTALogger::LogFactory.register_log_repository :console, 'log_repository_console.rb'
9
+
7
10
  # create log manager instance
8
11
  # this could be a global variable declared in application level
9
12
  log_manager = RTALogger::LogFactory.log_manager_instance
@@ -21,6 +24,9 @@ log_manager.config_use_json_file('rta_logger_config.json')
21
24
  # use this api to get a new log topic instance
22
25
  # this api could be called in entry point of each service or class initialize method
23
26
  topic = log_manager.add_topic(controller_name)
27
+ test_topic = log_manager.add_topic('test')
28
+ # test_topic.severity_level = ::RTALogger::SeverityLevel::FATAL
29
+ # test_topic.enable = false
24
30
 
25
31
  # add log information to log topic
26
32
  topic.debug(userID, 'Controller Name=', controller_name, 'debug')
@@ -30,8 +36,13 @@ topic.error(userID, 'Controller Name=', controller_name, 'error')
30
36
  topic.fatal(userID, 'Controller Name=', controller_name, 'fatal')
31
37
  topic.unknown(userID, 'Controller Name=', controller_name, 'unknown')
32
38
 
39
+ test_topic.error(userID, 'test_topic', 'error')
40
+ test_topic.fatal(userID, 'test_topic', 'fatal')
41
+
42
+ puts log_manager.reveal_config
43
+
33
44
  # update specific topic log level if necessary
34
- # log_manager.update_topic_level(controller_name, RTALogger::LogSeverity::INFO)
45
+ # log_manager.update_topic_level(controller_name, RTALogger::SeverityLevel::INFO)
35
46
 
36
47
  # update all topics log level if necessary
37
- # log_manager.update_all_topics_log_level(RTALogger::LogSeverity::INFO)
48
+ # log_manager.update_all_topics_severity_level(RTALogger::SeverityLevel::INFO)
@@ -0,0 +1,60 @@
1
+ module RTALogger
2
+ # Logging severity.
3
+ module SeverityLevel
4
+ # Low-level information, mostly for developers.
5
+ DEBUG = 0
6
+ # Generic (useful) information about system operation.
7
+ INFO = 1
8
+ # A warning.
9
+ WARN = 2
10
+ # A handleable error condition.
11
+ ERROR = 3
12
+ # An un-handleable error that results in a program crash.
13
+ FATAL = 4
14
+ # An unknown message that should always be logged.
15
+ UNKNOWN = 5
16
+
17
+
18
+ def parse_severity_level_to_i(severity_level)
19
+ return severity_level if severity_level.is_a? ::Integer
20
+
21
+ case severity_level.upcase
22
+ when 'DEBUG'
23
+ 0
24
+ when 'INFO'
25
+ 1
26
+ when 'INFORMATIONّٔ'
27
+ 1
28
+ when 'WARN'
29
+ 2
30
+ when 'WARNING'
31
+ 2
32
+ when 'ERROR'
33
+ 3
34
+ when 'FATAL'
35
+ 4
36
+ when 'UNKNOWN'
37
+ 5
38
+ end
39
+ end
40
+
41
+ def parse_severity_level_to_s(severity_level)
42
+ return severity_level if severity_level.is_a? ::String
43
+
44
+ case severity_level.to_i
45
+ when 0
46
+ 'DEBUG'
47
+ when 1
48
+ 'INFO'
49
+ when 2
50
+ 'WARN'
51
+ when 3
52
+ 'ERROR'
53
+ when 4
54
+ 'FATAL'
55
+ when 5
56
+ 'UNKNOWN'
57
+ end
58
+ end
59
+ end
60
+ 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: 0.1.4
4
+ version: 1.0.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-16 00:00:00.000000000 Z
11
+ date: 2020-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluent-logger
@@ -68,7 +68,6 @@ files:
68
68
  - bin/setup
69
69
  - lib/RTALogger.rb
70
70
  - lib/RTALogger/version.rb
71
- - lib/log_factory_file_logger.rb
72
71
  - lib/log_factory_log_formatter.rb
73
72
  - lib/log_factory_manager.rb
74
73
  - lib/log_factory_propagator.rb
@@ -86,10 +85,10 @@ files:
86
85
  - lib/log_repository_file.rb
87
86
  - lib/log_repository_fluent.rb
88
87
  - lib/log_repository_udp.rb
89
- - lib/log_severity.rb
90
88
  - lib/log_topic.rb
91
89
  - lib/rta_logger_config.json
92
90
  - lib/sample.rb
91
+ - lib/severity_level.rb
93
92
  homepage: https://github.com/BBahrainy/RTALogger.git
94
93
  licenses:
95
94
  - MIT
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- module RTALogger
6
- # this module generates object instance
7
- module LogFactory
8
- def self.new_file_logger(file_path = 'log.txt', period = 'daily', shift_size = 1_048_576)
9
- @ruby_logger = Logger.new(file_path, period, shift_size)
10
- @ruby_logger.level = Logger::Severity::DEBUG
11
- @ruby_logger.formatter = proc do |_severity, _datetime, _progname, msg|
12
- "#{msg}\n"
13
- end
14
- @ruby_logger
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- module RTALogger
2
- # Logging severity.
3
- module LogSeverity
4
- # Low-level information, mostly for developers.
5
- DEBUG = 0
6
- # Generic (useful) information about system operation.
7
- INFO = 1
8
- # A warning.
9
- WARN = 2
10
- # A handleable error condition.
11
- ERROR = 3
12
- # An un-handleable error that results in a program crash.
13
- FATAL = 4
14
- # An unknown message that should always be logged.
15
- UNKNOWN = 5
16
- end
17
- end