PLDM: Implementing Phosphor-Logging/LG2 logging
This commit adds changes in PLDM for implementing
structured LG2 logging, thereby moving away from
std::cout/cerr practice of logging which are
output streams and not logging mechanism.
PLDM now can make use of lg2 features like accurate
CODE LINE Number and CODE_FUNCTION Name and better
detailing in json object values which can be used in
log tracking.
More detailed logging change:
https://gist.github.com/riyadixitagra/c251685c1ba84248181891f7bc282395
Tested:
Ran a power off, on, cycle, and reset-reload.
Change-Id: I0485035f15f278c3fd172f0581b053c1c37f3a5b
Signed-off-by: Riya Dixit <riyadixitagra@gmail.com>
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index 081a92e..d171173 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -8,6 +8,10 @@
#include <libpldm/entity_oem_ibm.h>
#include <libpldm/pldm.h>
+#include <phosphor-logging/lg2.hpp>
+
+PHOSPHOR_LOG2_USING;
+
using namespace pldm::pdr;
using namespace pldm::utils;
@@ -163,8 +167,9 @@
reinterpret_cast<pldm_state_effecter_pdr*>(entry.data());
if (!pdr)
{
- std::cerr << "Failed to get record by PDR type, ERROR:"
- << PLDM_PLATFORM_INVALID_EFFECTER_ID << std::endl;
+ error("Failed to get record by PDR type, ERROR:{ERR_CODE}", "ERR_CODE",
+ lg2::hex,
+ static_cast<unsigned>(PLDM_PLATFORM_INVALID_EFFECTER_ID));
return;
}
pdr->hdr.record_handle = 0;
@@ -214,8 +219,8 @@
reinterpret_cast<pldm_state_sensor_pdr*>(entry.data());
if (!pdr)
{
- std::cerr << "Failed to get record by PDR type, ERROR:"
- << PLDM_PLATFORM_INVALID_SENSOR_ID << std::endl;
+ error("Failed to get record by PDR type, ERROR:{ERR_CODE}", "ERR_CODE",
+ lg2::hex, static_cast<unsigned>(PLDM_PLATFORM_INVALID_SENSOR_ID));
return;
}
pdr->hdr.record_handle = 0;
@@ -307,27 +312,27 @@
}
std::cout << tempStream.str() << std::endl;
}
- auto oemPlatformEventMessageResponseHandler =
- [](mctp_eid_t /*eid*/, const pldm_msg* response, size_t respMsgLen) {
- uint8_t completionCode{};
- uint8_t status{};
- auto rc = decode_platform_event_message_resp(
- response, respMsgLen, &completionCode, &status);
- if (rc || completionCode)
- {
- std::cerr << "Failed to decode_platform_event_message_resp: "
- << " for code update event rc=" << rc
- << ", cc=" << static_cast<unsigned>(completionCode)
- << std::endl;
- }
- };
+ auto oemPlatformEventMessageResponseHandler = [](mctp_eid_t /*eid*/,
+ const pldm_msg* response,
+ size_t respMsgLen) {
+ uint8_t completionCode{};
+ uint8_t status{};
+ auto rc = decode_platform_event_message_resp(response, respMsgLen,
+ &completionCode, &status);
+ if (rc || completionCode)
+ {
+ error(
+ "Failed to decode_platform_event_message_resp: for code update event rc={RC}, cc={CC}",
+ "RC", rc, "CC", static_cast<unsigned>(completionCode));
+ }
+ };
auto rc = handler->registerRequest(
mctp_eid, instanceId, PLDM_PLATFORM, PLDM_PLATFORM_EVENT_MESSAGE,
std::move(requestMsg),
std::move(oemPlatformEventMessageResponseHandler));
if (rc)
{
- std::cerr << "Failed to send BIOS attribute change event message \n";
+ error("Failed to send BIOS attribute change event message ");
}
return rc;
@@ -372,16 +377,14 @@
instanceId);
if (rc != PLDM_SUCCESS)
{
- std::cerr << "Failed to encode state sensor event, rc = " << rc
- << std::endl;
+ error("Failed to encode state sensor event, rc = {RC}", "RC", rc);
requester.markFree(mctp_eid, instanceId);
return;
}
rc = sendEventToHost(requestMsg, instanceId);
if (rc != PLDM_SUCCESS)
{
- std::cerr << "Failed to send event to host: "
- << "rc=" << rc << std::endl;
+ error("Failed to send event to host: rc={RC}", "RC", rc);
}
return;
}
@@ -409,7 +412,7 @@
auto rc = codeUpdate->setRequestedApplyTime();
if (rc != PLDM_SUCCESS)
{
- std::cerr << "setRequestedApplyTime failed \n";
+ error("setRequestedApplyTime failed");
state = CodeUpdateState::FAIL;
}
auto sensorId = codeUpdate->getFirmwareUpdateSensor();
@@ -431,9 +434,9 @@
}
catch (const std::exception& e)
{
- std::cerr << "Chassis State transition to Off failed,"
- << "unable to set property RequestedPowerTransition"
- << "ERROR=" << e.what() << "\n";
+ error(
+ "Chassis State transition to Off failed, unable to set property RequestedPowerTransition ERROR={ERR_EXCEP}",
+ "ERR_EXCEP", e.what());
}
using namespace sdbusplus::bus::match::rules;
@@ -466,9 +469,9 @@
}
catch (const std::exception& e)
{
- std::cerr << "Setting one-time restore policy failed,"
- << "unable to set property PowerRestorePolicy"
- << "ERROR=" << e.what() << "\n";
+ error(
+ "Setting one-time restore policy failed, unable to set property PowerRestorePolicy ERROR={ERR_EXCEP}",
+ "ERR_EXCEP", e.what());
}
dbusMapping = pldm::utils::DBusMapping{
"/xyz/openbmc_project/state/bmc0",
@@ -481,10 +484,9 @@
}
catch (const std::exception& e)
{
- std::cerr << "BMC state transition to reboot failed,"
- << "unable to set property "
- "RequestedBMCTransition"
- << "ERROR=" << e.what() << "\n";
+ error(
+ "BMC state transition to reboot failed, unable to set property RequestedBMCTransition ERROR={ERR_EXCEP}",
+ "ERR_EXCEP", e.what());
}
}
}
@@ -546,8 +548,8 @@
}
catch (const std::exception& e)
{
- std::cerr << "Failed To reset watchdog timer"
- << "ERROR=" << e.what() << std::endl;
+ error("Failed To reset watchdog timer ERROR={ERR_EXCEP}", "ERR_EXCEP",
+ e.what());
return;
}
}
@@ -570,8 +572,8 @@
}
catch (const std::exception& e)
{
- std::cerr << "Failed To disable watchdog timer"
- << "ERROR=" << e.what() << "\n";
+ error("Failed To disable watchdog timer ERROR={ERR_EXCEP}", "ERR_EXCEP",
+ e.what());
}
}
int pldm::responder::oem_ibm_platform::Handler::checkBMCState()
@@ -586,14 +588,13 @@
if (std::get<std::string>(propertyValue) ==
"xyz.openbmc_project.State.BMC.BMCState.NotReady")
{
- std::cerr << "GetPDR : PLDM stack is not ready for PDR exchange"
- << std::endl;
+ error("GetPDR : PLDM stack is not ready for PDR exchange");
return PLDM_ERROR_NOT_READY;
}
}
catch (const std::exception& e)
{
- std::cerr << "Error getting the current BMC state" << std::endl;
+ error("Error getting the current BMC state");
return PLDM_ERROR;
}
return PLDM_SUCCESS;