Update logging

Change-Id: Idffa0b49219bf6bd6ff0bc255e0a4f3bbf6e0959
Signed-off-by: Mohamed Abukar <abukar.mohamed@nokia.com>
diff --git a/go.mod b/go.mod
index 33342f0..d7a9c32 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,7 @@
 go 1.12
 
 require (
+	gerrit.o-ran-sc.org/r/com/golog v0.0.0
 	gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.1.1
 	github.com/BurntSushi/toml v0.3.1 // indirect
 	github.com/fsnotify/fsnotify v1.4.7
@@ -13,3 +14,5 @@
 )
 
 replace gerrit.o-ran-sc.org/r/ric-plt/sdlgo => gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1
+
+replace gerrit.o-ran-sc.org/r/com/golog => gerrit.o-ran-sc.org/r/com/golog.git v0.0.0-20190604083303-aaffc8ebe3f1
diff --git a/go.sum b/go.sum
index 2d25621..6772fc3 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,5 @@
+gerrit.o-ran-sc.org/r/com/golog.git v0.0.0-20190604083303-aaffc8ebe3f1 h1:WAB8G/FFaUjRkpLuUhIo0EfbeBOY7xjkcFAFkpe3Xns=
+gerrit.o-ran-sc.org/r/com/golog.git v0.0.0-20190604083303-aaffc8ebe3f1/go.mod h1:b8YB31U8/4iRpABioeSzGi/YMzOQ/Zq7hrJmmXKqlJk=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1 h1:D2fU0/YXdqSNYsmptSBbkDfG76uBFKjnhQiq5cD4WT4=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1/go.mod h1:2Y8gw2jqj9urI8VFqFQn7BX0J3A852+YrXVV9V8gOt4=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
@@ -81,7 +83,6 @@
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M=
 github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -94,7 +95,6 @@
 gitlabe1.ext.net.nokia.com/ric_dev/ue-nib v0.0.0-20190531121637-5379da45e235/go.mod h1:rhiDbAhxaCJouoZfj0+vSoYUWM2t9i1EdR0MpewgTYo=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
diff --git a/pkg/xapp/config.go b/pkg/xapp/config.go
index c63e32c..647b3eb 100755
--- a/pkg/xapp/config.go
+++ b/pkg/xapp/config.go
@@ -24,6 +24,7 @@
 	"github.com/fsnotify/fsnotify"
 	"github.com/spf13/viper"
 	"os"
+	"path/filepath"
 )
 
 type Configurator struct {
@@ -41,8 +42,8 @@
 	return *fileName
 }
 
