RTALogger 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/.gitignore +2 -0
  3. data/.idea/.rakeTasks +7 -0
  4. data/.idea/RTALogger.iml +29 -0
  5. data/.idea/misc.xml +7 -0
  6. data/.idea/modules.xml +8 -0
  7. data/.idea/vcs.xml +6 -0
  8. data/Gemfile +1 -0
  9. data/Gemfile.lock +21 -23
  10. data/README.md +326 -4
  11. data/RTALogger.gemspec +2 -1
  12. data/lib/RTALogger.rb +2 -4
  13. data/lib/RTALogger/version.rb +1 -1
  14. data/lib/log_factory_log_formatter.rb +35 -0
  15. data/lib/{factory/origin/log_factory_manager.rb → log_factory_manager.rb} +1 -3
  16. data/lib/{factory/origin/log_factory_propagator.rb → log_factory_propagator.rb} +1 -2
  17. data/lib/{factory/origin/log_factory_record.rb → log_factory_record.rb} +1 -1
  18. data/lib/log_factory_repository.rb +37 -0
  19. data/lib/log_factory_topic.rb +12 -0
  20. data/lib/log_formatter.rb +11 -1
  21. data/lib/log_formatter_json.rb +4 -2
  22. data/lib/log_formatter_text.rb +8 -6
  23. data/lib/log_manager.rb +126 -40
  24. data/lib/log_propagator.rb +44 -45
  25. data/lib/log_record.rb +27 -28
  26. data/lib/log_repository.rb +26 -4
  27. data/lib/log_repository_console.rb +8 -3
  28. data/lib/log_repository_file.rb +24 -6
  29. data/lib/log_repository_fluent.rb +49 -0
  30. data/lib/log_repository_udp.rb +14 -7
  31. data/lib/log_topic.rb +26 -18
  32. data/lib/rta_logger_config.json +59 -0
  33. data/lib/sample.rb +48 -0
  34. data/lib/severity_level.rb +60 -0
  35. metadata +34 -20
  36. data/lib/factory/origin/log_factory_file_logger.rb +0 -16
  37. data/lib/factory/origin/log_factory_log_formatter.rb +0 -11
  38. data/lib/factory/origin/log_factory_repository.rb +0 -44
  39. data/lib/factory/origin/log_factory_topic.rb +0 -12
  40. data/lib/log_severity.rb +0 -17
  41. data/lib/log_test.rb +0 -41
  42. data/lib/log_test_db.rb +0 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8102f5e6bfb81e09e529d98b34039304aa7376d553e0df71e974a2eeaf6818d
4
- data.tar.gz: 7a6558fa4df04b8bbaede48620644b7b85de448d96b7e93340d30f018a872461
3
+ metadata.gz: d4c558e31bfbc739d0ad9ebb218c96c61fdcc354b6ae9a9c0daa3ea4743786c3
4
+ data.tar.gz: b00ec909d9a8791671e29e949fb19cfb31e59d7fbf353532a70bfb216e6b4e45
5
5
  SHA512:
