diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java
index c959eb4885b..2ffa6ffa8d8 100644
--- a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java
@@ -48,6 +48,22 @@ public interface EntgraLogger extends Log {
void warn(Object object, Throwable t, LogContext logContext);
+ void info(String message, LogContext logContext);
+
+ void debug(String message, LogContext logContext);
+
+ void error(String message, LogContext logContext);
+
+ void error(String message, Throwable t, LogContext logContext);
+
+ void warn(String message, LogContext logContext);
+
+ void warn(String message, Throwable t, LogContext logContext);
+
+ void trace(String message, LogContext logContext);
+
+ void fatal(String message, LogContext logContext);
+
void clearLogContext();
}
diff --git a/components/logger/io.entgra.notification.logger/pom.xml b/components/logger/io.entgra.notification.logger/pom.xml
new file mode 100644
index 00000000000..ced09b31577
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/pom.xml
@@ -0,0 +1,89 @@
+
+
+
+
+ 4.0.0
+
+
+ org.wso2.carbon.devicemgt
+ logger
+ 5.0.16-SNAPSHOT
+
+
+ io.entgra.notification.logger
+ bundle
+
+
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.logger
+
+
+ org.wso2.carbon
+ org.wso2.carbon.logging
+ provided
+
+
+ org.testng
+ testng
+
+
+ 5.0.16-SNAPSHOT
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ ${carbon.device.mgt.version}
+ Device Notification Logger Bundle
+
+ io.entgra.logger;version="[2.0,3)",
+ io.entgra.logger.spi;version="[2.0,3)",
+ org.apache.commons.logging;version="[1.2,2)",
+ org.apache.log4j;version="[1.2,2)",
+ org.wso2.carbon.context;version="[4.4,5)
+
+
+ io.entgra.logger.*
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/DeviceLogContext.java b/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/DeviceLogContext.java
new file mode 100644
index 00000000000..3becd28b9c1
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/DeviceLogContext.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2023, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
+ *
+ * Entgra (pvt) Ltd. licenses this file to you 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.
+ */
+
+package io.entgra.notification.logger;
+
+import io.entgra.device.mgt.extensions.logger.LogContext;
+
+public class DeviceLogContext extends LogContext {
+ private final String deviceName;
+ private final String operationCode;
+ private final String deviceType;
+ private final String tenantID;
+
+ private DeviceLogContext(Builder builder) {
+ this.operationCode = builder.operationCode;
+ this.deviceName = builder.deviceName;
+ this.deviceType = builder.deviceType;
+ this.tenantID = builder.tenantID;
+ }
+
+ public String getTenantID() {
+ return tenantID;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public String getOperationCode() {
+ return operationCode;
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+
+ public static class Builder {
+ private String deviceName;
+ private String operationCode;
+ private String deviceType;
+ private String tenantID;
+
+ public Builder() {
+ }
+
+ public String getDeviceType() {
+ return deviceType;
+ }
+
+ public Builder setDeviceType(String deviceType) {
+ this.deviceType = deviceType;
+ return this;
+ }
+
+ public String getTenantID() {
+ return tenantID;
+ }
+
+ public Builder setTenantID(String tenantID) {
+ this.tenantID = tenantID;
+ return this;
+ }
+
+ public String getDeviceName() {
+ return deviceName;
+ }
+
+ public Builder setDeviceName(String deviceName) {
+ this.deviceName = deviceName;
+ return this;
+ }
+
+ public String getOperationCode() {
+ return operationCode;
+ }
+
+ public Builder setOperationCode(String operationCode) {
+ this.operationCode = operationCode;
+ return this;
+ }
+
+ public DeviceLogContext build() {
+ return new DeviceLogContext(this);
+ }
+
+ }
+}
diff --git a/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/impl/EntgraLoggerImpl.java b/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/impl/EntgraLoggerImpl.java
new file mode 100644
index 00000000000..882c82e4735
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/impl/EntgraLoggerImpl.java
@@ -0,0 +1,294 @@
+/*
+ * Copyright (c) 2023, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
+ *
+ * Entgra (pvt) Ltd. licenses this file to you 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.
+ */
+package io.entgra.notification.logger.impl;
+
+
+import io.entgra.device.mgt.extensions.logger.LogContext;
+import io.entgra.device.mgt.extensions.logger.spi.EntgraLogger;
+import io.entgra.notification.logger.DeviceLogContext;
+import io.entgra.notification.logger.util.MDCContextUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.log4j.MDC;
+
+
+public class EntgraLoggerImpl implements EntgraLogger {
+
+ private static Log log = null;
+
+ public EntgraLoggerImpl(Class> clazz) {
+ log = LogFactory.getLog(clazz);
+ }
+
+ @Override
+ public void info(Object object, LogContext logContext) {
+ }
+
+ @Override
+ public void info(Object object, Throwable t, LogContext logContext) {
+ }
+
+ @Override
+ public void debug(Object object, LogContext logContext) {
+ }
+
+ @Override
+ public void debug(Object object, Throwable t, LogContext logContext) {
+ }
+
+ @Override
+ public void error(Object object, LogContext logContext) {
+ }
+
+ @Override
+ public void error(Object object, Throwable t, LogContext logContext) {
+ }
+
+ @Override
+ public void fatal(Object object, LogContext logContext) {
+ }
+
+ @Override
+ public void fatal(Object object, Throwable t, LogContext logContext) {
+ }
+
+ @Override
+ public void trace(Object object, LogContext logContext) {
+
+ }
+
+ @Override
+ public void trace(Object object, Throwable t, LogContext logContext) {
+
+ }
+
+ @Override
+ public void warn(Object object, LogContext logContext) {
+ }
+
+ @Override
+ public void warn(Object object, Throwable t, LogContext logContext) {
+ }
+
+ public void info(String message) {
+ }
+
+ public void info(String message, Throwable t) {
+ log.info(message, t);
+ }
+
+ @Override
+ public void info(String message, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.info(message);
+ }
+
+
+ public void debug(String message) {
+ log.debug(message);
+ }
+
+
+ public void debug(String message, Throwable t) {
+ log.debug(message, t);
+ }
+
+ @Override
+ public void debug(String message, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.debug(message);
+ }
+
+ public void error(String message) {
+ log.error(message);
+ }
+
+
+ public void error(String message, Throwable t) {
+ log.error(message, t);
+ }
+
+ @Override
+ public void error(String message, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.error(message);
+ }
+
+ @Override
+ public void error(String message, Throwable t, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.error(message, t);
+ }
+
+
+ public void warn(String message) {
+ log.warn(message);
+ }
+
+
+ public void warn(String message, Throwable t) {
+ log.warn(message, t);
+ }
+
+ @Override
+ public void warn(String message, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.warn(message);
+ }
+
+ @Override
+ public void warn(String message, Throwable t, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.warn(message, t);
+ }
+
+
+ public void trace(String message) {
+ log.trace(message);
+ }
+
+
+ public void trace(String message, Throwable t) {
+ log.trace(message, t);
+ }
+
+ @Override
+ public void trace(String message, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.trace(message);
+ }
+
+
+ public void fatal(String message) {
+ log.fatal(message);
+ }
+
+
+ public void fatal(String message, Throwable t) {
+ log.fatal(message, t);
+ }
+
+ @Override
+ public void fatal(String message, LogContext logContext) {
+ DeviceLogContext deviceLogContext = (DeviceLogContext) logContext;
+ MDCContextUtil.populateDeviceMDCContext(deviceLogContext);
+ log.fatal(message);
+ }
+
+ @Override
+ public void debug(Object o) {
+ log.debug(o);
+ }
+
+ @Override
+ public void debug(Object o, Throwable throwable) {
+ log.debug(o, throwable);
+ }
+
+ @Override
+ public void error(Object o) {
+ log.error(o);
+ }
+
+ @Override
+ public void error(Object o, Throwable throwable) {
+ log.error(o, throwable);
+ }
+
+ @Override
+ public void fatal(Object o) {
+ log.fatal(0);
+ }
+
+ @Override
+ public void fatal(Object o, Throwable throwable) {
+ log.fatal(0, throwable);
+ }
+
+ @Override
+ public void info(Object o) {
+ log.info(o);
+ }
+
+ @Override
+ public void info(Object o, Throwable throwable) {
+ log.info(o, throwable);
+ }
+
+ @Override
+ public boolean isDebugEnabled() {
+ return log.isDebugEnabled();
+ }
+
+ @Override
+ public boolean isErrorEnabled() {
+ return log.isErrorEnabled();
+ }
+
+ @Override
+ public boolean isFatalEnabled() {
+ return log.isFatalEnabled();
+ }
+
+ @Override
+ public boolean isInfoEnabled() {
+ return log.isInfoEnabled();
+ }
+
+ @Override
+ public boolean isTraceEnabled() {
+ return log.isTraceEnabled();
+ }
+
+ @Override
+ public boolean isWarnEnabled() {
+ return log.isWarnEnabled();
+ }
+
+ @Override
+ public void trace(Object o) {
+ log.trace(o);
+ }
+
+ @Override
+ public void trace(Object o, Throwable throwable) {
+ log.trace(o, throwable);
+ }
+
+ @Override
+ public void warn(Object o) {
+ log.warn(o);
+ }
+
+ @Override
+ public void warn(Object o, Throwable throwable) {
+ log.warn(o, throwable);
+ }
+
+ @Override
+ public void clearLogContext() {
+ MDC.clear();
+ }
+}
diff --git a/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/util/MDCContextUtil.java b/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/util/MDCContextUtil.java
new file mode 100644
index 00000000000..dc7378b84cd
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/src/main/java/io/entgra/notification/logger/util/MDCContextUtil.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
+ *
+ * Entgra (pvt) Ltd. licenses this file to you 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.
+ */
+package io.entgra.notification.logger.util;
+
+import io.entgra.notification.logger.DeviceLogContext;
+import org.apache.log4j.MDC;
+
+public final class MDCContextUtil {
+
+ public static void populateDeviceMDCContext(final DeviceLogContext mdcContext) {
+ if (mdcContext.getDeviceName() != null) {
+ MDC.put("DeviceName", mdcContext.getDeviceName());
+ }
+ if (mdcContext.getDeviceType() != null) {
+ MDC.put("DeviceType", mdcContext.getDeviceType());
+ }
+ if (mdcContext.getOperationCode() != null) {
+ MDC.put("OperationCode", mdcContext.getOperationCode());
+ }
+ if (mdcContext.getTenantID() != null) {
+ MDC.put("TenantId", mdcContext.getTenantID());
+ }
+ }
+}
+
+
diff --git a/components/logger/io.entgra.notification.logger/src/test/java/io/entgra/logger/impl/EntgraLoggerImplTest.java b/components/logger/io.entgra.notification.logger/src/test/java/io/entgra/logger/impl/EntgraLoggerImplTest.java
new file mode 100644
index 00000000000..204bc21fe3e
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/src/test/java/io/entgra/logger/impl/EntgraLoggerImplTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2023, Entgra (pvt) Ltd. (http://entgra.io) All Rights Reserved.
+ *
+ * Entgra (pvt) Ltd. licenses this file to you 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.
+ */
+package io.entgra.logger.impl;
+
+import io.entgra.device.mgt.extensions.logger.spi.EntgraLogger;
+import io.entgra.notification.logger.DeviceLogContext;
+import io.entgra.notification.logger.impl.EntgraLoggerImpl;
+import org.testng.annotations.Test;
+
+public class EntgraLoggerImplTest {
+
+ private final EntgraLogger log = new EntgraLoggerImpl(EntgraLoggerImplTest.class);
+
+ @Test
+ public void logTest() {
+
+ DeviceLogContext.Builder deviceLogContext = new DeviceLogContext.Builder();
+
+ deviceLogContext.setDeviceName("M02S");
+ deviceLogContext.setDeviceType("Android");
+ deviceLogContext.setOperationCode("1222");
+ deviceLogContext.setTenantID("1234");
+
+ log.debug("Test debug message", deviceLogContext.build());
+ log.info("Test info message", deviceLogContext.build());
+ log.error("Test error message", deviceLogContext.build());
+ log.warn("Test warn message", deviceLogContext.build());
+ log.trace("Test trace message", deviceLogContext.build());
+ log.fatal("Test fatal message", deviceLogContext.build());
+ log.error("debug message test", new Throwable("error throw"));
+ log.info("info message test");
+
+// log.isDebugEnabled();
+// log.isErrorEnabled();
+// log.isFatalEnabled();
+// log.isInfoEnabled();
+// log.isTraceEnabled();
+// log.isWarnEnabled();
+
+ }
+
+}
diff --git a/components/logger/io.entgra.notification.logger/src/test/resources/log4j.properties b/components/logger/io.entgra.notification.logger/src/test/resources/log4j.properties
new file mode 100644
index 00000000000..b174b35e366
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/src/test/resources/log4j.properties
@@ -0,0 +1,32 @@
+#
+# Copyright 2023 Entgra Pvt. Ltd.. (http://entgra.io)
+#
+# 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 is the log4j configuration file used by Entgra Pvt. Ltd.
+#
+# IMPORTANT : Please do not remove or change the names of any
+# of the Appenders defined here. The layout pattern & log file
+# can be changed using the WSO2 Carbon Management Console, and those
+# settings will override the settings in this file.
+#
+
+log4j.rootLogger=DEBUG, STD_OUT
+
+# Redirect log messages to console
+log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender
+log4j.appender.STD_OUT.Target=System.out
+log4j.appender.STD_OUT.layout=org.apache.log4j.PatternLayout
+log4j.appender.STD_OUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
diff --git a/components/logger/io.entgra.notification.logger/src/test/resources/testng.xml b/components/logger/io.entgra.notification.logger/src/test/resources/testng.xml
new file mode 100644
index 00000000000..c64326b7ff8
--- /dev/null
+++ b/components/logger/io.entgra.notification.logger/src/test/resources/testng.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/logger/pom.xml b/components/logger/pom.xml
new file mode 100644
index 00000000000..b65b0e419d3
--- /dev/null
+++ b/components/logger/pom.xml
@@ -0,0 +1,46 @@
+
+
+
+ 4.0.0
+
+
+ carbon-devicemgt
+ org.wso2.carbon.devicemgt
+ 5.0.16-SNAPSHOT
+ ../../pom.xml
+
+
+ logger
+ pom
+ Entgra IoT - Notification logger
+ http://entgra.io
+
+
+ io.entgra.notification.logger
+
+
+
+ 8
+ 8
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index aa41e4956d6..7dbc9a9f6f2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,7 @@
features/transport-mgt
features/analytics-mgt
features/webapp-authenticator-framework
+ components/logger