aboutsummaryrefslogtreecommitdiffstats
path: root/certServiceK8sExternalProvider/src/leveledlogger
diff options
context:
space:
mode:
authorJoanna Jeremicz <joanna.jeremicz@nokia.com>2020-10-30 17:06:04 +0100
committerJoanna Jeremicz <joanna.jeremicz@nokia.com>2020-11-05 13:53:05 +0100
commit5fe9e1b7c43fc1a34b38899a2a055540cc30ac81 (patch)
tree5a83d0219fa03f0d280db61ed44f64d377a04138 /certServiceK8sExternalProvider/src/leveledlogger
parent15446c2ccfc117a0feb5a5249c2e62714b2cd3d7 (diff)
[OOM-K8S-CERT-EXTERNAL-PROVIDER] Change logger implementation provider
Issue-ID: OOM-2559 Signed-off-by: Joanna Jeremicz <joanna.jeremicz@nokia.com> Change-Id: I717dfcfd74a01ccb81b2eb03c52be2c90fc3a9c5
Diffstat (limited to 'certServiceK8sExternalProvider/src/leveledlogger')
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/logger.go138
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/logger_config.json13
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/logger_test.go87
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_debug.log4
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_warn.log2
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_debug.json11
-rw-r--r--certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_warn.json11
7 files changed, 266 insertions, 0 deletions
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/logger.go b/certServiceK8sExternalProvider/src/leveledlogger/logger.go
new file mode 100644
index 00000000..ee839cbc
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/logger.go
@@ -0,0 +1,138 @@
+/*
+ * ============LICENSE_START=======================================================
+ * oom-certservice-k8s-external-provider
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package leveledlogger
+
+import (
+ "encoding/json"
+ "fmt"
+ "io/ioutil"
+ "log"
+
+ "github.com/go-logr/logr"
+ "go.uber.org/zap/zapcore"
+ "github.com/go-logr/zapr"
+ "go.uber.org/zap"
+)
+
+const (
+ WARNING = int(zapcore.WarnLevel) * -1
+ INFO = int(zapcore.InfoLevel) * -1
+ DEBUG = int(zapcore.DebugLevel) * -1
+)
+
+type Logger struct {
+ Log logr.Logger
+ ConfigFile string
+}
+
+var configFileName = "default"
+var logLevel = "warn"
+
+func SetConfigFileName(newName string) {
+ configFileName = newName
+}
+
+func SetLogLevel(level string) {
+ logLevel = level
+}
+
+func GetLogger() Logger {
+ var cfg zap.Config
+
+ if err := json.Unmarshal(getConfig(), &cfg); err != nil {
+ panic(err)
+ }
+ logger, err := cfg.Build()
+ if err != nil {
+ panic(err)
+ }
+
+ leveledLogger := Logger{
+ Log: zapr.NewLogger(logger),
+ }
+ return leveledLogger
+}
+
+func GetLoggerWithValues(keysAndValues ...interface{}) Logger {
+ leveledLogger := GetLogger()
+ leveledLogger.Log = leveledLogger.Log.WithValues(keysAndValues...)
+ return leveledLogger
+}
+
+func GetLoggerWithName(name string) Logger {
+ leveledLogger := GetLogger()
+ leveledLogger.Log = leveledLogger.Log.WithName(name)
+ return leveledLogger
+}
+
+func (logger *Logger) Error(err error, message string, keysAndValues ...interface{}) {
+ logger.Log.Error(err, message, keysAndValues...)
+}
+
+func (logger *Logger) Warning(message string, keysAndValues ...interface{}) {
+ logger.log(message, WARNING, keysAndValues...)
+}
+
+func (logger *Logger) Info(message string, keysAndValues ...interface{}) {
+ logger.log(message, INFO, keysAndValues...)
+}
+
+func (logger *Logger) Debug(message string, keysAndValues ...interface{}) {
+ logger.log(message, DEBUG, keysAndValues...)
+}
+
+func (logger *Logger) log(message string, lvl int, keysAndValues ...interface{}) {
+ logger.Log.V(lvl).Info(message, keysAndValues...)
+}
+
+func getDefaultConfig() []byte {
+ return []byte(fmt.Sprintf(`{
+ "level": "%s",
+ "encoding": "console",
+ "outputPaths": ["stdout"],
+ "encoderConfig": {
+ "timeKey": "timeKey",
+ "messageKey": "message",
+ "levelKey": "level",
+ "nameKey": "name",
+ "levelEncoder": "capital",
+ "timeEncoder": "iso8601"
+ }
+ }`, logLevel))
+}
+
+func getConfig() []byte {
+ var config = []byte{}
+ if configFileName == "default" {
+ config = getDefaultConfig()
+ } else {
+ config = readFile(configFileName)
+ }
+ return config
+}
+
+func readFile(filename string) []byte {
+ certRequest, err := ioutil.ReadFile(filename)
+ if err != nil {
+ log.Fatal(err)
+ }
+ return certRequest
+}
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/logger_config.json b/certServiceK8sExternalProvider/src/leveledlogger/logger_config.json
new file mode 100644
index 00000000..96ba7024
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/logger_config.json
@@ -0,0 +1,13 @@
+{
+ "level": "debug",
+ "encoding": "console",
+ "outputPaths": ["stdout"],
+ "encoderConfig": {
+ "timeKey": "timeKey",
+ "messageKey": "message",
+ "levelKey": "level",
+ "nameKey": "name",
+ "levelEncoder": "capital",
+ "timeEncoder": "iso8601"
+ }
+}
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/logger_test.go b/certServiceK8sExternalProvider/src/leveledlogger/logger_test.go
new file mode 100644
index 00000000..84aa5907
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/logger_test.go
@@ -0,0 +1,87 @@
+/*
+ * ============LICENSE_START=======================================================
+ * oom-certservice-k8s-external-provider
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package leveledlogger
+
+import (
+ "bytes"
+ "fmt"
+ "log"
+ "os"
+ "testing"
+)
+
+func TestLoggerOnWarningLevel(t *testing.T) {
+ const resultLogName = "testdata/test_result_warn.log"
+ const expectedLogName = "testdata/test_expected_warn.log"
+
+ SetConfigFileName("testdata/test_logger_config_warn.json")
+ logger := GetLoggerWithName("loggername")
+
+ logOnAllLevels(logger)
+
+ resultLogBytes := readFile(resultLogName)
+ expectedLogBytes := readFile(expectedLogName)
+
+ assertLogEquals(t, resultLogBytes, expectedLogBytes, resultLogName)
+}
+
+func TestLoggerOnDebugLevel(t *testing.T) {
+ const resultLogName = "testdata/test_result_debug.log"
+ const expectedLogName = "testdata/test_expected_debug.log"
+
+ SetConfigFileName("testdata/test_logger_config_debug.json")
+ logger := GetLoggerWithName("loggername")
+
+ logOnAllLevels(logger)
+
+ resultLogBytes := readFile(resultLogName)
+ expectedLogBytes := readFile(expectedLogName)
+
+ assertLogEquals(t, resultLogBytes, expectedLogBytes, resultLogName)
+}
+
+func logOnAllLevels(logger Logger) {
+ logger.Debug("this is a debug message")
+ logger.Info("this is an info message")
+ logger.Warning("this is a warning message", "key1", "value1")
+ logger.Error(fmt.Errorf("this is an error message"), "err msg")
+}
+
+func assertLogEquals(t *testing.T, resultLogBytes []byte, expectedLogBytes []byte, resultLogName string) {
+ if areEqual(resultLogBytes, expectedLogBytes) {
+ removeTemporaryFile(resultLogName)
+ } else {
+ t.Fatal("Logs are different than expected. Please check: " + resultLogName)
+ }
+}
+
+func areEqual(slice1 []byte, slice2 []byte) bool {
+ return bytes.Compare(slice1, slice2) == 0
+}
+
+func removeTemporaryFile(fileName string) {
+ if _, err := os.Stat(fileName); err == nil {
+ e := os.Remove(fileName)
+ if e != nil {
+ log.Fatal(e)
+ }
+ }
+}
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_debug.log b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_debug.log
new file mode 100644
index 00000000..25242eee
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_debug.log
@@ -0,0 +1,4 @@
+DEBUG loggername this is a debug message
+INFO loggername this is an info message
+WARN loggername this is a warning message {"key1": "value1"}
+ERROR loggername err msg {"error": "this is an error message"}
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_warn.log b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_warn.log
new file mode 100644
index 00000000..b6a1985b
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_expected_warn.log
@@ -0,0 +1,2 @@
+WARN loggername this is a warning message {"key1": "value1"}
+ERROR loggername err msg {"error": "this is an error message"}
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_debug.json b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_debug.json
new file mode 100644
index 00000000..96ac5dc7
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_debug.json
@@ -0,0 +1,11 @@
+{
+ "level": "debug",
+ "encoding": "console",
+ "outputPaths": ["stdout", "testdata/test_result_debug.log"],
+ "encoderConfig": {
+ "messageKey": "message",
+ "levelKey": "level",
+ "nameKey": "name",
+ "levelEncoder": "capital"
+ }
+}
diff --git a/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_warn.json b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_warn.json
new file mode 100644
index 00000000..a07bdb26
--- /dev/null
+++ b/certServiceK8sExternalProvider/src/leveledlogger/testdata/test_logger_config_warn.json
@@ -0,0 +1,11 @@
+{
+ "level": "warn",
+ "encoding": "console",
+ "outputPaths": ["stdout", "testdata/test_result_warn.log"],
+ "encoderConfig": {
+ "messageKey": "message",
+ "levelKey": "level",
+ "nameKey": "name",
+ "levelEncoder": "capital"
+ }
+}