6
- metadata.gz: 590a74703f4605c4a0df2e3a5a1997bf1c0209182b961ef74769f4c037f7fefb8770240d317e6017d3cf9ae30f1fc1cbd4e489c6e5c7f083b36f04b6d6f64bc6
7
- data.tar.gz: 1dd9d109f63173420be1bbb6306d76eda10140c4474aa8b4de27f46ef7dbadceec58d5ba8816b03fa53de2cb6ee6b793ae3726ade97728aa3de55ec592e30255
6
+ metadata.gz: c6296831235e737111217cf51f4e3d477620d588319fb0540760b948028b26f87361e03cc7c453dd00ab3c4553a26ad045791e2d9e64d1153017246e664348bd
7
+ data.tar.gz: 39885f5f4f039199748d9201f632ac4e745bd41cced49971ddc70b9599281c556a2d85e3fb13332a76cb0b01d78f1efb88d510331071332ccfdcbd26528543a7
@@ -0,0 +1,2 @@
1
+ # Default ignored files
2
+ /workspace.xml
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Settings><!--This file was automatically generated by Ruby plugin.
3
+ You are allowed to:
4
+ 1. Remove rake task
5
+ 2. Add existing rake tasks
6
+ To add existing rake tasks automatically delete this file and reload the project.
7
+ --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build RTALogger-0.1.0.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install RTALogger-0.1.0.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install RTALogger-0.1.0.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.1.0 and build and push RTALogger-0.1.0.gem to https://www.rubygems.org" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run RSpec code examples" fullCmd="spec" taksId="spec" /></RakeGroup></Settings>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="ModuleRunConfigurationManager">
4
+ <shared />
5
+ </component>
6
+ <component name="NewModuleRootManager">
7
+ <content url="file://$MODULE_DIR$" />
8
+ <orderEntry type="inheritedJdk" />
9
+ <orderEntry type="sourceFolder" forTests="false" />
10
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v6.0.3.4, ruby-2.6.3-p62) [gem]" level="application" />
11
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v2.1.4, ruby-2.6.3-p62) [gem]" level="application" />
12
+ <orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.1.7, ruby-2.6.3-p62) [gem]" level="application" />
13
+ <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.4.4, ruby-2.6.3-p62) [gem]" level="application" />
14
+ <orderEntry type="library" scope="PROVIDED" name="fluent-logger (v0.9.0, ruby-2.6.3-p62) [gem]" level="application" />
15
+ <orderEntry type="library" scope="PROVIDED" name="i18n (v1.8.5, ruby-2.6.3-p62) [gem]" level="application" />
16
+ <orderEntry type="library" scope="PROVIDED" name="jbuilder (v2.10.1, ruby-2.6.3-p62) [gem]" level="application" />
17
+ <orderEntry type="library" scope="PROVIDED" name="minitest (v5.14.2, ruby-2.6.3-p62) [gem]" level="application" />
18
+ <orderEntry type="library" scope="PROVIDED" name="msgpack (v1.3.3, ruby-2.6.3-p62) [gem]" level="application" />
19
+ <orderEntry type="library" scope="PROVIDED" name="rake (v12.3.3, ruby-2.6.3-p62) [gem]" level="application" />
20
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v3.10.0, ruby-2.6.3-p62) [gem]" level="application" />
21
+ <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.10.0, ruby-2.6.3-p62) [gem]" level="application" />
22
+ <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.10.0, ruby-2.6.3-p62) [gem]" level="application" />
23
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.10.0, ruby-2.6.3-p62) [gem]" level="application" />
24
+ <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.10.0, ruby-2.6.3-p62) [gem]" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.6, ruby-2.6.3-p62) [gem]" level="application" />
26
+ <orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.7, ruby-2.6.3-p62) [gem]" level="application" />
27
+ <orderEntry type="library" scope="PROVIDED" name="zeitwerk (v2.4.1, ruby-2.6.3-p62) [gem]" level="application" />
28
+ </component>
29
+ </module>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="JavaScriptSettings">
4
+ <option name="languageLevel" value="ES6" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="ruby-2.6.3-p62" project-jdk-type="RUBY_SDK" />
7
+ </project>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/RTALogger.iml" filepath="$PROJECT_DIR$/.idea/RTALogger.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
data/Gemfile CHANGED
@@ -5,3 +5,4 @@ gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
7
  gem "rspec", "~> 3.0"
8
+ gem "jbuilder"
@@ -1,26 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- RTALogger (0.1.0)
5
- fluentd (~> 1.11, >= 1.11.4)
4
+ RTALogger (1.0.0)
5
+ fluent-logger (~> 0.9)
6
+ jbuilder (~> 2.10)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ activesupport (6.0.3.4)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ zeitwerk (~> 2.2, >= 2.2.2)
10
17
  concurrent-ruby (1.1.7)
11
- cool.io (1.7.0)
12
18
  diff-lcs (1.4.4)
