/** * Copyright © 2021 IBM Corporation * * 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. */ #pragma once #include "error_history.hpp" #include "error_logging.hpp" #include "services.hpp" #include /** * @namespace error_logging_utils * * Contains utility functions for logging errors. */ namespace phosphor::power::regulators::error_logging_utils { /** * Logs an error based on the specified exception and any nested inner * exceptions. * * @param eptr exception pointer * @param severity severity level * @param services system services like error logging and the journal */ void logError(std::exception_ptr eptr, Entry::Level severity, Services& services); /** * Logs an error, if necessary, based on the specified exception and any nested * inner exceptions. * * Finds the error type would be logged based on the specified exception and any * nested inner exceptions. * * Checks to see if this error type has already been logged according to the * specified ErrorHistory object. * * If the error type has not been logged, an error log entry is created, and the * ErrorHistory is updated. * * If the error type has been logged, no further action is taken. * * @param eptr exception pointer * @param severity severity level * @param services system services like error logging and the journal * @param history error logging history */ void logError(std::exception_ptr eptr, Entry::Level severity, Services& services, ErrorHistory& history); /* * Internal implementation details */ namespace internal { /** * Returns the exception to use when logging an error. * * Inspects the specified exception and any nested inner exceptions. Returns * the highest priority exception from an error logging perspective. * * @param eptr exception pointer * @return exception to log */ std::exception_ptr getExceptionToLog(std::exception_ptr eptr); } // namespace internal } // namespace phosphor::power::regulators::error_logging_utils