|
| 1 | +#include <fairmq/FairMQLogger.h> |
| 2 | +#include <InfoLogger/InfoLogger.hxx> |
| 3 | + |
| 4 | + |
| 5 | +// This function setup a custom sink for FMQ logs so that they are redirected to infoLogger |
| 6 | +// The infologger context is set when invoked. Corresponding fields are fixed afterwards. |
| 7 | +void setFMQLogsToInfoLogger(AliceO2::InfoLogger::InfoLogger *logPtr=nullptr) { |
| 8 | + |
| 9 | + static AliceO2::InfoLogger::InfoLoggerContext ctx; |
| 10 | + // set facility = FMQ? better to add dedicated "module" field |
| 11 | + //ctx.setField(AliceO2::InfoLogger::InfoLoggerContext::FieldName::Facility,"FMQ"); |
| 12 | + |
| 13 | + static AliceO2::InfoLogger::InfoLogger *theLogPtr=logPtr; |
| 14 | + if (logPtr==nullptr) { |
| 15 | + static AliceO2::InfoLogger::InfoLogger theLog; |
| 16 | + logPtr=&theLog; |
| 17 | + } |
| 18 | + |
| 19 | + fair::Logger::SetConsoleSeverity(fair::Severity::nolog); |
| 20 | + |
| 21 | + fair::Logger::AddCustomSink( |
| 22 | + "infoLogger", "trace", [&](const std::string& content, const fair::LogMetaData& metadata) |
| 23 | + { |
| 24 | + |
| 25 | + // todo: update context from time to time? |
| 26 | + // ctx.refresh(); |
| 27 | + |
| 28 | + // translate FMQ metadata |
| 29 | + AliceO2::InfoLogger::InfoLogger::InfoLogger::Severity severity=AliceO2::InfoLogger::InfoLogger::Severity::Undefined; |
| 30 | + int level=AliceO2::InfoLogger::InfoLogger::undefinedMessageOption.level; |
| 31 | + |
| 32 | + if (metadata.severity_name== fair::Logger::SeverityName(fair::Severity::nolog)) { |
| 33 | + // discard |
| 34 | + return; |
| 35 | + } |
| 36 | + else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::fatal)) { |
| 37 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Fatal; |
| 38 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::error)) { |
| 39 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Error; |
| 40 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::warn)) { |
| 41 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Warning; |
| 42 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::state)) { |
| 43 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Info; |
| 44 | + level=10; |
| 45 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::info)) { |
| 46 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Info; |
| 47 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::debug)) { |
| 48 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Debug; |
| 49 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::debug1)) { |
| 50 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Debug; |
| 51 | + level=10; |
| 52 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::debug2)) { |
| 53 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Debug; |
| 54 | + level=20; |
| 55 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::debug3)) { |
| 56 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Debug; |
| 57 | + level=30; |
| 58 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::debug4)) { |
| 59 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Debug; |
| 60 | + level=40; |
| 61 | + } else if (metadata.severity_name==fair::Logger::SeverityName(fair::Severity::trace)) { |
| 62 | + severity=AliceO2::InfoLogger::InfoLogger::Severity::Debug; |
| 63 | + level=50; |
| 64 | + } |
| 65 | + |
| 66 | + AliceO2::InfoLogger::InfoLogger::InfoLoggerMessageOption opt={ |
| 67 | + severity, |
| 68 | + level, |
| 69 | + AliceO2::InfoLogger::InfoLogger::undefinedMessageOption.errorCode, |
| 70 | + metadata.file.c_str(), |
| 71 | + atoi(metadata.line.c_str()) |
| 72 | + }; |
| 73 | + theLogPtr->log(opt,ctx,"FMQ: %s",content.c_str()); |
| 74 | + } |
| 75 | + ); |
| 76 | +} |
0 commit comments