-func LoadConfig() (l Log) {
-	l = Log{}
+func LoadConfig() (l *Log) {
+	l = NewLogger(filepath.Base(os.Args[0]))
 	viper.SetConfigFile(parseCmd())
 
 	if err := viper.ReadInConfig(); err != nil {
diff --git a/pkg/xapp/db.go b/pkg/xapp/db.go
index 36fbfc1..f2286b4 100755
--- a/pkg/xapp/db.go
+++ b/pkg/xapp/db.go
@@ -34,10 +34,10 @@
 }
 
 type SDLClient struct {
-	db   	*sdl.SdlInstance
-	stat 	map[string]Counter
-	mux  	sync.Mutex
-	ready 	bool
+	db    *sdl.SdlInstance
+	stat  map[string]Counter
+	mux   sync.Mutex
+	ready bool
 }
 
 type RNIBClient struct {
@@ -47,8 +47,8 @@
 // NewSDLClient returns a new SDLClient.
 func NewSDLClient(ns string) *SDLClient {
 	return &SDLClient{
-		db: sdl.NewSdlInstance(ns, sdl.NewDatabase()),
-		stat: Metric.RegisterCounterGroup(SDLCounterOpts, "SDL"),
+		db:    sdl.NewSdlInstance(ns, sdl.NewDatabase()),
+		stat:  Metric.RegisterCounterGroup(SDLCounterOpts, "SDL"),
 		ready: false,
 	}
 }
diff --git a/pkg/xapp/logger.go b/pkg/xapp/logger.go
index a73cb36..484df2c 100755
--- a/pkg/xapp/logger.go
+++ b/pkg/xapp/logger.go
@@ -19,66 +19,41 @@
 
 package xapp
 
-/*
-#cgo CFLAGS: -I/usr/local/include
-#cgo LDFLAGS: -lmdclog
-#
-#include <mdclog/mdclog.h>
-void xAppMgr_mdclog_write(mdclog_severity_t severity, const char *msg) {
-     mdclog_write(severity, "%s", msg);
-}
-*/
-import "C"
-
 import (
-	"fmt"
-	"log"
-	"time"
+	mdclog "gerrit.o-ran-sc.org/r/com/golog"
 )
 
 type Log struct {
+	logger *mdclog.MdcLogger
 }
 
-const (
-	LogLvlErr   = C.MDCLOG_ERR
-	LogLvlWarn  = C.MDCLOG_WARN
-	LogLvlInfo  = C.MDCLOG_INFO
-	LogLvlDebug = C.MDCLOG_DEBUG
-)
-
-func WriteLog(lvl C.mdclog_severity_t, msg string) {
-	t := time.Now().Format("2019-01-02 15:04:05")
-	text := fmt.Sprintf("%s:: %s ", t, msg)
-
-	C.xAppMgr_mdclog_write(lvl, C.CString(text))
+func NewLogger(name string) *Log {
+	l, _ := mdclog.InitLogger(name)
+	return &Log{
+		logger: l,
+	}
 }
 
-func (Log) SetLevel(level int) {
-	l := C.mdclog_severity_t(level)
-	C.mdclog_level_set(l)
+func (l *Log) SetLevel(level int) {
+	l.logger.LevelSet(mdclog.Level(level))
 }
 
-func (Log) SetMdc(key string, value string) {
-	C.mdclog_mdc_add(C.CString(key), C.CString(value))
+func (l *Log) SetMdc(key string, value string) {
+	l.logger.MdcAdd(key, value)
 }
 
-func (Log) Fatal(pattern string, args ...interface{}) {
-	WriteLog(LogLvlErr, fmt.Sprintf(pattern, args...))
-	log.Panic("Fatal error occured, exiting ...")
+func (l *Log) Error(pattern string, args ...interface{}) {
+	l.logger.Error(pattern, args...)
 }
 
-func (Log) Error(pattern string, args ...interface{}) {
-	WriteLog(LogLvlErr, fmt.Sprintf(pattern, args...))
+func (l *Log) Warn(pattern string, args ...interface{}) {
+	l.logger.Warning(pattern, args...)
 }
 
-func (Log) Warn(pattern string, args ...interface{}) {
-	WriteLog(LogLvlWarn, fmt.Sprintf(pattern, args...))
+func (l *Log) Info(pattern string, args ...interface{}) {
+	l.logger.Info(pattern, args...)
 }
 
-func (Log) Info(pattern string, args ...interface{}) {
-	WriteLog(LogLvlInfo, fmt.Sprintf(pattern, args...))
-}
-
-func (Log) Debug(pattern string, args ...interface{}) {
-	WriteLog(LogLvlDebug, fmt.Sprintf(pattern, args...))
+func (l *Log) Debug(pattern string, args ...interface{}) {
+	l.logger.Debug(pattern, args...)
 }
diff --git a/pkg/xapp/rmr.go b/pkg/xapp/rmr.go
index e910ec1..a4955d1 100755
--- a/pkg/xapp/rmr.go
+++ b/pkg/xapp/rmr.go
@@ -75,13 +75,13 @@
 
 	ctx := C.rmr_init(p, m, C.int(0))
 	if ctx == nil {
-		Logger.Fatal("rmrClient: Initializing RMR context failed, bailing out!")
+		Logger.Error("rmrClient: Initializing RMR context failed, bailing out!")
 	}
 
 	return &RMRClient{
-		context: ctx,
+		context:   ctx,
 		consumers: make([]MessageConsumer, 0),
-		stat: Metric.RegisterCounterGroup(RMRCounterOpts, "RMR"),
+		stat:      Metric.RegisterCounterGroup(RMRCounterOpts, "RMR"),
 	}
 }
 
@@ -148,7 +148,7 @@
 func (m *RMRClient) Allocate() *C.rmr_mbuf_t {
 	buf := C.rmr_alloc_msg(m.context, 0)
 	if buf == nil {
-		Logger.Fatal("rmrClient: Allocating message buffer failed!")
+		Logger.Error("rmrClient: Allocating message buffer failed!")
 	}
 
 	return buf
@@ -216,10 +216,20 @@
 	return m.ready != 0
 }
 
-func (m *RMRClient) GetRicMessageId(mid string) int {
-	return RICMessageTypes[mid]
-}
-
 func (m *RMRClient) SetReadyCB(cb ReadyCB) {
 	m.readyCb = cb
 }
+
+func (m *RMRClient) GetRicMessageId(name string) (int, bool) {
+	id, ok := RICMessageTypes[name]
+	return id, ok
+}
+
+func (m *RMRClient) GetRicMessageName(id int) (s string) {
+	for k, v := range RICMessageTypes {
+		if id == v {
+			return k
+		}
+	}
+	return
+}
diff --git a/pkg/xapp/xapp.go b/pkg/xapp/xapp.go
index 78df93e..c51e0ac 100755
--- a/pkg/xapp/xapp.go
+++ b/pkg/xapp/xapp.go
@@ -34,10 +34,18 @@
 	Rnib     *RNIBClient
 	Resource *Router
 	Metric   *Metrics
-	Logger   Log
+	Logger   *Log
 	Config   Configurator
 )
 
+func IsReady() bool {
+	return Rmr.IsReady() && Sdl.IsReady()
+}
+
+func SetReadyCB(cb ReadyCB) {
+	Rmr.SetReadyCB(cb)
+}
+
 func init() {
 	// Load xapp configuration
 	Logger = LoadConfig()
@@ -69,11 +77,3 @@
 	Sdl.TestConnection()
 	Rmr.Start(c)
 }
-
-func IsReady() bool {
-	return Rmr.IsReady() && Sdl.IsReady()
-}
-
-func SetReadyCB(cb ReadyCB) {
-	Rmr.SetReadyCB(cb)
-}
\ No newline at end of file
diff --git a/pkg/xapp/xapp_test.go b/pkg/xapp/xapp_test.go
index 51ac171..06345af 100755
--- a/pkg/xapp/xapp_test.go
+++ b/pkg/xapp/xapp_test.go
@@ -159,6 +159,30 @@
 	}
 }
 
+func TestGetRicMessageSuccess(t *testing.T) {
+	id, ok := Rmr.GetRicMessageId("RIC_SUB_REQ")
+	if !ok || id != 12010 {
+		t.Errorf("Error: GetRicMessageId failed: id=%d", id)
+	}
+
+	name := Rmr.GetRicMessageName(12010)
+	if name !=  "RIC_SUB_REQ" {
+		t.Errorf("Error: GetRicMessageName failed: name=%s", name)
+	}
+}
+
+func TestGetRicMessageFails(t *testing.T) {
+	id, ok := Rmr.GetRicMessageId("INVALID")
+	if ok {
+		t.Errorf("Error: GetRicMessageId returned invalid value id=%d", id)
+	}
+
+	name := Rmr.GetRicMessageName(123456)
+	if name !=  "" {
+		t.Errorf("Error: GetRicMessageName returned invalid value: name=%s", name)
+	}
+}
+
 func TestTeardown(t *testing.T) {
 	Sdl.Clear()
 	Rnib.Clear()