1 #include "cetlib/PluginTypeDeducer.h"
2 #include "fhiclcpp/ParameterSet.h"
3 #if MESSAGEFACILITY_HEX_VERSION >= 0x20106 // v2_01_06 => cetlib v3_02_00 => new clang support
4 #include "cetlib/ProvideMakePluginMacros.h"
7 #include "messagefacility/MessageService/ELdestination.h"
8 #include "messagefacility/Utilities/ELseverityLevel.h"
9 #include "messagefacility/Utilities/exception.h"
10 #include "cetlib/compiler_macros.h"
12 #define TRACE_NAME "MessageFacility"
14 #if GCC_VERSION >= 701000 || defined(__clang__)
15 #pragma GCC diagnostic push
16 #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
21 #if GCC_VERSION >= 701000 || defined(__clang__)
22 #pragma GCC diagnostic pop
28 using mf::service::ELdestination;
29 using mf::ELseverityLevel;
38 #if MESSAGEFACILITY_HEX_VERSION >= 0x20103
41 fhicl::TableFragment<ELdestination::Config> elDestConfig;
42 fhicl::Atom<size_t> lvls{ fhicl::Name{
"lvls" },fhicl::Comment{
"TRACE level mask for Slow output" },0 };
43 fhicl::Atom<size_t> lvlm{ fhicl::Name{
"lvlm" },fhicl::Comment{
"TRACE level mask for Memory output" },0 };
45 using Parameters = fhicl::WrappedTable<Config>;
50 #if MESSAGEFACILITY_HEX_VERSION < 0x20103 // v2_01_03 is s58, pre v2_01_03 is s50
51 ELTRACE(
const fhicl::ParameterSet& pset);
53 ELTRACE(Parameters
const& pset);
56 virtual void fillPrefix(std::ostringstream&,
const ErrorObj&)
override;
58 virtual void fillUsrMsg(std::ostringstream&,
const ErrorObj&)
override;
60 virtual void fillSuffix(std::ostringstream&,
const ErrorObj&)
override {}
62 virtual void routePayload(
const std::ostringstream&,
const ErrorObj&)
override;
74 #if MESSAGEFACILITY_HEX_VERSION < 0x20103
75 ELTRACE::ELTRACE(
const fhicl::ParameterSet& pset)
80 if (pset.get_if_present<
size_t>(
"lvls", msk))
81 TRACE_CNTL(
"lvlmskS", msk);
83 if (pset.get_if_present<
size_t>(
"lvlm", msk))
84 TRACE_CNTL(
"lvlmskM", msk);
86 TLOG(TLVL_INFO) <<
"ELTRACE MessageLogger destination plugin initialized.";
89 ELTRACE::ELTRACE(Parameters
const& pset)
90 : ELdestination(pset().elDestConfig())
94 if (pset().lvls() != 0)
97 TRACE_CNTL(
"lvlmskS", msk);
99 if (pset().lvlm() != 0)
102 TRACE_CNTL(
"lvlmskM", msk);
105 TLOG(TLVL_INFO) <<
"ELTRACE MessageLogger destination plugin initialized.";
113 void ELTRACE::fillPrefix(std::ostringstream& oss,
const ErrorObj& msg)
115 const auto& xid = msg.xid();
117 oss << xid.application() <<
", ";
118 oss << xid.id() <<
": ";
126 void ELTRACE::fillUsrMsg(std::ostringstream& oss,
const ErrorObj& msg)
128 std::ostringstream tmposs;
129 ELdestination::fillUsrMsg(tmposs, msg);
132 const std::string& usrMsg = !tmposs.str().compare(0, 1,
"\n") ? tmposs.str().erase(0, 1) : tmposs.str();
140 void ELTRACE::routePayload(
const std::ostringstream& oss,
const ErrorObj& msg)
142 const auto& xid = msg.xid();
143 auto message = oss.str();
145 auto level = xid.severity().getLevel();
150 case mf::ELseverityLevel::ELsev_success:
151 case mf::ELseverityLevel::ELsev_zeroSeverity:
152 case mf::ELseverityLevel::ELsev_unspecified:
156 case mf::ELseverityLevel::ELsev_info:
160 case mf::ELseverityLevel::ELsev_warning:
164 TRACE(lvlNum, message);
174 #ifndef EXTERN_C_FUNC_DECLARE_START
175 #define EXTERN_C_FUNC_DECLARE_START extern "C" {
178 EXTERN_C_FUNC_DECLARE_START
179 auto makePlugin(
const std::string&,
180 const fhicl::ParameterSet& pset)
182 return std::make_unique<mfplugins::ELTRACE>(pset);
186 DEFINE_BASIC_PLUGINTYPE_FUNC(mf::service::ELdestination)
Message Facility destination which logs messages to a TRACE buffer