RTALogger 0.1.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,10 +6,14 @@ module RTALogger
6
6
  class LogRepositoryConsole < LogRepository
7
7
  def initialize
8
8
  super
9
+ end
9
10
 
10
- @formatter = RTALogger::LogFactory.log_formatter_default
11
+ def load_config(config_json)
12
+ super
11
13
  end
12
14
 
15
+ # register :console
16
+
13
17
  protected
14
18
 
15
19
  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,43 @@ 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)
12
- @formatter = RTALogger::LogFactory.log_formatter_default
10
+ @file_path = file_path
11
+ @period = period
12
+ @shift_size = shift_size
13
+ @file_logger = create_ruby_logger(@file_path, @period, @shift_size)
13
14
  end
14
15
 
16
+ def load_config(config_json)
17
+ super
18
+
19
+ file_path = config_json['file_path'].to_s
20
+ period = config_json['roll_period'].to_s
21
+ shift_size = config_json['roll_size'].nil? ? 1_048_576 : config_json['roll_size'].to_i
22
+ @file_logger = create_ruby_logger(file_path, period, shift_size)
23
+ end
24
+
25
+ def to_builder
26
+ json = super
27
+ json.enable enable
28
+ json.file_path @file_path
29
+ json.period @period
30
+ json.shift_size @shift_size
31
+
32
+ json
33
+ end
34
+ # register :file
35
+
15
36
  protected
16
37
 
38
+ def create_ruby_logger(file_path, period, shift_size)
39
+ ruby_logger = Logger.new(file_path, period, shift_size)
40
+ ruby_logger.level = Logger::Severity::DEBUG
41
+ ruby_logger.formatter = proc do |_severity, _datetime, _progname, msg|
42
+ "#{msg}\n"
43
+ end
44
+ ruby_logger
45
+ end
46
+
17
47
  def flush_and_clear
18
48
  semaphore.synchronize do
19
49
  @log_records.each { |log_record| @file_logger.debug(@formatter.format(log_record)) }
@@ -0,0 +1,58 @@
1
+ require 'fluent-logger'
2
+ require_relative 'log_repository'
3
+
4
+ module RTALogger
5
+ class LogRepositoryFluentd < LogRepository
6
+ def initialize(host = 'localhost', port = 24224, tls_options = nil)
7
+ super()
8
+ @host = host
9
+ @port = port
10
+ @fluent_logger = create_fluentd_logger(host, port, tls_options)
11
+ end
12
+
13
+ def load_config(config_json)
14
+ super
15
+
16
+ host = config_json['host'].to_s
17
+ port = config_json['port'].to_s
18
+ tls_options = config_json['tls_options']
19
+
20
+ @fluent_logger = create_fluentd_logger(host, port, tls_options)
21
+ end
22
+
23
+ def to_builder
24
+ json = super
25
+ json.enable enable
26
+ json.host @host
27
+ json.port @port
28
+
29
+ json
30
+ end
31
+ # register :fluentd
32
+
33
+ protected
34
+
35
+ def create_fluentd_logger(host, port, tls_options)
36
+ unless tls_options
37
+ fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, :host => host, :port => port, :use_nonblock => true, :wait_writeable => false)
38
+ else
39
+ fluent_logger = ::Fluent::Logger::FluentLogger.new(nil, :host => host, :port => port, :tls_options => tls_options, :use_nonblock => true, :wait_writeable => false)
40
+ end
41
+
42
+ fluent_logger
43
+ end
44
+
45
+ def flush_and_clear
46
+ semaphore.synchronize do
47
+ @log_records.each do |log_record|
48
+ fluent_tag = log_record.app_name + '.' + log_record.topic_title
49
+ log_json_string = @formatter.format(log_record)
50
+ log_json = JSON.parse(log_json_string)
51
+
52
+ @fluent_logger.post(fluent_tag, log_json)
53
+ end
54
+ end
55
+ super
56
+ end
57
+ end
58
+ end
@@ -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": 10,
14
+ "repositories":
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": "json",
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,8 @@ require_relative 'log_factory_repository'
4
4
  controller_name = 'test_controller'
5
5
  userID = 5
6
6
 
7
+ # RTALogger::LogFactory.register_log_repository :console, 'log_repository_console.rb'
8
+
7
9
  # create log manager instance
8
10
  # this could be a global variable declared in application level
9
11
  log_manager = RTALogger::LogFactory.log_manager_instance
@@ -21,6 +23,9 @@ log_manager.config_use_json_file('rta_logger_config.json')
21
23
  # use this api to get a new log topic instance
22
24
  # this api could be called in entry point of each service or class initialize method
23
25
  topic = log_manager.add_topic(controller_name)
26
+ test_topic = log_manager.add_topic('test')
27
+ # test_topic.severity_level = ::RTALogger::SeverityLevel::FATAL
28
+ # test_topic.enable = false
24
29
 
25
30
  # add log information to log topic
26
31
  topic.debug(userID, 'Controller Name=', controller_name, 'debug')
@@ -30,8 +35,13 @@ topic.error(userID, 'Controller Name=', controller_name, 'error')
30
35
  topic.fatal(userID, 'Controller Name=', controller_name, 'fatal')
31
36
  topic.unknown(userID, 'Controller Name=', controller_name, 'unknown')
32
37
 
38
+ test_topic.error(userID, 'test_topic', 'error')
39
+ test_topic.fatal(userID, 'test_topic', 'fatal')
40
+
41
+ puts log_manager.reveal_config
42
+
33
43
  # update specific topic log level if necessary
34
- # log_manager.update_topic_level(controller_name, RTALogger::LogSeverity::INFO)
44
+ # log_manager.update_topic_level(controller_name, RTALogger::SeverityLevel::INFO)
35
45
 
36
46
  # update all topics log level if necessary
37
- # log_manager.update_all_topics_log_level(RTALogger::LogSeverity::INFO)
47
+ # 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
@@ -0,0 +1,9 @@
1
+ class String
2
+ def underscore
3
+ self.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr("-", "_").
7
+ downcase
8
+ end
9
+ 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.2
4
+ version: 1.1.1
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-11-08 00:00:00.000000000 Z
11
+ date: 2020-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluent-logger
@@ -68,14 +68,13 @@ 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
75
74
  - lib/log_factory_record.rb
76
75
  - lib/log_factory_repository.rb
77
76
  - lib/log_factory_topic.rb
78
- - lib/log_formatter.rb
77
+ - lib/log_formatter_base.rb
79
78
  - lib/log_formatter_json.rb
80
79
  - lib/log_formatter_text.rb
81
80
  - lib/log_manager.rb
@@ -84,12 +83,13 @@ files:
84
83
  - lib/log_repository.rb
85
84
  - lib/log_repository_console.rb
86
85
  - lib/log_repository_file.rb
87
- - lib/log_repository_fluent.rb
86
+ - lib/log_repository_fluentd.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
92
+ - lib/string.rb
93
93
  homepage: https://github.com/BBahrainy/RTALogger.git
94
94
  licenses:
95
95
  - MIT