RTALogger 0.1.2 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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