diff --git a/virtualSensor.cpp b/virtualSensor.cpp
index fb6d456..63baea5 100644
--- a/virtualSensor.cpp
+++ b/virtualSensor.cpp
@@ -176,6 +176,94 @@
     WarningInterface::warningLow(sensorThreshold.warningLow);
 }
 
+void VirtualSensor::checkSensorThreshold(const double value)
+{
+    auto criticalHigh = CriticalInterface::criticalHigh();
+    auto criticalLow = CriticalInterface::criticalLow();
+    auto warningHigh = WarningInterface::warningHigh();
+    auto warningLow = WarningInterface::warningLow();
+
+    if (value > criticalHigh)
+    {
+        if (!CriticalInterface::criticalAlarmHigh())
+        {
+            CriticalInterface::criticalAlarmHigh(true);
+            log<level::ERR>("ASSERT: Virtual Sensor has exceeded "
+                            "critical high threshold",
+                            entry("NAME = %s", name.c_str()));
+        }
+        return;
+    }
+
+    if (CriticalInterface::criticalAlarmHigh())
+    {
+        CriticalInterface::criticalAlarmHigh(false);
+        log<level::INFO>("DEASSERT: Virtual Sensor is under "
+                         "critical high threshold",
+                         entry("NAME = %s", name.c_str()));
+    }
+
+    if (value > warningHigh)
+    {
+        if (!WarningInterface::warningAlarmHigh())
+        {
+            WarningInterface::warningAlarmHigh(true);
+            log<level::ERR>("ASSERT: Virtual Sensor has exceeded "
+                            "warning high threshold",
+                            entry("NAME = %s", name.c_str()));
+        }
+        return;
+    }
+
+    if (WarningInterface::warningAlarmHigh())
+    {
+        WarningInterface::warningAlarmHigh(false);
+        log<level::INFO>("DEASSERT: Virtual Sensor is under "
+                         "warning high threshold",
+                         entry("NAME = %s", name.c_str()));
+    }
+
+    if (value < criticalLow)
+    {
+        if (!CriticalInterface::criticalAlarmLow())
+        {
+            CriticalInterface::criticalAlarmLow(true);
+            log<level::ERR>("ASSERT: Virtual Sensor is under "
+                            "critical low threshold",
+                            entry("NAME = %s", name.c_str()));
+        }
+        return;
+    }
+
+    if (CriticalInterface::criticalAlarmLow())
+    {
+        CriticalInterface::criticalAlarmLow(false);
+        log<level::ERR>("DEASSERT: Virtual Sensor is above "
+                        "critical low threshold",
+                        entry("NAME = %s", name.c_str()));
+    }
+
+    if (value < warningLow)
+    {
+        if (!WarningInterface::warningAlarmLow())
+        {
+            WarningInterface::warningAlarmLow(true);
+            log<level::ERR>("ASSERT: Virtual Sensor is under "
+                            "warning low threshold",
+                            entry("NAME = %s", name.c_str()));
+        }
+        return;
+    }
+
+    if (WarningInterface::warningAlarmLow())
+    {
+        WarningInterface::warningAlarmLow(false);
+        log<level::ERR>("DEASSERT: Virtual Sensor is above "
+                        "warning low threshold",
+                        entry("NAME = %s", name.c_str()));
+    }
+}
+
 void VirtualSensor::updateVirtualSensor()
 {
     for (auto& param : paramMap)
@@ -193,9 +281,15 @@
         }
     }
     double val = expression.value();
+
+    /* Set sensor value to dbus interface */
     setSensorValue(val);
+
     if (DEBUG)
         std::cout << "Sensor value is " << val << "\n";
+
+    /* Check sensor threshold and log required message */
+    checkSensorThreshold(val);
 }
 
 /** @brief Parsing Virtual Sensor config JSON file  */
@@ -243,8 +337,8 @@
                 std::string objPath(sensorDbusPath);
                 objPath += sensorType + "/" + name;
 
-                auto virtualSensorPtr =
-                    std::make_unique<VirtualSensor>(bus, objPath.c_str(), j);
+                auto virtualSensorPtr = std::make_unique<VirtualSensor>(
+                    bus, objPath.c_str(), j, name);
 
                 log<level::INFO>("Added a new virtual sensor",
                                  entry("NAME = %s", name.c_str()));
diff --git a/virtualSensor.hpp b/virtualSensor.hpp
index 4f9de19..e39f8d9 100644
--- a/virtualSensor.hpp
+++ b/virtualSensor.hpp
@@ -80,9 +80,9 @@
      * @param[in] sensorConfig - Json object for sensor config
      */
     VirtualSensor(sdbusplus::bus::bus& bus, const char* objPath,
-                  const Json& sensorConfig) :
+                  const Json& sensorConfig, const std::string& name) :
         sensorIfaces(bus, objPath),
-        bus(bus)
+        bus(bus), name(name)
     {
         initVirtualSensor(sensorConfig);
     }
@@ -108,6 +108,8 @@
   private:
     /** @brief sdbusplus bus client connection. */
     sdbusplus::bus::bus& bus;
+    /** @brief name of sensor */
+    std::string name;
     /** @brief Expression string for virtual sensor value calculations */
     std::string exprStr;
     /** @brief symbol table from exprtk */
@@ -121,6 +123,8 @@
     void initVirtualSensor(const Json& sensorConfig);
     /** @brief Set Sensor Threshold to D-bus at beginning */
     void setSensorThreshold(Threshold& sensorThreshold);
+    /** @brief Check Sensor threshold and update alarm and log */
+    void checkSensorThreshold(const double value);
 };
 
 class VirtualSensors
