diff --git a/CMakeLists.txt b/CMakeLists.txt
index cbbb23b..a0f428c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,15 +19,28 @@
     OFF
 )
 
+option (
+    SEL_LOGGER_SEND_TO_LOGGING_SERVICE
+    "Make SEL Logger to send sel to logging service instead of journal"
+    OFF
+)
+
 target_compile_definitions (
     sel-logger PRIVATE
     $<$<BOOL:${SEL_LOGGER_MONITOR_THRESHOLD_EVENTS}>: -DSEL_LOGGER_MONITOR_THRESHOLD_EVENTS>
     $<$<BOOL:${REDFISH_LOG_MONITOR_PULSE_EVENTS}>: -DREDFISH_LOG_MONITOR_PULSE_EVENTS>
+    $<$<BOOL:${SEL_LOGGER_SEND_TO_LOGGING_SERVICE}>: -DSEL_LOGGER_SEND_TO_LOGGING_SERVICE>
 )
 
 target_include_directories (sel-logger PRIVATE ${CMAKE_SOURCE_DIR})
 
-target_link_libraries (sel-logger systemd sdbusplus pthread phosphor_logging -lstdc++fs)
+set(LINK_LIBS systemd sdbusplus pthread phosphor_logging -lstdc++fs)
+
+if (SEL_LOGGER_SEND_TO_LOGGING_SERVICE)
+    list(APPEND LINK_LIBS phosphor_dbus)
+endif()
+
+target_link_libraries (sel-logger ${LINK_LIBS})
 
 include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
 
diff --git a/src/sel_logger.cpp b/src/sel_logger.cpp
index 5f330e0..7fb19ef 100644
--- a/src/sel_logger.cpp
+++ b/src/sel_logger.cpp
@@ -30,6 +30,17 @@
 #include <iostream>
 #include <sstream>
 
+#ifdef SEL_LOGGER_SEND_TO_LOGGING_SERVICE
+#include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/elog.hpp>
+#include <phosphor-logging/log.hpp>
+#include <xyz/openbmc_project/Logging/SEL/error.hpp>
+
+using namespace phosphor::logging;
+using SELCreated =
+    sdbusplus::xyz::openbmc_project::Logging::SEL::Error::Created;
+#endif
+
 struct DBusInternalError final : public sdbusplus::exception_t
 {
     const char* name() const noexcept override
@@ -47,6 +58,7 @@
     };
 };
 
+#ifndef SEL_LOGGER_SEND_TO_LOGGING_SERVICE
 static bool getSELLogFiles(std::vector<std::filesystem::path>& selLogFiles)
 {
     // Loop through the directory looking for ipmi_sel log files
@@ -115,6 +127,7 @@
     }
     return recordId;
 }
+#endif
 
 static void toHexStr(const std::vector<uint8_t>& data, std::string& hexStr)
 {
@@ -141,6 +154,14 @@
     std::string selDataStr;
     toHexStr(selData, selDataStr);
 
+#ifdef SEL_LOGGER_SEND_TO_LOGGING_SERVICE
+    using namespace xyz::openbmc_project::Logging::SEL;
+    report<SELCreated>(
+        Created::RECORD_TYPE(selSystemType), Created::GENERATOR_ID(genId),
+        Created::SENSOR_DATA(selDataStr.c_str()), Created::EVENT_DIR(assert),
+        Created::SENSOR_PATH(path.c_str()));
+    return 0;
+#else
     unsigned int recordId = getNewRecordId();
     sd_journal_send("MESSAGE=%s", message.c_str(), "PRIORITY=%i", selPriority,
                     "MESSAGE_ID=%s", selMessageId, "IPMI_SEL_RECORD_ID=%d",
@@ -150,6 +171,7 @@
                     "IPMI_SEL_EVENT_DIR=%x", assert, "IPMI_SEL_DATA=%s",
                     selDataStr.c_str(), std::forward<T>(metadata)..., NULL);
     return recordId;
+#endif
 }
 
 static uint16_t selAddOemRecord(const std::string& message,
@@ -164,12 +186,21 @@
     std::string selDataStr;
     toHexStr(selData, selDataStr);
 
+#ifdef SEL_LOGGER_SEND_TO_LOGGING_SERVICE
+    using namespace xyz::openbmc_project::Logging::SEL;
+    report<SELCreated>(Created::RECORD_TYPE(recordType),
+                       Created::GENERATOR_ID(0),
+                       Created::SENSOR_DATA(selDataStr.c_str()),
+                       Created::EVENT_DIR(0), Created::SENSOR_PATH(""));
+    return 0;
+#else
     unsigned int recordId = getNewRecordId();
     sd_journal_send("MESSAGE=%s", message.c_str(), "PRIORITY=%i", selPriority,
                     "MESSAGE_ID=%s", selMessageId, "IPMI_SEL_RECORD_ID=%d",
                     recordId, "IPMI_SEL_RECORD_TYPE=%x", recordType,
                     "IPMI_SEL_DATA=%s", selDataStr.c_str(), NULL);
     return recordId;
+#endif
 }
 
 int main(int argc, char* argv[])