13
- fluentd (1.11.4)
14
- cool.io (>= 1.4.5, < 2.0.0)
15
- http_parser.rb (>= 0.5.1, < 0.7.0)
16
- msgpack (>= 1.3.1, < 2.0.0)
17
- serverengine (>= 2.0.4, < 3.0.0)
18
- sigdump (~> 0.2.2)
19
- strptime (>= 0.2.2, < 1.0.0)
20
- tzinfo (>= 1.0, < 3.0)
21
- tzinfo-data (~> 1.0)
22
- yajl-ruby (~> 1.0)
23
- http_parser.rb (0.6.0)
19
+ fluent-logger (0.9.0)
20
+ msgpack (>= 1.0.0, < 2)
21
+ i18n (1.8.5)
22
+ concurrent-ruby (~> 1.0)
23
+ jbuilder (2.10.1)
24
+ activesupport (>= 5.0.0)
25
+ minitest (5.14.2)
24
26
  msgpack (1.3.3)
25
27
  rake (12.3.3)
26
28
  rspec (3.10.0)
@@ -36,21 +38,17 @@ GEM
36
38
  diff-lcs (>= 1.2.0, < 2.0)
37
39
  rspec-support (~> 3.10.0)
38
40
  rspec-support (3.10.0)
39
- serverengine (2.2.2)
40
- sigdump (~> 0.2.2)
41
- sigdump (0.2.4)
42
- strptime (0.2.5)
43
- tzinfo (2.0.2)
44
- concurrent-ruby (~> 1.0)
45
- tzinfo-data (1.2020.4)
46
- tzinfo (>= 1.0.0)
47
- yajl-ruby (1.4.1)
41
+ thread_safe (0.3.6)
42
+ tzinfo (1.2.7)
43
+ thread_safe (~> 0.1)
44
+ zeitwerk (2.4.1)
48
45
 
49
46
  PLATFORMS
50
47
  ruby
51
48
 
52
49
  DEPENDENCIES
53
50
  RTALogger!
51
+ jbuilder
54
52
  rake (~> 12.0)
55
53
  rspec (~> 3.0)
56
54
 
