logging-library developer guide updation
[platform-oam.git] / docs / developer-guide.rst
1 .. ===============LICENSE_START=======================================================
2 .. Acumos
3 .. ===================================================================================
4 .. Copyright (C) 2017-2018 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
5 .. ===================================================================================
6 .. This Acumos documentation file is distributed by AT&T and Tech Mahindra
7 .. under the Creative Commons Attribution 4.0 International License (the "License");
8 .. you may not use this file except in compliance with the License.
9 .. You may obtain a copy of the License at
10 ..  
11 ..      http://creativecommons.org/licenses/by/4.0
12 ..  
13 .. This file is distributed on an "AS IS" BASIS,
14 .. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 .. See the License for the specific language governing permissions and
16 .. limitations under the License.
17 .. ===============LICENSE_END=========================================================
18
19 ==========================================================================
20 Platform Operations, Administration, and Management (OA&M) Developer Guide
21 ==========================================================================
22
23
24 The OA&M project is for the processes, activities, tools, and standards involved with operating, administering, managing and maintaining the Acumos platform. The project uses Docker, Docker Compose, shell scripts, and third-party tools such as the Kong API and Elastic Stack.
25
26 Jira: `https://jira.acumos.org <https://jira.acumos.org>`_   project name: platform-oam
27
28 Gerrit:  git clone https://gerrit.acumos.org/r/platform-oam
29
30
31 ==================================
32 Elastic Stack Developer Guide
33 ==================================
34
35
36 Acumos ELK stack setup has five main components:
37
38 - **Elastic Search**: Elastic search is a distributed open source search engine based on Apache Lucene. Acumos Elastic search stores all the logs and metrics of Acumos platform host. 
39 - **Logstash**: Logstash is a data pipeline that helps collect, parse, and analyze a large variety of incoming logs generated across Acumos Platform. 
40 - **Kibana**: Web interface for searching and visualizing logs.
41 - **Filebeat**: Filebeat serves as a log shipping agent, Installed on Acumos platform servers it sends logs to Logstash.
42 - **Metricbeat**: Installed on Acumos platform servers. it periodically collects the metrics from the Acumos platform host operating system which includes running components information  and ships them to elasticsearch. These metrics are used for monitoring.
43
44 ==================================
45 ELK-CLient Developer Guide
46 ==================================
47 What is ELK-CLient?
48 =======================
49 ELASTIC SEARCH
50 ============================
51 In this Java Project there is one config folder under this folder there is a file elastic search.yml which contains the docker 
52 cluster and other details to run the elastic search component.
53 There is file in the project directory called as DockerFile in this file we give the configuration information related to
54 the elastic search is given,like version of the elastic search used.
55
56
57 LOGSTASH
58 =============================
59 In this Java Project there is one config folder under this folder there is a file logstash.yml which contains the docker 
60 cluster and other details to run the elastic search component.
61 There is file in the project directory called as DockerFile in this file we give the configuration information related to
62 the logstah like logstash & maria db version is given.
63
64 KIBANA
65 =============================
66 In this Java Project there is one config folder under this folder there is a file kibana.yml which contains the docker 
67 cluster and other details to run the elastic search component.
68 There is file in the project directory called as DockerFile in this file we give the configuration information related to
69 the kibana version command to run the Kibana.yml is given.
70
71
72 METRIC BEAT
73 =============================
74 In this Java Project there is one config folder under this folder there is a file metricbeat.yml which contains all the
75 setup related details to run the metric beat components.
76 There is a file in the project directory called as DockerFile in this file we give the configuration information related to
77 the elastic search is given,like version of the metric beat used,command to run the metricbeat.yml 
78
79 ELK-CLient
80 =============================
81 In this project we have created several Rest API to work on the elastic search.Every API has its own functionality.
82 Given below Rest API
83 ElasticSearchServiceController
84 Apart from the REST API there are the two services files also there SnapshotServiceImpl(Implementation of operation related 
85 to elastic stack snapshot.).Another one is the SnapshotRepositoryServiceImpl( Implementation of operation related to elastic stack repository.)
86
87
88
89 ==========================================
90 elk client rest api ,request and responses
91 ==========================================
92
93 ELK Stack Client Back end APIs
94 ========================
95
96 - Get all the archive snapshot
97 - Get all the indices of Elastic stack
98 - Get all the Elastic search repositories details of Elastic stack
99 - Get all the Elastic search snapshot
100 - Archive and Restore elastic stack snapshot
101 - Create Elastic stack repository
102 - Create Elastic stack snapshot
103 - Delete Elastic stack Indices
104 - Delete Elastic stack repository
105 - Delete Elastic stack snapshot
106 - Restore Elastic stack snapshot.
107
108 ==============================================
109 ELK client REST API urls,request and responses
110 ==============================================
111
112 1.Get all the archive snapshot.
113 ==============================
114 We use this rest API method to retrieve all the archived snapshots in elastic search.
115
116 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/all/archive``
117
118 Request Body Example:
119
120 .. code-block:: json
121
122     {
123                 {
124   "archiveInfo": [
125     {
126       "date": "string",
127       "repositoryName": "string",
128       "snapshots": [
129         {
130           "endTime": "2019-03-28 08-53-41",
131           "indices": "metricbeat-6.2.4-2019.04.04",
132           "snapShotId": "snapshot-2019-03-28t08-53-41",
133           "startTime": "2019-03-28 08-53-41",
134           "state": "SUCCESS",
135           "status": "Snapshot creation is in progress. Will take some time due size of data' or 'OK"
136         }
137       ]
138     }
139   ],
140   "msg": "string",
141   "status": "string"
142 }       
143         }
144         
145 Response Body Example:
146
147 .. code-block:: json
148
149     {
150   "archiveInfo": [
151     {
152       "date": "2019-10-28:22:52:57Z",
153       "repositoryName": "28Oct",
154       "snapshots": [
155         {
156           "snapShotId": "28bkup",
157           "status": "OK",
158           "state": "SUCCESS",
159           "startTime": "2019-10-28 22:52:44",
160           "endTime": "2019-10-28 22:52:49",
161           "indices": [
162             "metricbeat-6.2.4-2019.10.26",
163             "logstash"
164           ]
165         }
166       ]
167     },
168     {
169       "date": "2019-11-01:06:38:47Z",
170       "repositoryName": "abc1234",
171       "snapshots": [
172         {
173           "snapShotId": "abc",
174           "status": "OK",
175           "state": "SUCCESS",
176           "startTime": "2019-11-01 06:30:35",
177           "endTime": "2019-11-01 06:32:37",
178           "indices": [
179             "testdb"
180           ]
181         },
182         {
183           "snapShotId": "abc1",
184           "status": "OK",
185           "state": "SUCCESS",
186           "startTime": "2019-11-01 06:38:43",
187           "endTime": "2019-11-01 06:38:47",
188           "indices": [
189             "metricbeat-6.2.4-2019.10.26"
190           ]
191         }
192       ]
193     }
194   ],
195   "msg": "Action:INFO done",
196   "status": "success"
197 }
198
199 2. Get all the indices of Elastic stack.
200 =======================================
201 We use this rest API method to get all the indices of Elastic stack in elastic search.
202
203 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/all/indices``
204
205
206 Request Body Example:
207
208 .. code-block:: json
209
210     {
211                 {
212   "indices": [
213     "string"
214   ]
215 }
216         }
217         
218 Response Body Example:
219
220 .. code-block:: json
221
222     {
223   "indices": [
224     "metricbeat-6.2.4-2019.10.27",
225     "metricbeat-6.2.4-2019.10.25",
226     "metricbeat-6.2.4-2019.10.29",
227     "metricbeat-6.2.4-2019.11.05",
228     "logstash",
229     "metricbeat-6.2.4-2019.11.02",
230     "metricbeat-6.2.4-2019.10.31",
231     "metricbeat-6.2.4-2019.11.04",
232     "metricbeat-6.2.4-2019.11.03",
233     "metricbeat-6.2.4-2019.11.06",
234     "testdb",
235     "metricbeat-6.2.4-2019.10.30",
236     "metricbeat-6.2.4-2019.11.01",
237     "metricbeat-6.2.4-2019.10.28",
238     "metricbeat-6.2.4-2019.10.24",
239     "metricbeat-6.2.4-2019.10.26"
240   ]
241 }
242
243 3.Get all the elastic search repositories details of Elastic stack.
244 ===================================================================
245 We use this rest API method to retrieve  all the repositories in elastic search.
246
247
248 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/all/repositories``
249
250 Request Body Example:
251
252 .. code-block:: json
253
254     {
255                 {
256   "repositories": [
257     {
258       "name": "logstash",
259       "settings": {
260         "additionalProp1": {},
261         "additionalProp2": {},
262         "additionalProp3": {}
263       },
264       "type": "fs"
265     }
266   ]
267 }
268         }
269         
270 Response Body Example:
271
272 .. code-block:: json
273
274    {
275   "repositories": [
276     {
277       "name": "28Oct",
278       "type": "fs",
279       "settings": {
280         "compress": "true",
281         "location": "28Oct"
282       }
283     },
284     {
285       "name": "abc1234",
286       "type": "fs",
287       "settings": {
288         "compress": "true",
289         "location": "abc1234"
290       }
291     },
292     {
293       "name": "logstash",
294       "type": "fs",
295       "settings": {
296         "compress": "true",
297         "location": "logstash"
298       }
299     }
300   ]
301 }
302
303 4.Get all the elastic search snapshot.
304 =====================================
305
306 We use this rest API method to retrieve all the snapshots from the repository in elastic search.
307
308
309 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/all/snapshot``
310
311 Request Body Example:
312
313 .. code-block:: json
314
315     {
316                 {
317   "elasticsearchSnapshots": [
318     {
319       "repositoryName": "logstash",
320       "snapshots": [
321         {
322           "endTime": "2019-03-28 08-53-41",
323           "indices": "metricbeat-6.2.4-2019.04.04",
324           "snapShotId": "snapshot-2019-03-28t08-53-41",
325           "startTime": "2019-03-28 08-53-41",
326           "state": "SUCCESS",
327           "status": "Snapshot creation is in progress. Will take some time due size of data' or 'OK"
328         }
329       ]
330     }
331   ]
332 }
333         }
334         
335 Response Body Example:
336
337 .. code-block:: json
338
339     {
340   "elasticsearchSnapshots": []
341 }
342
343 5.Archive and Restore elastic stack snapshot.
344 ============================================
345 We use this rest API method to Archive and Restore elastic stack snapshot from elastic search.
346
347 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/archive/action``
348
349 Request Body Example:
350
351 .. code-block:: json
352
353     {
354                 {
355   "action": "archive/restore/delete",
356   "repositoryName": [
357     "string"
358   ]
359 }
360         }
361
362 Response Body Example:
363
364 .. code-block:: json
365
366     {
367   "archiveInfo": null,
368   "msg": "",
369   "status": "fail"
370         }
371
372 6.Create Elastic stack repository.
373 =================================
374
375 We use this rest API method to create a new repository in elastic search.
376
377 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/create/repositories``
378
379 Request Body Example:
380
381 .. code-block:: json
382
383     {
384                 {
385   "nodeTimeout": "string",
386   "repositoryName": "logstash"
387 }
388         }
389         
390 Response Body Example:
391
392 .. code-block:: json
393
394     {
395         can't parse JSON.  Raw result:
396
397         false | RepositoryName already exist
398         }
399
400 7.Create elastic stack snapshot.
401 ================================
402 We use this rest API method to create a new snapshot in a repository in elastic search.
403
404 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/create/snapshot``
405
406 Request Body Example:
407
408 .. code-block:: json
409
410     {   
411                 {
412   "createSnapshots": [
413     {
414       "indices": [
415         "string"
416       ],
417       "repositoryName": "string",
418       "snapshotName": "string"
419     }
420   ],
421   "nodeTimeout": 1
422 }
423         }
424         
425 Response Body Example:
426
427 .. code-block:: json
428
429     {
430   "timestamp": "2019-11-06T13:28:01.986+0000",
431   "message": "Elasticsearch exception [type=index_not_found_exception, reason=no such index]",
432   "details": "uri=/elkclient/create/snapshot"
433 }
434
435 8.Delete elastic stack Indices.
436 ===============================
437
438 We use this rest API method to delete the indices from a repository in elastic search.
439
440 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/delete/indices``
441
442 Request Body Example:
443
444 .. code-block:: json
445
446     {
447         {
448   "indices": [
449     "string"
450   ]
451 }
452         }
453         
454 Response Body Example:
455
456 .. code-block:: json
457
458     
459         {
460   "timestamp": "2019-11-06T13:25:38.500+0000",
461   "message": "Elasticsearch exception [type=index_not_found_exception, reason=no such index]",
462   "details": "uri=/elkclient/delete/indices"
463         }       
464
465
466 9.Delete Elastic stack repository.
467 =================================
468
469 We use this rest API method to delete the repository from a repository in elastic search.
470
471 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/delete/repositories``
472
473 Request Body Example:
474
475 .. code-block:: json
476
477     {
478                 {
479   "nodeTimeout": "string",
480   "repositoryName": "logstash"
481 }
482         }
483
484 Response Body Example:
485
486 .. code-block:: json
487
488     {
489   "timestamp": "2019-11-06T13:25:06.117+0000",
490   "message": "failed to parse setting [DeleteRepositoryRequest.masterNodeTimeout] with value [string] as a time value: unit is missing or unrecognized",
491   "details": "uri=/elkclient/delete/repositories"
492         }       
493
494         
495 10.Delete elastic stack snapshot.
496 ================================
497 We use this rest API method to delete a snapshot from a repository in elastic search.
498
499 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/delete/snapshot``
500
501 Request Body Example:
502
503 .. code-block:: json
504
505     {
506         {
507   "deleteSnapshots": [
508     {
509       "repositoryName": "logstash",
510       "snapShotId": "snapshot-2019-03-28t08-53-41"
511     }
512   ],
513   "nodeTimeout": 1
514 }
515         }
516         
517 Response Body Example:
518
519 .. code-block:: json
520     
521         {
522   "timestamp": "2019-11-06T13:24:24.664+0000",
523   "message": "Elasticsearch exception [type=snapshot_missing_exception, reason=[logstash:snapshot-2019-03-28t08-53-41] is missing]",
524   "details": "uri=/elkclient/delete/snapshot"
525         }
526
527 11.Restore elastic stack snapshot.
528 =================================
529 We use this rest API method to restore the snapshot from a repository in elastic search.
530
531 ``http://cognita-dev1-logcollector.eastus.cloudapp.azure.com:9600/elkclient/swagger-ui.html#/elastic-search-service-controller/restore/snapshot``
532
533 Request Body Example:
534
535 .. code-block:: json
536
537     {
538         {
539   "nodeTimeout": 1,
540   "repositoryName": "logstash",
541   "restoreSnapshots": [
542     {
543       "snapshotName": "string"
544     }
545   ]
546 }
547         }
548         
549 Response Body Example:
550
551 .. code-block:: json
552
553         {
554   "timestamp": "2019-11-06T13:20:08.023+0000",
555   "message": "Elasticsearch exception [type=snapshot_restore_exception, reason=[logstash:string] snapshot does not exist]",
556   "details": "uri=/elkclient/restore/snapshot"
557         }
558
559
560 ==================================
561 Logging Library Developer Guide
562 ==================================
563 What is Logging Library?
564 =======================
565
566 Logging Library has the following given below features :
567
568 There are three .java(ACUMOSLogConstants,LoggingConstant.java and LogConfig.java) files.
569
570 1.In the ACUMOSLogConstants.java following  given below features are there.
571 Marker
572 ====================
573 Marker is a spacial class  has the given below features.
574
575 Java logging frameworks allow you to filter log messages based on the logger name and the message log level.You can tag your
576 log messages with user-defined markers in order to filter them later on.
577
578 Markers are named objects used to enrich log statements. Conforming logging system Implementations of SLF4J determine how
579 information conveyed by markers are used, if at all. In particular, many conforming logging systems ignore marker data.
580 For this example, we will be using Logback as logger with SLF4J.Logback was conceived and created as a successor to Log4J.
581 Logback supports markers for the logging calls. These Markers allow association of tags with log statements. 
582
583 Marker has following given below attributes as INVOKE,INVOKE_RETURN,INVOKE_SYNCHRONOUS,INVOKE_ASYNCHRONOUS,ENTRY & EXIT
584 ,User can select any of the attribute as per his choice.
585
586 MDC
587 =====
588
589 The MDC manages contextual information on a per thread basis. Typically, while starting to service a new client request,
590 the developer will insert pertinent contextual information, such as the client id, client's IP address, request parameters
591 etc. into the MDC.Logback components, if appropriately configured, will automatically include this information in each log
592 entry.
593
594 MDC in Log4j allows us to fill a map-like structure with pieces of information that are accessible to the appender when 
595 the log message is actually written.The MDC structure is internally attached to the executing thread in the same way a 
596 ThreadLocal variable would be.
597
598 And so, the high level idea is:to fill the MDC with pieces of information that we want to make available to the appender
599 then log a message and finally, clear the MDC.
600
601 Most server applications need to handle multiple clients simultaneously. Typically, the server application allocates a 
602 separate thread to handle a single client request. In such a system different threads handle different client requests 
603 in parallel and the log messages written by the threads interleave. In order to differentiate log messages from different
604 threads from each other a diagnostic context comes in handy.Diagnostic context is a map associated with a particular thread.
605 Each thread maintains its own map. You can store arbitrary key-value pairs in the map and in turn lay out your log messages 
606 to include the values from the map.
607
608 MDC has following given below attributes as REQUEST_ID,TARGET_SERVICE_NAME,TARGET_ENTITY,CLIENT_IP_ADDRESS,SERVER_FQDN,
609 RESPONSE_CODE,RESPONSE_DESCRIPTION,RESPONSE_SEVERITY & STATUS_CODE,User can select any of the attribute as per his choice.
610
611 We have two (1- MDC, and 2 - MDCs )
612 New MDCs are added to serve more better way for ResponseStatusMDC and ResponseSeverityMDC of MDCs.
613 It will be useful in logging the thread requests/responses.
614 For more information we have added thread specific ResponseStatusMDC  which has three attributes as  MDC_COMPLETED,  MDC_ERROR 
615 &  MDC_INPROGRESS, user can select one of these attributes in logging statements like below:
616 public enum ResponseStatusMDC {
617                      
618                      MDC_COMPLETED,
619                      MDC_ERROR,
620                      MDC_INPROGRESS
621 }
622 Also for thread specific MDC had added ResponseSeverityMDC  which has six attributes as MDC_INFO,  MDC_ERROR,  MDC_TRACE,
623  MDC_DEBUG, MDC_WARN, MDC_FATAL.user can select one of these attributes in logging statements.
624   public enum ResponseSeverityMDC
625 {    MDC_INFO,    MDC_ERROR,    MDC_TRACE,    MDC_DEBUG,    MDC_WARN,    MDC_FATAL   }
626
627 Implementation of MDC 
628 =====================
629 How MDC are called externally from other project through the method setEnteringMDCs in LogConfig.java.
630 MDC is used for thread specific request so we just call this method setEnteringMDCs().
631
632                 MDC.put(MDCs.REQUEST_ID, requestId);            
633                 MDC.put(MDCs.TARGET_ENTITY, targetEntry);
634                 MDC.put(MDCs.TARGET_SERVICE_NAME, targetService);
635                 MDC.put(MDCs.CLIENT_IP_ADDRESS, ip);
636                 MDC.put(MDCs.SERVER_FQDN, hostname);
637                 MDC.put(MDCs.USER, user);
638
639 In this method setEnteringMDCs() we write the given below lines for the specific thread.
640
641 Also whatever parameters we pass as responseCode & responseSeverity in
642 setEnteringMDCs(String targetEntry,String targetService,String user,String responseCode,String responseSeverity) method.
643
644 There are conditions according to whatever ResponseStatusMDC & ResponseSeverityMDC you want to implement in logging statements
645 that will be printed in your logging statements with the help of given below statements as :
646
647 For example if you pass responseCode as MDC_COMPLETED then  given below lines will be printed in your logging statements.
648 MDC.put(MDCs.RESPONSE_DESCRIPTION, MDCs.ResponseStatusMDC.MDC_COMPLETED.toString());
649
650 And For example if you pass responseSeverity as MDC_INFO then  given below lines will be printed in your logging statements.
651 MDC.put(MDCs.RESPONSE_SEVERITY, MDCs.ResponseSeverityMDC.MDC_INFO.toString());
652         
653
654 Header
655 =======
656 In this class there is one attribute as REQUEST_ID whose value is X-ACUMOS-RequestID.
657
658 ResponseStatus enumeration
659 ==========================
660 In this enumeration there are three types of Response Status as COMPLETED,ERROR,INPROGRESS.The end user can choose any of the
661 response attribute as per his choice.
662
663 ResponseSeverity enumeration:
664 =============================
665 In this enumeration there are five types of Response Severity is given as :INFO,ERROR,TRACE,DEBUG,WARN,FATAL.The end user can
666 choose any of the response severity attribute as per his choice.
667
668 InvocationMode enumeration
669 ==========================
670 Invocation mode can be SYNCHRONOUS or ASYNCHRONOUS as per the user requirement.
671
672 2.Another File is the LogConfig.java
673 ====================================
674 In this file there is a static method as LogConfig.setEnteringMDCs(String targetEntry,String targetService,String user,String responseCode,String responseSeverity)
675 The user puts the entries in HashMap in the given below format.
676
677                 MDC.put(MDCs.REQUEST_ID, requestId);            
678                 MDC.put(MDCs.TARGET_ENTITY, targetEntry);
679                 MDC.put(MDCs.TARGET_SERVICE_NAME, targetService);
680                 MDC.put(MDCs.CLIENT_IP_ADDRESS, ip);
681                 MDC.put(MDCs.SERVER_FQDN, hostname);
682                 MDC.put(MDCs.USER, user);
683 Where responseCode & responseSeverity the user will pass whatever thread specific ResponseStatusMDC     & ResponseSeverityMDC he wants 
684 to implement in the logging statements. 
685                 MDC.put(MDCs.RESPONSE_DESCRIPTION, MDCs.ResponseStatusMDC.MDC_COMPLETED.toString());
686                 MDC.put(MDCs.RESPONSE_SEVERITY, MDCs.ResponseSeverityMDC.MDC_INFO.toString());
687                 
688 Here the targetEntry is the maven project module name for example in maven project elk-client the targetEntry name is
689 elk-client.
690
691 Here the targetEntry is end point url of the rest api method which we want to access.For example to fetch all the indices of 
692 elastic search we define end point url of the reat api as /all/indices in the ElkClientConstants.GET_ALL_INDICES and
693 define GET_ALL_INDICES whose value is /all/indices in the ElkClientConstants.java file. 
694
695 Here the user is the who login into the web application and accessing the particular maven project module.
696
697 3.Last File is the LoggingConstant.java
698 =======================================
699
700 All the variables used in the logging-library is kept here as a constant or utility reusable file.
701
702 ================================================
703 Testing Logging Library Developer Guide
704 ================================================
705 What is Logging Library Testing Rest API?
706 ================================================
707 1.Rest API Test.
708 =============================
709 We have created logging-rest-library project only for the developers to test the logging-library in local,logging-rest-library will not be deployed on the server.
710 logging-rest-library is meant only for the developers to test logging-library in their system locally who does not have the access for the dev environment, and need to understand the logging library.
711 In this project we are importing the logging-library jar so we will import all the functionality & various features of the logging-library project through the logging-library jar.
712 We have created some Rest API methods in the test project logging-rest-library in that we are implementing the different different
713 features of the logging-library project.
714
715 How to implement the Logging Library jar?
716 ========================================= 
717
718 To implement the Logging Library jar,there are some few specific given below guidelines which the developer should use while
719 implementing the logging-library jar.
720
721 1.In the starting of the implemented REST API method first use the line from the Logging Library jar as 
722  LogConfig.setEnteringMDCs(String targetEntry, String targetService, String user, String responseCode,String responseSeverity)
723
724 Where the targetEntry is your maven module name,targetService is the REST API url of the exposed method,user is who has login
725 into the system,responseCode is the ResponseStatusMDC and responseSeverity is the ResponseSeverityMDC,you can choose any values
726 out of the values given in the ResponseStatusMDC & ResponseSeverityMDC.
727
728 2.Then use the particular log levels like debug,error,info,fatal,warn etc whatever you want to implement in your logging statements.
729
730 3.Suppose you want to enrich the logs with some particular Marker then for this first initialize the MarkerFactory.getIMarkerFactory();
731 Then use the line as logger.error(MarkerFactory.getMarker(markerInputVal), "This is a serious an User Input Marker error requiring the admin's attention",new Exception("Just testing")); 
732 where markerInputVal is the particular marker which you want to use in your application.
733
734 4.In the end of the implemented REST API method use the line LogConfig.clearMDCDetails() to clear all the log MDC details.
735
736 Logback.xml
737 =============
738 We have defined various appenders while help in creating the log statements.With the help of these appenders we can print
739 the logs as per user requirement.
740
741 Steps to include logging-library.jar in your project.
742 ==================================================
743
744 Logging Library is provided in the form of as a jar,Suppose we want to add this logging-library.jar to a new project then given
745 below are the steps to in guide this jar and use in your project.
746
747 1.Add the given below entry in dependency section of the pom.xml of your new project.
748                 <dependency>
749                         <groupId>org.acumos.platform-oam</groupId>
750                         <artifactId>logging-library</artifactId>
751                         <version>4.0.2-SNAPSHOT</version>
752                 </dependency>
753                 
754 2.Publish the logging-library.jar into the maven repository.
755                 
756 3.Now Suppose you want to add logging related statements in your java files then just you need to write the logger.Debug_levels
757 as per your requirement, like debug,error,fatal,info,warn.
758
759 4.Whatever logging functionality you want in your logging statements as per your requirement,you can just import from the 
760 classes files of the jar.
761
762
763 You will import the appropriate,required  and use it your project as per the end user requirement.To see how you can use the
764 logging-library library ,you can refer to the above section Logging Library Developer Guide.
765
766
767
768
769
770
771