From 4cd92f9b121a576f28340c72de52a750e383c670 Mon Sep 17 00:00:00 2001 From: rimverma Date: Tue, 25 Apr 2023 11:51:14 +0530 Subject: [PATCH] MDCLOG Implementation with Dynamic log-level changes Change-Id: I1d78dfdb0c14c3d05b92d3b4bb72d9f51d40cd28 Signed-off-by: rimverma --- E2Manager/Dockerfile | 3 +- E2Manager/app/main.go | 121 +++++++-- E2Manager/clients/routing_manager_client_test.go | 3 +- E2Manager/controllers/nodeb_controller_test.go | 3 +- E2Manager/controllers/root_controller_test.go | 5 +- E2Manager/controllers/symptomdata_controller.go | 0 .../endc_setup_failure_response_converter_test.go | 3 +- .../endc_setup_response_converter_test.go | 3 +- .../x2_setup_failure_response_converter_test.go | 3 +- .../converters/x2_setup_response_converter_test.go | 3 +- E2Manager/converters/x2apPdu_asn1_unpacker.go | 10 +- E2Manager/converters/x2apPdu_asn1_unpacker_test.go | 6 +- E2Manager/e2pdus/configuration_update_test.go | 26 +- E2Manager/e2pdus/x2_reset_known_causes_test.go | 9 +- E2Manager/e2pdus/x2_reset_response_test.go | 8 +- E2Manager/go.mod | 9 +- E2Manager/go.sum | 10 +- .../delete_all_request_handler_test.go | 3 +- .../update_nodeb_request_handler_test.go | 3 +- .../e2_term_init_notification_handler_test.go | 3 +- .../ran_lost_connection_handler_test.go | 3 +- .../setup_response_notification_handler_test.go | 3 +- .../x2_reset_response_handler_test.go | 3 +- E2Manager/httpserver/http_server.go | 0 E2Manager/httpserver/http_server_test.go | 3 +- E2Manager/logger/logger.go | 170 ++---------- E2Manager/logger/logger_test.go | 293 --------------------- .../e2_reset_status_change_manager_test.go | 3 +- E2Manager/managers/e2t_instances_manager_test.go | 3 +- E2Manager/managers/e2t_keep_alive_worker_test.go | 5 +- .../notification_manager_test.go | 3 +- .../ran_connect_status_change_manager_test.go | 3 +- .../managers/ran_disconnection_manager_test.go | 3 +- E2Manager/managers/ran_list_manager.go | 0 E2Manager/managers/ran_list_manager_test.go | 3 +- E2Manager/managers/ran_setup_manager_test.go | 6 +- .../managers/ran_status_change_manager_test.go | 3 +- E2Manager/managers/update_enb_manager.go | 0 E2Manager/managers/update_enb_manager_test.go | 3 +- E2Manager/managers/update_gnb_manager_test.go | 3 +- E2Manager/mocks/e2t_symptomdata_mock.go | 0 E2Manager/models/e2_request_message_test.go | 5 +- .../incoming_request_handler_provider_test.go | 3 +- .../notification_handler_provider_test.go | 3 +- E2Manager/rmrCgo/rmrCgoApi_test.go | 3 +- E2Manager/rmrCgo/rmrCgoUtils.go | 4 +- E2Manager/services/ran_alarm_service_test.go | 4 +- .../services/rmrreceiver/rmr_receiver_test.go | 3 +- E2Manager/services/rmrsender/rmr_sender_test.go | 3 +- E2Manager/services/rnib_data_service_test.go | 3 +- E2Manager/tests/utils.go | 3 +- tools/xappmock/logger/logger.go | 172 +++--------- tools/xappmock/main/xappmock.go | 3 +- 53 files changed, 277 insertions(+), 679 deletions(-) mode change 100755 => 100644 E2Manager/Dockerfile mode change 100755 => 100644 E2Manager/app/main.go mode change 100755 => 100644 E2Manager/controllers/symptomdata_controller.go mode change 100755 => 100644 E2Manager/httpserver/http_server.go mode change 100755 => 100644 E2Manager/httpserver/http_server_test.go delete mode 100644 E2Manager/logger/logger_test.go mode change 100755 => 100644 E2Manager/managers/ran_list_manager.go mode change 100755 => 100644 E2Manager/managers/update_enb_manager.go mode change 100755 => 100644 E2Manager/mocks/e2t_symptomdata_mock.go diff --git a/E2Manager/Dockerfile b/E2Manager/Dockerfile old mode 100755 new mode 100644 index 4185d4a..d8810d4 --- a/E2Manager/Dockerfile +++ b/E2Manager/Dockerfile @@ -57,4 +57,5 @@ ENV LD_LIBRARY_PATH=/usr/local/lib \ ENV RMR_SEED_RT=router.txt ENV RMR_VCTL_FILE=/tmp/rmr.verbose EXPOSE 3800 -CMD ["sh", "-c", "./main -port=$port"] +CMD ["sh", "-c", "./main -port=$port -f /etc/config/log-level.yaml"] + diff --git a/E2Manager/app/main.go b/E2Manager/app/main.go old mode 100755 new mode 100644 index f8510ea..58d20b5 --- a/E2Manager/app/main.go +++ b/E2Manager/app/main.go @@ -34,15 +34,21 @@ import ( "e2mgr/services" "e2mgr/services/rmrreceiver" "e2mgr/services/rmrsender" - "fmt" + //"fmt" + "flag" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader" "gerrit.o-ran-sc.org/r/ric-plt/sdlgo" + "github.com/spf13/viper" + "github.com/fsnotify/fsnotify" "os" "strconv" ) const GeneralKeyDefaultValue = "{\"enableRic\":true}" +const DEFAULT_CONFIG_FILE = "../resources/configuration.yaml" +const DEFAULT_PORT = "8080" +var Log *logger.Logger func initKeys(logger *logger.Logger, sdl *sdlgo.SyncStorage) error { ok, err := sdl.SetIfNotExists(common.GetRNibNamespace(), common.BuildGeneralConfigurationKey(), GeneralKeyDefaultValue) @@ -61,53 +67,106 @@ func initKeys(logger *logger.Logger, sdl *sdlgo.SyncStorage) error { return nil } +/**Dynamic log-level changes **/ + +func loadConfig() { + viper.SetConfigFile(parseCmd()) + if err := viper.ReadInConfig(); err != nil { + Log.Errorf("Error reading config file, %s", err) + } + Log.Infof("Using config file: %s\n", viper.ConfigFileUsed()) + // Watch for config file changes and re-read data ... + watch() +} +func parseCmd() string { + var fileName *string + fileName = flag.String("f", DEFAULT_CONFIG_FILE, "Specify the configuration file.") + flag.String("port", DEFAULT_PORT, "Specify the port file.") + flag.Parse() + + return *fileName +} + +func watch() { + viper.WatchConfig() + viper.OnConfigChange(func(e fsnotify.Event) { + Log.Infof("config file changed %s", e.Name) + setLoglevel() + }) +} + +/*********MDC LOG CHNAGES ********/ +func setLoglevel() { + var loglevel int + if err := viper.UnmarshalKey("loglevel", &loglevel); err != nil { + Log.Errorf("Unmarshalling failed while reading %d", loglevel) + } + + switch loglevel { + case 1: + Log.Infof("LOGLEVEL is set to ERROR\n") + case 2: + Log.Infof("LOGLEVEL is set to WARNING\n") + case 3: + Log.Infof("LOGLEVEL is set to INFO\n") + case 4: + Log.Infof("LOGLEVEL is set to DEBUG\n") + } + Log.SetLevel(loglevel) +} + func main() { config := configuration.ParseConfiguration() - logLevel, _ := logger.LogLevelTokenToLevel(config.Logging.LogLevel) - logger, err := logger.InitLogger(logLevel) - if err != nil { + level := int8(4) + Log, _ = logger.InitLogger(level) + Log.SetFormat(0) + Log.SetMdc("e2mgr", "0.2.2") + /*if err != nil { fmt.Printf("#app.main - failed to initialize logger, error: %s", err) os.Exit(1) - } - logger.Infof("#app.main - Configuration %s", config) + }*/ + Log.Infof("#app.main - Configuration %s", config) + loadConfig() + + setLoglevel() sdl := sdlgo.NewSyncStorage() - err = initKeys(logger, sdl) + err := initKeys(Log, sdl) if err != nil { os.Exit(1) } defer sdl.Close() - rnibDataService := services.NewRnibDataService(logger, config, reader.GetNewRNibReader(sdl), rNibWriter.GetRNibWriter(sdl, config.RnibWriter)) + rnibDataService := services.NewRnibDataService(Log, config, reader.GetNewRNibReader(sdl), rNibWriter.GetRNibWriter(sdl, config.RnibWriter)) - ranListManager := managers.NewRanListManager(logger, rnibDataService) + ranListManager := managers.NewRanListManager(Log, rnibDataService) err = ranListManager.InitNbIdentityMap() if err != nil { - logger.Errorf("#app.main - quit") + Log.Errorf("#app.main - quit") os.Exit(1) } var msgImpl *rmrCgo.Context - rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, logger) - rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger) - e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger) - routingManagerClient := clients.NewRoutingManagerClient(logger, config, clients.NewHttpClient()) - ranAlarmService := services.NewRanAlarmService(logger, config) - ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService) - e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager) - e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranConnectStatusChangeManager) - e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(logger, rmrSender, e2tInstancesManager, e2tShutdownManager, config) + rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, Log) + rmrSender := rmrsender.NewRmrSender(Log, rmrMessenger) + e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, Log) + routingManagerClient := clients.NewRoutingManagerClient(Log, config, clients.NewHttpClient()) + ranAlarmService := services.NewRanAlarmService(Log, config) + ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(Log, rnibDataService, ranListManager, ranAlarmService) + e2tAssociationManager := managers.NewE2TAssociationManager(Log, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager) + e2tShutdownManager := managers.NewE2TShutdownManager(Log, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranConnectStatusChangeManager) + e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(Log, rmrSender, e2tInstancesManager, e2tShutdownManager, config) rmrNotificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider() - rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager) + rmrNotificationHandlerProvider.Init(Log, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager) - notificationManager := notificationmanager.NewNotificationManager(logger, rmrNotificationHandlerProvider) - rmrReceiver := rmrreceiver.NewRmrReceiver(logger, rmrMessenger, notificationManager) + notificationManager := notificationmanager.NewNotificationManager(Log, rmrNotificationHandlerProvider) + rmrReceiver := rmrreceiver.NewRmrReceiver(Log, rmrMessenger, notificationManager) nodebValidator := managers.NewNodebValidator() - updateEnbManager := managers.NewUpdateEnbManager(logger, rnibDataService, nodebValidator) - updateGnbManager := managers.NewUpdateGnbManager(logger, rnibDataService, nodebValidator) + updateEnbManager := managers.NewUpdateEnbManager(Log, rnibDataService, nodebValidator) + updateGnbManager := managers.NewUpdateGnbManager(Log, rnibDataService, nodebValidator) e2tInstancesManager.ResetKeepAliveTimestampsForAllE2TInstances() @@ -116,10 +175,14 @@ func main() { go rmrReceiver.ListenAndHandle() go e2tKeepAliveWorker.Execute() - httpMsgHandlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrSender, config, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, updateGnbManager, ranListManager) + httpMsgHandlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(Log, rmrSender, config, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, updateGnbManager, ranListManager) rootController := controllers.NewRootController(rnibDataService) - nodebController := controllers.NewNodebController(logger, httpMsgHandlerProvider) - e2tController := controllers.NewE2TController(logger, httpMsgHandlerProvider) - symptomController := controllers.NewSymptomdataController(logger, httpMsgHandlerProvider, rnibDataService, ranListManager) - _ = httpserver.Run(logger, config.Http.Port, rootController, nodebController, e2tController, symptomController) + nodebController := controllers.NewNodebController(Log, httpMsgHandlerProvider) + e2tController := controllers.NewE2TController(Log, httpMsgHandlerProvider) + symptomController := controllers.NewSymptomdataController(Log, httpMsgHandlerProvider, rnibDataService, ranListManager) + //fmt.Println("loadconfig called at last") + //loadConfig() + _ = httpserver.Run(Log, config.Http.Port, rootController, nodebController, e2tController, symptomController) + //fmt.Println("loadconfig called at last") + //loadConfig() } diff --git a/E2Manager/clients/routing_manager_client_test.go b/E2Manager/clients/routing_manager_client_test.go index 686733e..31a4c7f 100644 --- a/E2Manager/clients/routing_manager_client_test.go +++ b/E2Manager/clients/routing_manager_client_test.go @@ -248,7 +248,8 @@ func TestDissociateAllRans_RoutingManager_400(t *testing.T) { // TODO: extract to test_utils func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + level := int8(1) + log, err := logger.InitLogger(level) if err != nil { t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index cd22cc6..713fcde 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -1701,7 +1701,8 @@ func parseJsonRequest(t *testing.T, r io.Reader) models.ErrorResponse { } func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/controllers/root_controller_test.go b/E2Manager/controllers/root_controller_test.go index 42d0bdf..a22f5d6 100644 --- a/E2Manager/controllers/root_controller_test.go +++ b/E2Manager/controllers/root_controller_test.go @@ -36,7 +36,8 @@ import ( ) func setupNodebControllerTest(t *testing.T) (services.RNibDataService, *mocks.RnibReaderMock){ - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } @@ -91,4 +92,4 @@ func TestHandleHealthCheckRequestConnError(t *testing.T) { writer := httptest.NewRecorder() rc.HandleHealthCheckRequest(writer, nil) assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode) -} \ No newline at end of file +} diff --git a/E2Manager/controllers/symptomdata_controller.go b/E2Manager/controllers/symptomdata_controller.go old mode 100755 new mode 100644 diff --git a/E2Manager/converters/endc_setup_failure_response_converter_test.go b/E2Manager/converters/endc_setup_failure_response_converter_test.go index ac5aa52..2d9e991 100644 --- a/E2Manager/converters/endc_setup_failure_response_converter_test.go +++ b/E2Manager/converters/endc_setup_failure_response_converter_test.go @@ -35,7 +35,8 @@ Test permutations of x2 setup response to protobuf enb */ func TestUnpackEndcX2SetupFailureResponseAndExtract(t *testing.T) { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + logger, _ := logger.InitLogger(InfoLevel) var testCases = []struct { response string diff --git a/E2Manager/converters/endc_setup_response_converter_test.go b/E2Manager/converters/endc_setup_response_converter_test.go index d4b2848..1c57b00 100644 --- a/E2Manager/converters/endc_setup_response_converter_test.go +++ b/E2Manager/converters/endc_setup_response_converter_test.go @@ -35,7 +35,8 @@ Test permutations of x2 setup response to protobuf enb */ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(4) + logger, _ := logger.InitLogger(InfoLevel) var testCases = []struct { key *entities.GlobalNbId diff --git a/E2Manager/converters/x2_setup_failure_response_converter_test.go b/E2Manager/converters/x2_setup_failure_response_converter_test.go index 3f4cebd..2cdc940 100644 --- a/E2Manager/converters/x2_setup_failure_response_converter_test.go +++ b/E2Manager/converters/x2_setup_failure_response_converter_test.go @@ -35,7 +35,8 @@ Test permutations of x2 setup response to protobuf enb */ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + logger, _ := logger.InitLogger(InfoLevel) var testCases = []struct { response string diff --git a/E2Manager/converters/x2_setup_response_converter_test.go b/E2Manager/converters/x2_setup_response_converter_test.go index 739a412..81def40 100644 --- a/E2Manager/converters/x2_setup_response_converter_test.go +++ b/E2Manager/converters/x2_setup_response_converter_test.go @@ -35,7 +35,8 @@ Test permutations of x2 setup response to protobuf enb */ func TestUnpackX2SetupResponseAndExtract(t *testing.T) { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + logger, _ := logger.InitLogger(InfoLevel) var testCases = []struct { key *entities.GlobalNbId diff --git a/E2Manager/converters/x2apPdu_asn1_unpacker.go b/E2Manager/converters/x2apPdu_asn1_unpacker.go index 69e23aa..194711c 100644 --- a/E2Manager/converters/x2apPdu_asn1_unpacker.go +++ b/E2Manager/converters/x2apPdu_asn1_unpacker.go @@ -72,10 +72,10 @@ func UnpackX2apPdu(logger *logger.Logger, allocationBufferSize int, packedBuffer return nil, errors.New(fmt.Sprintf("unpacking error: %s", C.GoString(&errBuf[0]))) } - if logger.DebugEnabled() { + //if logger.DebugEnabled() { C.asn1_pdu_printer(pdu, C.size_t(len(errBuf)), &errBuf[0]) - logger.Debugf("#x2apPdu_asn1_unpacker.UnpackX2apPdu - PDU: %v packed size:%d", C.GoString(&errBuf[0]), packedBufferSize) - } + //logger.Debugf("#x2apPdu_asn1_unpacker.UnpackX2apPdu - PDU: %v packed size:%d", C.GoString(&errBuf[0]), packedBufferSize) + //} return pdu, nil } @@ -89,11 +89,11 @@ func UnpackX2apPduAndRefine(logger *logger.Logger, allocationBufferSize int, pac defer C.delete_pdu(pdu) var refinedResponse = "" - if logger.DebugEnabled() { + //if logger.DebugEnabled() { buf := make([]C.char, 16*maxMessageBufferSize) C.asn1_pdu_printer(pdu, C.size_t(len(buf)), &buf[0]) refinedResponse = C.GoString(&buf[0]) - } + //} return &X2PduRefinedResponse{PduPrint: refinedResponse}, nil } diff --git a/E2Manager/converters/x2apPdu_asn1_unpacker_test.go b/E2Manager/converters/x2apPdu_asn1_unpacker_test.go index c0119a4..6306022 100644 --- a/E2Manager/converters/x2apPdu_asn1_unpacker_test.go +++ b/E2Manager/converters/x2apPdu_asn1_unpacker_test.go @@ -35,7 +35,8 @@ import ( */ func TestUnpackX2apSetupResponse(t *testing.T) { - logger, _ := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, _ := logger.InitLogger(DebugLevel) wantPduAsStr := `SuccessfulOutcome ::= { procedureCode: 6 @@ -108,7 +109,8 @@ func TestUnpackX2apSetupResponse(t *testing.T) { /*unpacking error*/ func TestUnpackX2apSetupResponseUnpackError(t *testing.T) { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + logger, _ := logger.InitLogger(InfoLevel) wantError := "unpacking error: #src/asn1codec_utils.c.unpack_pdu_aux - Failed to decode E2AP-PDU (consumed 0), error = 0 Success" //--------------------2006002a diff --git a/E2Manager/e2pdus/configuration_update_test.go b/E2Manager/e2pdus/configuration_update_test.go index a4b40e4..86e27a5 100644 --- a/E2Manager/e2pdus/configuration_update_test.go +++ b/E2Manager/e2pdus/configuration_update_test.go @@ -31,7 +31,8 @@ import ( ) func TestPrepareEndcConfigurationUpdateFailurePDU(t *testing.T) { - _,err := logger.InitLogger(logger.InfoLevel) + InfoLevel:= int8(3) + _,err := logger.InitLogger(InfoLevel) if err!=nil{ t.Errorf("failed to initialize logger, error: %s", err) } @@ -49,7 +50,8 @@ func TestPrepareEndcConfigurationUpdateFailurePDU(t *testing.T) { } func TestPrepareEndcConfigurationUpdateFailurePDUFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel:= int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -66,7 +68,8 @@ func TestPrepareEndcConfigurationUpdateFailurePDUFailure(t *testing.T) { } func TestPrepareX2EnbConfigurationUpdateFailurePDU(t *testing.T) { - _,err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _,err := logger.InitLogger(InfoLevel) if err!=nil{ t.Errorf("failed to initialize logger, error: %s", err) } @@ -84,7 +87,8 @@ func TestPrepareX2EnbConfigurationUpdateFailurePDU(t *testing.T) { } func TestPrepareX2EnbConfigurationUpdateFailurePDUFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel:= int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -101,7 +105,8 @@ func TestPrepareX2EnbConfigurationUpdateFailurePDUFailure(t *testing.T) { } func TestPrepareEndcConfigurationUpdateAckPDU(t *testing.T) { - _,err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _,err := logger.InitLogger(InfoLevel) if err!=nil{ t.Errorf("failed to initialize logger, error: %s", err) } @@ -119,7 +124,8 @@ func TestPrepareEndcConfigurationUpdateAckPDU(t *testing.T) { } func TestPrepareEndcConfigurationUpdateAckPDUFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -136,7 +142,8 @@ func TestPrepareEndcConfigurationUpdateAckPDUFailure(t *testing.T) { } func TestPrepareX2EnbConfigurationUpdateAckPDU(t *testing.T) { - _,err := logger.InitLogger(logger.InfoLevel) + InfoLevel:= int8(3) + _,err := logger.InitLogger(InfoLevel) if err!=nil{ t.Errorf("failed to initialize logger, error: %s", err) } @@ -154,7 +161,8 @@ func TestPrepareX2EnbConfigurationUpdateAckPDU(t *testing.T) { } func TestPrepareX2EnbConfigurationUpdateAckPDUFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel:= int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -168,4 +176,4 @@ func TestPrepareX2EnbConfigurationUpdateAckPDUFailure(t *testing.T) { if !strings.Contains(err.Error(), expected) { t.Errorf("want :[%s], got: [%s]\n", expected, err) } -} \ No newline at end of file +} diff --git a/E2Manager/e2pdus/x2_reset_known_causes_test.go b/E2Manager/e2pdus/x2_reset_known_causes_test.go index 2988f40..8c3140d 100644 --- a/E2Manager/e2pdus/x2_reset_known_causes_test.go +++ b/E2Manager/e2pdus/x2_reset_known_causes_test.go @@ -29,7 +29,8 @@ import ( ) func TestKnownCausesToX2ResetPDU(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -77,7 +78,8 @@ func TestKnownCausesToX2ResetPDU(t *testing.T) { } func TestKnownCausesToX2ResetPDUFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -89,7 +91,8 @@ func TestKnownCausesToX2ResetPDUFailure(t *testing.T) { } func TestPrepareX2ResetPDUsFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } diff --git a/E2Manager/e2pdus/x2_reset_response_test.go b/E2Manager/e2pdus/x2_reset_response_test.go index e91c7b1..b347dd9 100644 --- a/E2Manager/e2pdus/x2_reset_response_test.go +++ b/E2Manager/e2pdus/x2_reset_response_test.go @@ -29,7 +29,8 @@ import ( ) func TestPrepareX2ResetResponsePDU(t *testing.T) { - _,err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + _,err := logger.InitLogger(InfoLevel) if err!=nil{ t.Errorf("failed to initialize logger, error: %s", err) } @@ -47,7 +48,8 @@ func TestPrepareX2ResetResponsePDU(t *testing.T) { } func TestPrepareX2ResetResponsePDUFailure(t *testing.T) { - _, err := logger.InitLogger(logger.InfoLevel) + InfoLevel:= int8(3) + _, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("failed to initialize logger, error: %s", err) } @@ -61,4 +63,4 @@ func TestPrepareX2ResetResponsePDUFailure(t *testing.T) { if !strings.Contains(err.Error(), expected) { t.Errorf("want :[%s], got: [%s]\n", expected, err) } -} \ No newline at end of file +} diff --git a/E2Manager/go.mod b/E2Manager/go.mod index 6ca798b..6294658 100644 --- a/E2Manager/go.mod +++ b/E2Manager/go.mod @@ -1,23 +1,23 @@ module e2mgr require ( + gerrit.o-ran-sc.org/r/com/golog v0.0.2 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.2.1 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.2.8 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.2.1 gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.8.0 + github.com/fsnotify/fsnotify v1.4.9 github.com/golang/protobuf v1.4.2 github.com/gorilla/mux v1.7.0 github.com/magiconair/properties v1.8.1 github.com/pkg/errors v0.8.1 github.com/spf13/viper v1.4.0 github.com/stretchr/testify v1.5.1 - go.uber.org/zap v1.11.0 gopkg.in/yaml.v2 v2.3.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-redis/redis v6.15.9+incompatible // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/kr/pretty v0.2.0 // indirect @@ -29,14 +29,15 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/objx v0.2.0 // indirect - go.uber.org/atomic v1.4.0 // indirect - go.uber.org/multierr v1.2.0 // indirect golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 // indirect golang.org/x/text v0.3.2 // indirect google.golang.org/protobuf v1.23.0 // indirect gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect + k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect ) replace gerrit.o-ran-sc.org/r/ric-plt/sdlgo => gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.8.0 +replace gerrit.o-ran-sc.org/r/com/golog => gerrit.o-ran-sc.org/r/com/golog.git v0.0.2 + go 1.18 diff --git a/E2Manager/go.sum b/E2Manager/go.sum index bcb66fa..dfb0c4d 100644 --- a/E2Manager/go.sum +++ b/E2Manager/go.sum @@ -1,4 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +gerrit.o-ran-sc.org/r/com/golog.git v0.0.2 h1:Ix6SgFuzd6yW6Ur6+qDlGhDO65UYs8PiIkeAL1VaQ2o= +gerrit.o-ran-sc.org/r/com/golog.git v0.0.2/go.mod h1:A7hUL52YQSO4dFIZNcj76XQ09C9PftAe3LyL7kqBnok= gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.2.1 h1:3FFbXx55BODThXfyWAiz6cPXVELXFICDQUmJi13EoxM= gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.2.1/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes= gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.2.1/go.mod h1:YaQ+XEI4PcAoISxp9wUpUr2TP0J7JihpQTD0G1Lpd4A= @@ -139,6 +141,7 @@ github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -146,14 +149,9 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.2.0 h1:6I+W7f5VwC5SV9dNrZ3qXrDB9mD0dyGOi/ZJmYw03T4= -go.uber.org/multierr v1.2.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.11.0 h1:gSmpCfs+R47a4yQPAI4xJ0IPDLTRGXskm6UelqNXpqE= -go.uber.org/zap v1.11.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -220,3 +218,5 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= diff --git a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go index 4451788..9b949b6 100644 --- a/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go +++ b/E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go @@ -686,7 +686,8 @@ func TestSuccessTwoE2TInstancesSixRans(t *testing.T) { } func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + log, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#initLog test - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/handlers/httpmsghandlers/update_nodeb_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/update_nodeb_request_handler_test.go index 26bf3a6..7be5263 100644 --- a/E2Manager/handlers/httpmsghandlers/update_nodeb_request_handler_test.go +++ b/E2Manager/handlers/httpmsghandlers/update_nodeb_request_handler_test.go @@ -13,7 +13,8 @@ import ( ) func setupUpdateNodebRequestHandlerTest(t *testing.T) ( *UpdateNodebRequestHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock){ - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go index b1b68ee..e2ce5d2 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go @@ -635,7 +635,8 @@ func initRmrSender(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) // TODO: extract to test_utils func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler_test.go b/E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler_test.go index d612932..52ea11d 100644 --- a/E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler_test.go @@ -42,7 +42,8 @@ const ( ) func setupLostConnectionHandlerTest(isSuccessfulHttpPost bool) (*RanLostConnectionHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock) { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + logger, _ := logger.InitLogger(InfoLevel) config := &configuration.Configuration{ RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, diff --git a/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go index b401cbb..b8918b4 100644 --- a/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go @@ -79,7 +79,8 @@ type setupResponseTestContext struct { } func NewSetupResponseTestContext(manager managers.ISetupResponseManager) *setupResponseTestContext { - logger, _ := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + logger, _ := logger.InitLogger(InfoLevel) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3} readerMock := &mocks.RnibReaderMock{} writerMock := &mocks.RnibWriterMock{} diff --git a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go index 7a99903..fcc15dd 100644 --- a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go @@ -44,7 +44,8 @@ const ( ) func initX2ResetResponseHandlerTest(t *testing.T) (X2ResetResponseHandler, *mocks.RnibReaderMock, *mocks.RmrMessengerMock) { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3} if err != nil { t.Errorf("#initX2ResetResponseHandlerTest - failed to initialize logger, error: %s", err) diff --git a/E2Manager/httpserver/http_server.go b/E2Manager/httpserver/http_server.go old mode 100755 new mode 100644 diff --git a/E2Manager/httpserver/http_server_test.go b/E2Manager/httpserver/http_server_test.go old mode 100755 new mode 100644 index bbbdb14..7103ff8 --- a/E2Manager/httpserver/http_server_test.go +++ b/E2Manager/httpserver/http_server_test.go @@ -226,7 +226,8 @@ func TestRouteDeleteEnb(t *testing.T) { } func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#initLog test - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/logger/logger.go b/E2Manager/logger/logger.go index 0cdfd2f..fabf80c 100644 --- a/E2Manager/logger/logger.go +++ b/E2Manager/logger/logger.go @@ -21,167 +21,55 @@ package logger import ( - "fmt" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "strings" + mdclog "gerrit.o-ran-sc.org/r/com/golog" "time" ) type Logger struct { - Logger *zap.Logger + logger *mdclog.MdcLogger } -// Copied from zap logger -// -// A Level is a logging priority. Higher levels are more important. -type LogLevel int8 - -const ( - // DebugLevel logs are typically voluminous, and are usually disabled in - // production. - DebugLevel LogLevel = iota - 1 - // InfoLevel is the default logging priority. - InfoLevel - // WarnLevel logs are more important than Info, but don't need individual - // human review. - WarnLevel - // ErrorLevel logs are high-priority. If an application is running smoothly, - // it shouldn't generate any error-level logs. - ErrorLevel - // DPanicLevel logs are particularly important errors. In development the - // logger panics after writing the message. - DPanicLevel - // PanicLevel logs a message, then panics. - PanicLevel - // FatalLevel logs a message, then calls os.Exit(1). - FatalLevel - - _minLevel = DebugLevel - _maxLevel = FatalLevel -) - -var logLevelTokenToLevel = map[string] LogLevel { - "debug" : DebugLevel, - "info": InfoLevel, - "warn": WarnLevel, - "error": ErrorLevel, - "dpanic": DPanicLevel, - "panic": PanicLevel, - "fatal": FatalLevel, -} - -func LogLevelTokenToLevel(level string) (LogLevel, bool) { - if level, ok := logLevelTokenToLevel[strings.TrimSpace(strings.ToLower(level))];ok { - return level, true - } - return _maxLevel+1, false -} - -func InitLogger(requested LogLevel) (*Logger, error) { - var logger *zap.Logger - var err error - switch requested { - case DebugLevel: - logger, err = initLoggerByLevel(zapcore.DebugLevel) - case InfoLevel: - logger, err = initLoggerByLevel(zapcore.InfoLevel) - case WarnLevel: - logger, err = initLoggerByLevel(zapcore.WarnLevel) - case ErrorLevel: - logger, err = initLoggerByLevel(zapcore.ErrorLevel) - case DPanicLevel: - logger, err = initLoggerByLevel(zapcore.DPanicLevel) - case PanicLevel: - logger, err = initLoggerByLevel(zapcore.PanicLevel) - case FatalLevel: - logger, err = initLoggerByLevel(zapcore.FatalLevel) - default: - err = fmt.Errorf("Invalid logging Level :%d",requested) - } - if err != nil { - return nil, err - } - return &Logger{Logger:logger}, nil - -} -func(l *Logger)Sync() error { - l.Debugf("#logger.Sync - Going to flush buffered log") - return l.Logger.Sync() +func InitLogger(loglevel int8 ) (*Logger, error) { + name := "e2mgr" + log ,err:= NewLogger(name) + return log,err } -func (l *Logger)Infof(formatMsg string, a ...interface{}) { - if l.InfoEnabled() { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Info(msg, zap.Any("mdc", l.getTimeStampMdc())) - } +func NewLogger(name string) (*Logger, error) { + l,err:= mdclog.InitLogger(name) + return &Logger{ + logger: l, + },err } -func (l *Logger)Debugf(formatMsg string, a ...interface{}) { - if l.DebugEnabled(){ - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Debug(msg, zap.Any("mdc", l.getTimeStampMdc())) - } +func (l *Logger) SetFormat(logMonitor int) { + l.logger.Mdclog_format_initialize(logMonitor) } -func (l *Logger)Errorf(formatMsg string, a ...interface{}) { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Error(msg, zap.Any("mdc", l.getTimeStampMdc())) +func (l *Logger) SetLevel(level int) { + l.logger.LevelSet(mdclog.Level(level)) } -func (l *Logger)Warnf(formatMsg string, a ...interface{}) { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Warn(msg, zap.Any("mdc", l.getTimeStampMdc())) +func (l *Logger) SetMdc(key string, value string) { + l.logger.MdcAdd(key, value) } -func (l *Logger) getTimeStampMdc() map[string]string { - timeStr := time.Now().Format("2006-01-02 15:04:05.000") - mdc := map[string]string{"time": timeStr} - return mdc +func (l *Logger) Errorf(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Error(pattern, args...) } -func (l *Logger)InfoEnabled()bool{ - return l.Logger.Core().Enabled(zap.InfoLevel) +func (l *Logger) Warnf(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Warning(pattern, args...) } -func (l *Logger)DebugEnabled()bool{ - return l.Logger.Core().Enabled(zap.DebugLevel) +func (l *Logger) Infof(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Info(pattern, args...) } -func (l *Logger)DPanicf(formatMsg string, a ...interface{}) { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.DPanic(msg, zap.Any("mdc", l.getTimeStampMdc())) +func (l *Logger) Debugf(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Debug(pattern, args...) } - -func initLoggerByLevel(l zapcore.Level) (*zap.Logger, error) { - cfg := zap.Config{ - Encoding: "json", - Level: zap.NewAtomicLevelAt(l), - OutputPaths: []string{"stdout"}, - ErrorOutputPaths: []string{"stderr"}, - EncoderConfig: zapcore.EncoderConfig{ - MessageKey: "msg", - - LevelKey: "crit", - EncodeLevel: zapcore.CapitalLevelEncoder, - - TimeKey: "ts", - EncodeTime: epochMillisIntegerTimeEncoder, - - CallerKey: "id", - EncodeCaller: e2ManagerCallerEncoder, - }, - } - return cfg.Build() -} - -func e2ManagerCallerEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString("E2Manager") -} - -func epochMillisIntegerTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { - nanos := t.UnixNano() - millis := int64(nanos) / int64(time.Millisecond) - enc.AppendInt64(millis) -} - diff --git a/E2Manager/logger/logger_test.go b/E2Manager/logger/logger_test.go deleted file mode 100644 index d1d00d2..0000000 --- a/E2Manager/logger/logger_test.go +++ /dev/null @@ -1,293 +0,0 @@ -// -// Copyright 2019 AT&T Intellectual Property -// Copyright 2019 Nokia -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// This source code is part of the near-RT RIC (RAN Intelligent Controller) -// platform project (RICP). - - -package logger - -import ( - "bytes" - "github.com/stretchr/testify/assert" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "io" - "os" - "testing" -) - -func TestInitDebugLoggerSuccess(t *testing.T) { - log, err := InitLogger(DebugLevel) - assert.Nil(t, err) - assert.NotNil(t, log) - assert.True(t, log.Logger.Core().Enabled(zap.DebugLevel)) -} - -func TestInitInfoLoggerSuccess(t *testing.T) { - log, err := InitLogger(InfoLevel) - assert.Nil(t, err) - assert.NotNil(t, log) - assert.True(t, log.Logger.Core().Enabled(zap.InfoLevel)) -} - -func TestInitWarnLoggerSuccess(t *testing.T) { - log, err := InitLogger(WarnLevel) - assert.Nil(t, err) - assert.NotNil(t, log) - assert.True(t, log.Logger.Core().Enabled(zap.WarnLevel)) -} - -func TestInitErrorLoggerSuccess(t *testing.T) { - log, err := InitLogger(ErrorLevel) - assert.Nil(t, err) - assert.NotNil(t, log) - assert.True(t, log.Logger.Core().Enabled(zap.ErrorLevel)) -} - -func TestInitDPanicLoggerSuccess(t *testing.T) { - log, err := InitLogger(DPanicLevel) - assert.Nil(t, err) - assert.NotNil(t, log) - assert.True(t, log.Logger.Core().Enabled(zap.DPanicLevel)) -} - -func TestInitPanicLoggerSuccess(t *testing.T) { - log, err := InitLogger(PanicLevel) - assert.Nil(t, err) - assert.NotNil(t, log) - assert.True(t, log.Logger.Core().Enabled(zap.PanicLevel)) -} - -func TestInitInfoLoggerFailure(t *testing.T) { - log, err := InitLogger(99) - assert.NotNil(t, err) - assert.Nil(t, log) -} - -func TestSyncSuccess(t *testing.T){ - logFile, err := os.Create("./loggerTest.txt") - if err != nil{ - t.Errorf("logger_test.TestSyncSuccess - failed to create file, error: %s", err) - } - old := os.Stdout - os.Stdout = logFile - log, err := InitLogger(DebugLevel) - if err != nil { - t.Errorf("logger_test.TestSyncSuccess - failed to initialize logger, error: %s", err) - } - err = log.Sync() - assert.Nil(t, err) - - os.Stdout = old - logFile, err = os.Open("./loggerTest.txt") - if err != nil{ - t.Errorf("logger_test.TestSyncSuccess - failed to open file, error: %s", err) - } - var buf bytes.Buffer - _, err = io.Copy(&buf, logFile) - if err != nil { - t.Errorf("logger_test.TestSyncSuccess - failed to copy bytes, error: %s", err) - } - debugRecord,_ :=buf.ReadString('\n') - errorRecord,_ :=buf.ReadString('\n') - - assert.NotEmpty(t, debugRecord) - assert.Empty(t, errorRecord) - err = os.Remove("./loggerTest.txt") - if err != nil { - t.Errorf("logger_test.TestSyncSuccess - failed to remove file, error: %s", err) - } - -} - -func TestSyncFailure(t *testing.T){ - log, err := InitLogger(DebugLevel) - err = log.Sync() - assert.NotNil(t, err) -} - -func TestDebugEnabledFalse(t *testing.T){ - entryNum, log := countRecords(InfoLevel, t) - assert.False(t, log.DebugEnabled()) - assert.Equal(t,3, entryNum) -} - -func TestDebugEnabledTrue(t *testing.T){ - entryNum, log := countRecords(DebugLevel, t) - assert.True(t, log.DebugEnabled()) - assert.Equal(t,4, entryNum) -} - -func TestDPanicfDebugLevel(t *testing.T){ - assert.True(t,validateRecordExists(DebugLevel, zap.DPanicLevel, t)) -} - -func TestDPanicfInfoLevel(t *testing.T){ - assert.True(t,validateRecordExists(InfoLevel, zap.DPanicLevel, t)) -} - -func TestErrorfDebugLevel(t *testing.T) { - assert.True(t,validateRecordExists(DebugLevel, zap.ErrorLevel, t)) -} - -func TestErrorfInfoLevel(t *testing.T) { - assert.True(t,validateRecordExists(InfoLevel, zap.ErrorLevel, t)) -} - -func TestInfofDebugLevel(t *testing.T) { - assert.True(t,validateRecordExists(DebugLevel, zap.InfoLevel, t)) -} - -func TestInfofInfoLevel(t *testing.T) { - assert.True(t,validateRecordExists(InfoLevel, zap.InfoLevel, t)) -} - -func TestDebugfDebugLevel(t *testing.T) { - assert.True(t,validateRecordExists(DebugLevel, zap.DebugLevel, t)) -} - -func TestDebugfInfoLevel(t *testing.T) { - assert.False(t,validateRecordExists(InfoLevel, zap.DebugLevel, t)) -} - -func TestInfofFatalLevel(t *testing.T) { - assert.False(t,validateRecordExists(FatalLevel, zap.InfoLevel, t)) -} - -func TestDebugfFatalLevel(t *testing.T) { - assert.False(t,validateRecordExists(FatalLevel, zap.DebugLevel, t)) -} - -func TestWarnfWarnLevel(t *testing.T) { - assert.True(t,validateRecordExists(WarnLevel, zap.WarnLevel, t)) -} - -func TestWarnfDebugLevel(t *testing.T) { - assert.True(t,validateRecordExists(DebugLevel, zap.WarnLevel, t)) -} - -func TestWarnfInfoLevel(t *testing.T) { - assert.True(t,validateRecordExists(InfoLevel, zap.WarnLevel, t)) -} - -func TestWarnfFatalLevel(t *testing.T) { - assert.False(t,validateRecordExists(FatalLevel, zap.WarnLevel, t)) -} - -func TestLogLevelTokenToLevel(t *testing.T) { - level, ok := LogLevelTokenToLevel("deBug") - assert.True(t, ok) - assert.True(t, level == DebugLevel) - - level, ok = LogLevelTokenToLevel("infO") - assert.True(t, ok) - assert.True(t, level == InfoLevel) - - level, ok = LogLevelTokenToLevel("Warn") - assert.True(t, ok) - assert.True(t, level == WarnLevel) - - level, ok = LogLevelTokenToLevel("eRror") - assert.True(t, ok) - assert.True(t, level == ErrorLevel) - - level, ok = LogLevelTokenToLevel("Dpanic ") - assert.True(t, ok) - assert.True(t, level == DPanicLevel) - - level, ok = LogLevelTokenToLevel(" panic ") - assert.True(t, ok) - assert.True(t, level == PanicLevel) - - level, ok = LogLevelTokenToLevel("fatal") - assert.True(t, ok) - assert.True(t, level == FatalLevel) - - level, ok = LogLevelTokenToLevel("zzz") - assert.False(t, ok) - assert.True(t, level > FatalLevel) - -} -func countRecords(logLevel LogLevel, t *testing.T) (int, *Logger){ - old := os.Stdout - r, w, _ :=os.Pipe() - os.Stdout = w - log, err := InitLogger(logLevel) - if err != nil { - t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err) - } - log.Infof("%v, %v, %v", 1, "abc", 0.1) - log.Debugf("%v, %v, %v", 1, "abc", 0.1) - log.Errorf("%v, %v, %v", 1, "abc", 0.1) - log.DPanicf("%v, %v, %v", 1, "abc", 0.1) - err = w.Close() - if err != nil { - t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err) - } - os.Stdout = old - var buf bytes.Buffer - _, err = io.Copy(&buf, r) - if err != nil { - t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err) - } - entryNum := 0 - s,_:= buf.ReadString('\n') - for len(s) > 0{ - entryNum +=1 - s,_= buf.ReadString('\n') - } - return entryNum, log -} - -func validateRecordExists(logLevel LogLevel, recordLevel zapcore.Level, t *testing.T) bool { - old := os.Stdout - r, w, _ :=os.Pipe() - os.Stdout = w - log, err := InitLogger(logLevel) - if err != nil { - t.Errorf("logger_test.TestSyncFailure - failed to initialize logger, error: %s", err) - } - switch recordLevel{ - case zap.DebugLevel: - log.Debugf("%v, %v, %v", 1, "abc", 0.1) - case zap.InfoLevel: - log.Infof("%v, %v, %v", 1, "abc", 0.1) - case zap.WarnLevel: - log.Warnf("%v, %v, %v", 1, "abc", 0.1) - case zap.ErrorLevel: - log.Errorf("%v, %v, %v", 1, "abc", 0.1) - case zap.DPanicLevel: - log.DPanicf("%v, %v, %v", 1, "abc", 0.1) - } - err = w.Close() - if err != nil { - t.Errorf("logger_test.TestSyncFailure - failed to close writer, error: %s", err) - } - os.Stdout = old - var buf bytes.Buffer - _, err = io.Copy(&buf, r) - if err != nil { - t.Errorf("logger_test.TestSyncFailure - failed to copy bytes, error: %s", err) - } - entryNum := 0 - s,_:= buf.ReadString('\n') - for len(s) > 0{ - entryNum +=1 - s,_= buf.ReadString('\n') - } - return entryNum == 1 -} \ No newline at end of file diff --git a/E2Manager/managers/e2_reset_status_change_manager_test.go b/E2Manager/managers/e2_reset_status_change_manager_test.go index 7b2a1ce..d09fdea 100644 --- a/E2Manager/managers/e2_reset_status_change_manager_test.go +++ b/E2Manager/managers/e2_reset_status_change_manager_test.go @@ -31,7 +31,8 @@ import ( ) func initE2ResetStatusChangeTest(t *testing.T) (*logger.Logger, *mocks.RmrMessengerMock, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *RanResetManager) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/e2t_instances_manager_test.go b/E2Manager/managers/e2t_instances_manager_test.go index 863bfe1..380ac05 100644 --- a/E2Manager/managers/e2t_instances_manager_test.go +++ b/E2Manager/managers/e2t_instances_manager_test.go @@ -39,7 +39,8 @@ const E2TAddress2 = "10.10.2.16:9800" const PodName = "som_ pod_name" func initE2TInstancesManagerTest(t *testing.T) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *E2TInstancesManager) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/e2t_keep_alive_worker_test.go b/E2Manager/managers/e2t_keep_alive_worker_test.go index c15aedb..bd77572 100644 --- a/E2Manager/managers/e2t_keep_alive_worker_test.go +++ b/E2Manager/managers/e2t_keep_alive_worker_test.go @@ -36,7 +36,8 @@ import ( ) func initE2TKeepAliveTest(t *testing.T) (*mocks.RmrMessengerMock, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.E2TShutdownManagerMock, *E2TKeepAliveWorker) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } @@ -202,4 +203,4 @@ func TestExecute_Two_E2TExpired(t *testing.T) { rmrMessengerMock.AssertCalled(t, "SendMsg", req, false) e2tShutdownManagerMock.AssertCalled(t, "Shutdown", e2tInstance1) -} \ No newline at end of file +} diff --git a/E2Manager/managers/notificationmanager/notification_manager_test.go b/E2Manager/managers/notificationmanager/notification_manager_test.go index 9b9ffe5..4ca6ce9 100644 --- a/E2Manager/managers/notificationmanager/notification_manager_test.go +++ b/E2Manager/managers/notificationmanager/notification_manager_test.go @@ -86,7 +86,8 @@ func initRmrSender(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) // TODO: extract to test_utils func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/ran_connect_status_change_manager_test.go b/E2Manager/managers/ran_connect_status_change_manager_test.go index 0c1cb0a..38b6746 100644 --- a/E2Manager/managers/ran_connect_status_change_manager_test.go +++ b/E2Manager/managers/ran_connect_status_change_manager_test.go @@ -36,7 +36,8 @@ import ( const EventChannelForTest = "RAN_CONNECTION_STATUS_CHANGE" func initRanConnectStatusChangeManagerTest(t *testing.T) (*mocks.RnibWriterMock, *mocks.RanListManagerMock, *mocks.RanAlarmServiceMock, *RanConnectStatusChangeManager) { - log, err := logger.InitLogger(logger.DebugLevel) + Debug := int8(4) + log, err := logger.InitLogger(Debug) if err != nil { t.Errorf("#... - failed to initialize log, error: %s", err) } diff --git a/E2Manager/managers/ran_disconnection_manager_test.go b/E2Manager/managers/ran_disconnection_manager_test.go index 0710849..9c87879 100644 --- a/E2Manager/managers/ran_disconnection_manager_test.go +++ b/E2Manager/managers/ran_disconnection_manager_test.go @@ -41,7 +41,8 @@ const ranName = "test" const e2tAddress = "10.10.2.15:9800" func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessengerMock, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *RanDisconnectionManager, *mocks.HttpClientMock) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/ran_list_manager.go b/E2Manager/managers/ran_list_manager.go old mode 100755 new mode 100644 diff --git a/E2Manager/managers/ran_list_manager_test.go b/E2Manager/managers/ran_list_manager_test.go index a729f06..0ce1f52 100644 --- a/E2Manager/managers/ran_list_manager_test.go +++ b/E2Manager/managers/ran_list_manager_test.go @@ -32,7 +32,8 @@ import ( ) func initRanListManagerTest(t *testing.T) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, RanListManager) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Fatalf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/ran_setup_manager_test.go b/E2Manager/managers/ran_setup_manager_test.go index c2dbb35..a4cefef 100644 --- a/E2Manager/managers/ran_setup_manager_test.go +++ b/E2Manager/managers/ran_setup_manager_test.go @@ -38,7 +38,8 @@ import ( ) func initRanSetupManagerTest(t *testing.T) (*mocks.RmrMessengerMock, *mocks.RnibWriterMock, *RanSetupManager) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } @@ -211,7 +212,8 @@ func TestExecuteSetupUnsupportedProtocol(t *testing.T) { } func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#initLog test - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/ran_status_change_manager_test.go b/E2Manager/managers/ran_status_change_manager_test.go index a0f497b..697a492 100644 --- a/E2Manager/managers/ran_status_change_manager_test.go +++ b/E2Manager/managers/ran_status_change_manager_test.go @@ -32,7 +32,8 @@ import ( ) func initRanStatusChangeManagerTest(t *testing.T) (*logger.Logger, *mocks.RmrMessengerMock, *rmrsender.RmrSender) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Fatalf("#initStatusChangeManagerTest - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/update_enb_manager.go b/E2Manager/managers/update_enb_manager.go old mode 100755 new mode 100644 diff --git a/E2Manager/managers/update_enb_manager_test.go b/E2Manager/managers/update_enb_manager_test.go index 1932cb3..268cb1d 100644 --- a/E2Manager/managers/update_enb_manager_test.go +++ b/E2Manager/managers/update_enb_manager_test.go @@ -11,7 +11,8 @@ import ( "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" ) func initUpdateEnbManagerTest(t *testing.T) (*UpdateEnbManager, *logger.Logger, services.RNibDataService, *NodebValidator) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/managers/update_gnb_manager_test.go b/E2Manager/managers/update_gnb_manager_test.go index 56c02d4..2290db0 100644 --- a/E2Manager/managers/update_gnb_manager_test.go +++ b/E2Manager/managers/update_gnb_manager_test.go @@ -11,7 +11,8 @@ import ( "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" ) func initUpdateGnbManagerTest(t *testing.T) (*UpdateGnbManager, *logger.Logger, services.RNibDataService, *NodebValidator) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/mocks/e2t_symptomdata_mock.go b/E2Manager/mocks/e2t_symptomdata_mock.go old mode 100755 new mode 100644 diff --git a/E2Manager/models/e2_request_message_test.go b/E2Manager/models/e2_request_message_test.go index e7ca8c7..77cabdc 100644 --- a/E2Manager/models/e2_request_message_test.go +++ b/E2Manager/models/e2_request_message_test.go @@ -41,7 +41,8 @@ func TestNewE2RequestMessage(t *testing.T){ } func TestGetMessageAsBytes(t *testing.T){ - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#nodeb_controller_test.TestHandleRequestSuccess - failed to initialize logger, error: %s", err) } @@ -49,4 +50,4 @@ func TestGetMessageAsBytes(t *testing.T){ e2 := models.NewE2RequestMessage(transactionId, tests.RanIp, uint16(tests.Port), tests.RanName, tests.DummyPayload) bytes := e2.GetMessageAsBytes(log) assert.Equal(t, expectedMessageAsBytesHex, hex.EncodeToString(bytes)) -} \ No newline at end of file +} diff --git a/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go b/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go index db1915a..3f98e95 100644 --- a/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go +++ b/E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go @@ -130,7 +130,8 @@ func TestGetShutdownHandlerFailure(t *testing.T) { } func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go b/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go index d631dce..088faff 100644 --- a/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go +++ b/E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go @@ -158,7 +158,8 @@ func initRmrSender(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) // TODO: extract to test_utils func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/rmrCgo/rmrCgoApi_test.go b/E2Manager/rmrCgo/rmrCgoApi_test.go index b68aef6..399c2ea 100644 --- a/E2Manager/rmrCgo/rmrCgoApi_test.go +++ b/E2Manager/rmrCgo/rmrCgoApi_test.go @@ -130,7 +130,8 @@ func initRmr(port string, maxMsgSize int, flags int, log *logger.Logger) { }*/ func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + log, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#rmr_c_go_api_test.initLog - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/rmrCgo/rmrCgoUtils.go b/E2Manager/rmrCgo/rmrCgoUtils.go index f26d168..64ff50f 100644 --- a/E2Manager/rmrCgo/rmrCgoUtils.go +++ b/E2Manager/rmrCgo/rmrCgoUtils.go @@ -105,9 +105,9 @@ func (ctx *Context) getAllocatedCRmrMBuf(logger *logger.Logger, mBuf *MBuf, maxM //TODO: change to assert or return error func (ctx *Context) checkContextInitialized() { if ctx.RmrCtx == nil { - if ctx.Logger != nil { + /*if ctx.Logger != nil { ctx.Logger.DPanicf("#rmrCgoUtils.checkContextInitialized - The RMR router has not been initialized") - } + }*/ panic("#rmrCgoUtils.checkContextInitialized - The RMR router has not been initialized. To initialize router please call Init() method") } } diff --git a/E2Manager/services/ran_alarm_service_test.go b/E2Manager/services/ran_alarm_service_test.go index b3d6274..cde13e8 100644 --- a/E2Manager/services/ran_alarm_service_test.go +++ b/E2Manager/services/ran_alarm_service_test.go @@ -10,8 +10,8 @@ import ( func RanAlarmServiceTest(t *testing.T) (RanAlarmService, *logger.Logger, *configuration.Configuration) { - - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/services/rmrreceiver/rmr_receiver_test.go b/E2Manager/services/rmrreceiver/rmr_receiver_test.go index 72ae10a..2b1b38d 100644 --- a/E2Manager/services/rmrreceiver/rmr_receiver_test.go +++ b/E2Manager/services/rmrreceiver/rmr_receiver_test.go @@ -37,7 +37,8 @@ import ( ) func TestListenAndHandle(t *testing.T) { - log, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + log, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#rmr_service_test.TestListenAndHandle - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/services/rmrsender/rmr_sender_test.go b/E2Manager/services/rmrsender/rmr_sender_test.go index a02beba..40f7517 100644 --- a/E2Manager/services/rmrsender/rmr_sender_test.go +++ b/E2Manager/services/rmrsender/rmr_sender_test.go @@ -154,7 +154,8 @@ func TestRmrSenderWhSendFailure(t *testing.T) { // TODO: extract to test_utils func initLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(3) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Fatalf("#initLog - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/services/rnib_data_service_test.go b/E2Manager/services/rnib_data_service_test.go index a505cb7..e78097a 100644 --- a/E2Manager/services/rnib_data_service_test.go +++ b/E2Manager/services/rnib_data_service_test.go @@ -37,7 +37,8 @@ func setupRnibDataServiceTest(t *testing.T) (*rNibDataService, *mocks.RnibReader } func setupRnibDataServiceTestWithMaxAttempts(t *testing.T, maxAttempts int) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) { - logger, err := logger.InitLogger(logger.DebugLevel) + DebugLevel := int8(4) + logger, err := logger.InitLogger(DebugLevel) if err != nil { t.Errorf("#... - failed to initialize logger, error: %s", err) } diff --git a/E2Manager/tests/utils.go b/E2Manager/tests/utils.go index 8b3ab95..edd3740 100644 --- a/E2Manager/tests/utils.go +++ b/E2Manager/tests/utils.go @@ -31,7 +31,8 @@ import ( ) func InitLog(t *testing.T) *logger.Logger { - log, err := logger.InitLogger(logger.InfoLevel) + InfoLevel := int8(1) + log, err := logger.InitLogger(InfoLevel) if err != nil { t.Errorf("#test.utils.InitLog - failed to initialize logger, error: %s", err) } diff --git a/tools/xappmock/logger/logger.go b/tools/xappmock/logger/logger.go index 17acb4b..fabf80c 100644 --- a/tools/xappmock/logger/logger.go +++ b/tools/xappmock/logger/logger.go @@ -13,175 +13,63 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// // This source code is part of the near-RT RIC (RAN Intelligent Controller) // platform project (RICP). + package logger import ( - "fmt" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "strings" + mdclog "gerrit.o-ran-sc.org/r/com/golog" "time" ) type Logger struct { - Logger *zap.Logger -} - -// Copied from zap logger -// -// A Level is a logging priority. Higher levels are more important. -type LogLevel int8 - -const ( - // DebugLevel logs are typically voluminous, and are usually disabled in - // production. - DebugLevel LogLevel = iota - 1 - // InfoLevel is the default logging priority. - InfoLevel - // WarnLevel logs are more important than Info, but don't need individual - // human review. - WarnLevel - // ErrorLevel logs are high-priority. If an application is running smoothly, - // it shouldn't generate any error-level logs. - ErrorLevel - // DPanicLevel logs are particularly important errors. In development the - // logger panics after writing the message. - DPanicLevel - // PanicLevel logs a message, then panics. - PanicLevel - // FatalLevel logs a message, then calls os.Exit(1). - FatalLevel - - _minLevel = DebugLevel - _maxLevel = FatalLevel -) - -var logLevelTokenToLevel = map[string] LogLevel { - "debug" : DebugLevel, - "info": InfoLevel, - "warn": WarnLevel, - "error": ErrorLevel, - "dpanic": DPanicLevel, - "panic": PanicLevel, - "fatal": FatalLevel, + logger *mdclog.MdcLogger } -func LogLevelTokenToLevel(level string) (LogLevel, bool) { - if level, ok := logLevelTokenToLevel[strings.TrimSpace(strings.ToLower(level))];ok { - return level, true - } - return _maxLevel+1, false +func InitLogger(loglevel int8 ) (*Logger, error) { + name := "e2mgr" + log ,err:= NewLogger(name) + return log,err } -func InitLogger(requested LogLevel) (*Logger, error) { - var logger *zap.Logger - var err error - switch requested { - case DebugLevel: - logger, err = initLoggerByLevel(zapcore.DebugLevel) - case InfoLevel: - logger, err = initLoggerByLevel(zapcore.InfoLevel) - case WarnLevel: - logger, err = initLoggerByLevel(zapcore.WarnLevel) - case ErrorLevel: - logger, err = initLoggerByLevel(zapcore.ErrorLevel) - case DPanicLevel: - logger, err = initLoggerByLevel(zapcore.DPanicLevel) - case PanicLevel: - logger, err = initLoggerByLevel(zapcore.PanicLevel) - case FatalLevel: - logger, err = initLoggerByLevel(zapcore.FatalLevel) - default: - err = fmt.Errorf("Invalid logging Level :%d",requested) - } - if err != nil { - return nil, err - } - return &Logger{Logger:logger}, nil - -} -func(l *Logger)Sync() error { - l.Debugf("#logger.Sync - Going to flush buffered log") - return l.Logger.Sync() +func NewLogger(name string) (*Logger, error) { + l,err:= mdclog.InitLogger(name) + return &Logger{ + logger: l, + },err } -func (l *Logger)Infof(formatMsg string, a ...interface{}) { - if l.InfoEnabled() { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Info(msg, zap.Any("mdc", l.getTimeStampMdc())) - } +func (l *Logger) SetFormat(logMonitor int) { + l.logger.Mdclog_format_initialize(logMonitor) } -func (l *Logger)Debugf(formatMsg string, a ...interface{}) { - if l.DebugEnabled(){ - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Debug(msg, zap.Any("mdc", l.getTimeStampMdc())) - } +func (l *Logger) SetLevel(level int) { + l.logger.LevelSet(mdclog.Level(level)) } -func (l *Logger)Errorf(formatMsg string, a ...interface{}) { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Error(msg, zap.Any("mdc", l.getTimeStampMdc())) +func (l *Logger) SetMdc(key string, value string) { + l.logger.MdcAdd(key, value) } -func (l *Logger)Warnf(formatMsg string, a ...interface{}) { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.Warn(msg, zap.Any("mdc", l.getTimeStampMdc())) +func (l *Logger) Errorf(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Error(pattern, args...) } -func (l *Logger) getTimeStampMdc() map[string]string { - timeStr := time.Now().Format("2006-01-02 15:04:05.000") - mdc := map[string]string{"time": timeStr} - return mdc +func (l *Logger) Warnf(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Warning(pattern, args...) } -func (l *Logger)InfoEnabled()bool{ - return l.Logger.Core().Enabled(zap.InfoLevel) +func (l *Logger) Infof(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Info(pattern, args...) } -func (l *Logger)DebugEnabled()bool{ - return l.Logger.Core().Enabled(zap.DebugLevel) +func (l *Logger) Debugf(pattern string, args ...interface{}) { + l.SetMdc("time", time.Now().Format(time.RFC3339)) + l.logger.Debug(pattern, args...) } - -func (l *Logger)DPanicf(formatMsg string, a ...interface{}) { - msg := fmt.Sprintf(formatMsg, a...) - l.Logger.DPanic(msg, zap.Any("mdc", l.getTimeStampMdc())) -} - -func initLoggerByLevel(l zapcore.Level) (*zap.Logger, error) { - cfg := zap.Config{ - Encoding: "json", - Level: zap.NewAtomicLevelAt(l), - OutputPaths: []string{"stdout"}, - ErrorOutputPaths: []string{"stderr"}, - EncoderConfig: zapcore.EncoderConfig{ - MessageKey: "msg", - - LevelKey: "crit", - EncodeLevel: zapcore.CapitalLevelEncoder, - - TimeKey: "ts", - EncodeTime: epochMillisIntegerTimeEncoder, - - CallerKey: "id", - EncodeCaller: xAppMockCallerEncoder, - }, - } - return cfg.Build() -} - -func xAppMockCallerEncoder(caller zapcore.EntryCaller, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString("xAppMock") -} - -func epochMillisIntegerTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { - nanos := t.UnixNano() - millis := int64(nanos) / int64(time.Millisecond) - enc.AppendInt64(millis) -} - diff --git a/tools/xappmock/main/xappmock.go b/tools/xappmock/main/xappmock.go index 18c069e..d85d980 100644 --- a/tools/xappmock/main/xappmock.go +++ b/tools/xappmock/main/xappmock.go @@ -44,7 +44,8 @@ var rmrService *rmr.Service func main() { - logLevel, _ := logger.LogLevelTokenToLevel("info") + //logLevel, _ := logger.LogLevelTokenToLevel("info") + logLevel := int8(1) logger, err := logger.InitLogger(logLevel) if err != nil { fmt.Printf("#app.main - failed to initialize logger, error: %s", err) -- 2.16.6