data/README.md CHANGED
@@ -1,8 +1,32 @@
1
1
  # RTALogger
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/RTALogger`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ RTA Log Manager has been designed and implemented to provide standard logging API for developers.
4
+ This prevents chaos in log data format.
5
+ Also provide multiple extendable log repositories including wrapping existing loggers, like 'Fluentd' or implement completely new custom logger.
6
+ All log manager's main features are configable through a json config file.
4
7
 
5
- TODO: Delete this and the text above, and describe your gem
8
+ Main purposes of developing this gem are:
9
+ - Creating standard logging API to seperate application from existing variety of loggers.
10
+ - Wrapping around existing loggers so get advantage of different loggers at the same time.
11
+ - Make it possible to easily replace a logger component with a new one. (for example Rails standard Logger with Fluentd)
12
+ without any changes in the consumer application.
13
+ - Creating easy to use logger interface.
14
+ - Apply some rules and restrictions about log structure and data format, which prevents chaos in application log information.
15
+ - No interrupt or wait time for log consumer modules.
16
+ - Utilize multiple log repositories at the same time in background (Console, File, UDP, FluentD, etc.)
17
+ - Make it possible to implement customized log repositories.
18
+
19
+ Main Features:
20
+ - Creating multiple log manager instances with different configuration is possible entire application.
21
+ - Each log manager instance could be configured via a json file.
22
+ - Each log manager instance could be config to use multiple log repositories such as Console, File, UDP, Fluentd.
23
+ - Runtime configurations could be applied through log manager APIs.
24
+ - By using multi threading techniques and also buffering techniques,
25
+ all logging process will handled in seperated thread.
26
+ So the log consumer modules should not be wait for log manager to finish the logging task.
27
+ - Multiple standard log severity levels are available through topic APIs (debug, info, warning, error, fatal, unknown)
28
+ - Main features could be set and manipulate through json configuration file.
29
+ - And at the end, it is easy to use for ruby backend developers.
6
30
 
7
31
  ## Installation
8
32
 
@@ -20,9 +44,307 @@ Or install it yourself as:
20
44
 
21
45
  $ gem install RTALogger
22
46
 
47
+ To add gem to your rails application:
48
+
49
+ $ bundle add RTALogger
50
+
23
51
  ## Usage
52
+ #### RTA Log Data Structure
53
+ To use log manager APIs, first step is to have a quick review on Log Data Structure
54
+ - Application: The root of each log data record is Application, which specify the log data owner application.
55
+ - Topic: By adding multiple topics to log manager you can categorize log data in logical topics.
56
+ - Context: Under each topic, one or multiple contexts (in one level) could be defined.
57
+ - As an instance the Application could by 'MyEShopApp', one of Topics could be 'Authentication' and
58
+ Contexts could be 'uer_name' which attend in application authorization process.
59
+ - The next step is log severity level, which determines that the log record severity (debug, information, warning, error, fatal, unknown)
60
+ - At last the final element is log message, which contains log message data.
61
+
62
+ ### Which Log Severity Levels to use
63
+ - DEBUG = 0 : Low-level information, mostly for developers.
64
+ - INFO = 1 : Generic (useful) information about system operation.
65
+ - WARN = 2 : A warning, which it does NOT cause crashing the process.
66
+ - ERROR = 3 : A handleable error condition.
67
+ - FATAL = 4 : An un-handleable error that results in a program crash.
68
+ - UNKNOWN = 5 : An unknown message that should always be logged.
69
+
70
+ ### Time for coding
71
+ - create log manager instance:
72
+ ```ruby
73
+ # add required files
74
+ require 'log_factory_manager'
75
+
76
+ # create log manager instance using LogFactory
77
+ log_manager = RTALogger::LogFactory.log_manager_instance
78
+ ```
79
+ - Apply configuration using json config file
80
+ ```ruby
81
+ # the parameter is the json config file
82
+ log_manager.config_use_json_file('rta_logger_config.json')
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
+ ```
129
+ - Add new topic to log manager and get the topic instance
130
+ ```ruby
131
+ # the parameter is the topic name
132
+ # if add_topic API called multiple times with same parameter,
133
+ # only one instance will be created for that topic
134
+ topic = log_manager.add_topic('Authentication')
135
+ ```
136
+ - Finally add log message using topic instance
137
+ ```ruby
138
+ # Assume user 'Tom' is trying to authenticate we will use user_name as log Context_id
139
+ user_name = 'Tom'
140
+ topic = log_manager.add_topic('Authentication')
141
+ topic.debug(user_name, 'use_id is nil for user:', user_name)
142
+ topic.info(user_name, 'User ', user_name , ' is trying to login.')
143
+ topic.warning(user_name, 'Authentication failed for user ', user_name)
144
+ topic.error(user_name, 'Error connecting to data base for user ', user_name)
145
+ topic.fatal(user_name, 'Authentication service has been stopped working')
146
+ topic.unknown(user_name, 'An unknown error occured during authentication. user name:', user_name)
147
+ ```
148
+ the result will be:
149
+ ```
150
+ {"occurred_at":"2020-11-04 15:56:58:785","app_name":"TestApp","topic_title":"Authentication","context_id":"Tom","severity":0,"message":"user_id is nil for user: Tom"}
151
+ {"occurred_at":"2020-11-04 15:56:58:785","app_name":"TestApp","topic_title":"Authentication","context_id":"Tom","severity":1,"message":"User Tom is trying to login"}
152
+ {"occurred_at":"2020-11-04 15:56:58:785","app_name":"TestApp","topic_title":"Authentication","context_id":"Tom","severity":2,"message":"Authentication failed for user Tom"}
153
+ {"occurred_at":"2020-11-04 15:56:58:785","app_name":"TestApp","topic_title":"Authentication","context_id":"Tom","severity":3,"message":"Error connecting to data base for user Tom"}
154
+ {"occurred_at":"2020-11-04 15:56:58:785","app_name":"TestApp","topic_title":"Authentication","context_id":"Tom","severity":4,"message":"Authentication service has been stopped working"}
155
+ {"occurred_at":"2020-11-04 15:56:58:785","app_name":"TestApp","topic_title":"Authentication","context_id":"Tom","severity":5,"message":"An unknown error occured during authentication. user name: Tom"}
156
+ ```
157
+ - json config file sample
158
+ ```json
159
+ {
160
+ "rta_logger":
161
+ {
162
+ "default_manager": "develop",
163
+ "log_managers":
164
+ [
165
+ {
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":
173
+ [
174
+ {
175
+ "enable": true,
176
+ "type": "console",
177
+ "formatter":
178
+ {
179
+ "type": "text",
180
+ "delimiter": "|"
181
+ }
182
+ },
183
+ {
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
+ }
194
+ },
195
+ {
196
+ "enable": false,
197
+ "type": "fluentd",
198
+ "host": "localhost",
199
+ "port": "8888",
200
+ "formatter":
201
+ {
202
+ "type": "json"
203
+ }
204
+ }
205
+ ],
206
+ "topics":
207
+ [
208
+ {
209
+ "title": "test",
210
+ "enable": true,
211
+ "severity_level": "info"
212
+ }
213
+ ]
214
+ }
215
+ ]
216
+ }
217
+ }
218
+ ```
219
+ - json config file structure
220
+ ```comment
221
+ As we described you cap apply RTA log manager using a json config file.
222
+
223
+ log_manager.config_use_json_file('rta_logger_config.json')
224
+
225
+ The file structure:
226
+ - rta_logger : the root element of rta_logger json configuration.
227
+ - default_manager: the name of default log manager config, when there is
228
+ multiple log manager configuration in Log_Managers array.
229
+ - log_managers : the array of LogManagers with different configuration.
230
+ It is possible to define multiple log manager configurations for differen usages.
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
236
+ decread api consumers wait time. when the buffer is full the flush operation will
237
+ save buffered logs to log repositoies.
238
+ - flush_wait_seconds: Time in soconds which log managers wait to flush buffered log objects
239
+ to log repository.
240
+ - repos: Array of log repositories. It is possible to define multiple log repositories to
241
+ store log data. there are variaty of log repositories and it is possible to
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.
245
+ - Log repository types and config:
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
259
+ roll file and create the new log file
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.
284
+ ```
285
+ - Some useful features
286
+ ```ruby
287
+ # change log manager app name at run time
288
+ log_manager.app_name = 'myTestApp'
289
+
290
+ # update specific topic log level if necessary
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)
295
+
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])
301
+ ```
302
+ - Implement and Expand
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
+ ```
323
+ Here is 'LogRepositoryConsole' implementation:
324
+ ```ruby
325
+ require_relative 'log_repository'
326
+ require_relative 'log_factory_log_formatter'
327
+
328
+ module RTALogger
329
+ # show log items on console out put
330
+ class LogRepositoryConsole < LogRepository
331
+ def initialize
332
+ super
24
333
 
25
- TODO: Write usage instructions here
334
+ @formatter = RTALogger::LogFactory.log_formatter_default
335
+ end
336
+
337
+ protected
338
+
339
+ def flush_and_clear
340
+ semaphore.synchronize do
341
+ @log_records.each { |log_record| puts @formatter.format(log_record) }
342
+ end
343
+ super
344
+ end
345
+ end
346
+ end
347
+ ```
26
348
 
27
349
  ## Development
28
350
 
@@ -32,7 +354,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
354
 
33
355
  ## Contributing
34
356
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/RTALogger.
357
+ Bug reports and pull requests are welcome on GitHub at https://github.com/BBahrainy/RTALogger.
36
358
 
37
359
 
38
360
  ## License