diff --git a/Framework/basic.json b/Framework/basic.json index 4f39165c26..f53c1bece3 100644 --- a/Framework/basic.json +++ b/Framework/basic.json @@ -26,9 +26,9 @@ "url": "ccdb-test.cern.ch:8080" }, "infologger": { "": "Configuration of the Infologger (optional).", - "filterDiscardDebug": "true", "": "Set to true to discard debug and trace messages (default: false)", + "filterDiscardDebug": "false", "": "Set to true to discard debug and trace messages (default: false)", "filterDiscardLevel": "11", "": "Message at this level or above are discarded (default: 21 - Trace)", - "filterDiscardFile": "/tmp/new-test.txt", "": ["If set, the messages discarded because of filterDiscardLevel", + "filterDiscardFile": "/tmp/_ID_.txt", "": ["If set, the messages discarded because of filterDiscardLevel", "will go to this file (default: ); The keyword _ID_ is replaced by the device id. Discarded Debug ", "messages won't go there."] } diff --git a/Framework/include/QualityControl/AggregatorRunnerConfig.h b/Framework/include/QualityControl/AggregatorRunnerConfig.h index e806eee744..60a3f5049a 100644 --- a/Framework/include/QualityControl/AggregatorRunnerConfig.h +++ b/Framework/include/QualityControl/AggregatorRunnerConfig.h @@ -21,6 +21,7 @@ #include #include #include "QualityControl/Activity.h" +#include "QualityControl/QcInfoLogger.h" namespace o2::quality_control::checker { @@ -29,9 +30,7 @@ struct AggregatorRunnerConfig { std::unordered_map database; std::string consulUrl{}; std::string monitoringUrl{}; - bool infologgerFilterDiscardDebug = false; - int infologgerDiscardLevel = 21; - std::string infologgerDiscardFile{}; + core::DiscardFileParameters infologgerDiscardParameters; core::Activity fallbackActivity; framework::Options options{}; }; diff --git a/Framework/include/QualityControl/CheckRunnerConfig.h b/Framework/include/QualityControl/CheckRunnerConfig.h index b38d593e91..526dd9a1a0 100644 --- a/Framework/include/QualityControl/CheckRunnerConfig.h +++ b/Framework/include/QualityControl/CheckRunnerConfig.h @@ -20,6 +20,7 @@ #include #include "QualityControl/Activity.h" +#include "QualityControl/QcInfoLogger.h" namespace o2::quality_control::checker { @@ -28,9 +29,7 @@ struct CheckRunnerConfig { std::unordered_map database; std::string consulUrl{}; std::string monitoringUrl{}; - bool infologgerFilterDiscardDebug = false; - int infologgerDiscardLevel = 21; - std::string infologgerDiscardFile{}; + core::DiscardFileParameters infologgerDiscardParameters; core::Activity fallbackActivity; framework::Options options{}; }; diff --git a/Framework/include/QualityControl/CommonSpec.h b/Framework/include/QualityControl/CommonSpec.h index 62dfa9b6c6..f01af44b3b 100644 --- a/Framework/include/QualityControl/CommonSpec.h +++ b/Framework/include/QualityControl/CommonSpec.h @@ -18,6 +18,7 @@ #include #include +#include "QualityControl/QcInfoLogger.h" namespace o2::quality_control::core { @@ -36,9 +37,7 @@ struct CommonSpec { std::string monitoringUrl = "infologger:///debug?qc"; std::string consulUrl; std::string conditionDBUrl = "http://ccdb-test.cern.ch:8080"; - bool infologgerFilterDiscardDebug = false; - int infologgerDiscardLevel = 21; - std::string infologgerDiscardFile; + DiscardFileParameters infologgerDiscardParameters; double postprocessingPeriod = 10.0; }; diff --git a/Framework/include/QualityControl/PostProcessingRunnerConfig.h b/Framework/include/QualityControl/PostProcessingRunnerConfig.h index 8bb6fb8391..6ccd4a6014 100644 --- a/Framework/include/QualityControl/PostProcessingRunnerConfig.h +++ b/Framework/include/QualityControl/PostProcessingRunnerConfig.h @@ -20,6 +20,7 @@ #include #include #include +#include "QualityControl/QcInfoLogger.h" namespace o2::quality_control::postprocessing { @@ -28,9 +29,7 @@ struct PostProcessingRunnerConfig { std::string taskName; std::unordered_map database; std::string consulUrl{}; - bool infologgerFilterDiscardDebug = false; - int infologgerDiscardLevel = 21; - std::string infologgerDiscardFile{}; + core::DiscardFileParameters infologgerDiscardParameters; double periodSeconds = 10.0; std::string configKeyValues; // These are for ConfigurableParams, not for override-values! boost::property_tree::ptree configTree{}; diff --git a/Framework/include/QualityControl/QcInfoLogger.h b/Framework/include/QualityControl/QcInfoLogger.h index f2cdb1f69e..6d852c8829 100644 --- a/Framework/include/QualityControl/QcInfoLogger.h +++ b/Framework/include/QualityControl/QcInfoLogger.h @@ -27,6 +27,14 @@ typedef AliceO2::InfoLogger::InfoLoggerContext infoContext; namespace o2::quality_control::core { +struct DiscardFileParameters { + bool debug = false; + int fromLevel = 21 /* Discard Trace */; + std::string discardFile; + unsigned long rotateMaxBytes = 0; + unsigned int rotateMaxFiles = 0; +}; + /// \brief Singleton class that any class in the QC can use to log. /// /// The aim of this class is to avoid every class in the package to define @@ -59,9 +67,7 @@ class QcInfoLogger static void setRun(int run); static void setPartition(const std::string& partitionName); static void init(const std::string& facility, - bool discardDebug = false, - int discardFromLevel = 21 /* Discard Trace */, - const std::string& filterDiscardFile = "", + const DiscardFileParameters& discardFileParameters, AliceO2::InfoLogger::InfoLogger* dplInfoLogger = nullptr, AliceO2::InfoLogger::InfoLoggerContext* dplContext = nullptr, int run = -1, diff --git a/Framework/include/QualityControl/TaskRunnerConfig.h b/Framework/include/QualityControl/TaskRunnerConfig.h index ee7f781294..a67ce9315e 100644 --- a/Framework/include/QualityControl/TaskRunnerConfig.h +++ b/Framework/include/QualityControl/TaskRunnerConfig.h @@ -22,6 +22,7 @@ #include #include "QualityControl/Activity.h" +#include "QualityControl/QcInfoLogger.h" namespace o2::quality_control::core { @@ -45,9 +46,7 @@ struct TaskRunnerConfig { int parallelTaskID = 0; // ID to differentiate parallel local Tasks from one another. 0 means this is the only one. std::string saveToFile{}; int resetAfterCycles = 0; - bool infologgerFilterDiscardDebug = false; - int infologgerDiscardLevel = 21; - std::string infologgerDiscardFile{}; + core::DiscardFileParameters infologgerDiscardParameters; Activity fallbackActivity; }; diff --git a/Framework/src/AggregatorRunner.cxx b/Framework/src/AggregatorRunner.cxx index 50cc368a05..9396d4826a 100644 --- a/Framework/src/AggregatorRunner.cxx +++ b/Framework/src/AggregatorRunner.cxx @@ -310,11 +310,9 @@ void AggregatorRunner::initInfoLogger(InitContext& iCtx) ILOG(Error) << "Could not find the DPL InfoLogger." << ENDM; } - mRunnerConfig.infologgerDiscardFile = templateILDiscardFile(mRunnerConfig.infologgerDiscardFile, iCtx); + mRunnerConfig.infologgerDiscardParameters.discardFile = templateILDiscardFile(mRunnerConfig.infologgerDiscardParameters.discardFile, iCtx); QcInfoLogger::init("aggregator", - mRunnerConfig.infologgerFilterDiscardDebug, - mRunnerConfig.infologgerDiscardLevel, - mRunnerConfig.infologgerDiscardFile, + mRunnerConfig.infologgerDiscardParameters, il, ilContext); } diff --git a/Framework/src/AggregatorRunnerFactory.cxx b/Framework/src/AggregatorRunnerFactory.cxx index 2512d18f8d..7662f65c1c 100644 --- a/Framework/src/AggregatorRunnerFactory.cxx +++ b/Framework/src/AggregatorRunnerFactory.cxx @@ -84,9 +84,7 @@ AggregatorRunnerConfig AggregatorRunnerFactory::extractRunnerConfig(const core:: commonSpec.database, commonSpec.consulUrl, commonSpec.monitoringUrl, - commonSpec.infologgerFilterDiscardDebug, - commonSpec.infologgerDiscardLevel, - commonSpec.infologgerDiscardFile, + commonSpec.infologgerDiscardParameters, fallbackActivity, options }; diff --git a/Framework/src/CheckRunner.cxx b/Framework/src/CheckRunner.cxx index 3d4011ff3a..31bd3a1acb 100644 --- a/Framework/src/CheckRunner.cxx +++ b/Framework/src/CheckRunner.cxx @@ -488,11 +488,9 @@ void CheckRunner::initInfologger(framework::InitContext& iCtx) ILOG(Error) << "Could not find the DPL InfoLogger." << ENDM; } - mConfig.infologgerDiscardFile = templateILDiscardFile(mConfig.infologgerDiscardFile, iCtx); + mConfig.infologgerDiscardParameters.discardFile = templateILDiscardFile(mConfig.infologgerDiscardParameters.discardFile, iCtx); QcInfoLogger::init(createCheckRunnerFacility(mDeviceName), - mConfig.infologgerFilterDiscardDebug, - mConfig.infologgerDiscardLevel, - mConfig.infologgerDiscardFile, + mConfig.infologgerDiscardParameters, il, ilContext); } diff --git a/Framework/src/CheckRunnerFactory.cxx b/Framework/src/CheckRunnerFactory.cxx index f4a6dfb18c..476c263616 100644 --- a/Framework/src/CheckRunnerFactory.cxx +++ b/Framework/src/CheckRunnerFactory.cxx @@ -94,9 +94,7 @@ CheckRunnerConfig CheckRunnerFactory::extractConfig(const CommonSpec& commonSpec commonSpec.database, commonSpec.consulUrl, commonSpec.monitoringUrl, - commonSpec.infologgerFilterDiscardDebug, - commonSpec.infologgerDiscardLevel, - commonSpec.infologgerDiscardFile, + commonSpec.infologgerDiscardParameters, fallbackActivity, options }; diff --git a/Framework/src/InfrastructureSpecReader.cxx b/Framework/src/InfrastructureSpecReader.cxx index 326f483ab3..0a66b91304 100644 --- a/Framework/src/InfrastructureSpecReader.cxx +++ b/Framework/src/InfrastructureSpecReader.cxx @@ -67,9 +67,13 @@ CommonSpec InfrastructureSpecReader::readSpecEntry(std::string, cons spec.monitoringUrl = commonTree.get("monitoring.url", spec.monitoringUrl); spec.consulUrl = commonTree.get("consul.url", spec.consulUrl); spec.conditionDBUrl = commonTree.get("conditionDB.url", spec.conditionDBUrl); - spec.infologgerFilterDiscardDebug = commonTree.get("infologger.filterDiscardDebug", spec.infologgerFilterDiscardDebug); - spec.infologgerDiscardLevel = commonTree.get("infologger.filterDiscardLevel", spec.infologgerDiscardLevel); - spec.infologgerDiscardFile = commonTree.get("infologger.filterDiscardFile", spec.infologgerDiscardFile); + spec.infologgerDiscardParameters = { + commonTree.get("infologger.filterDiscardDebug", spec.infologgerDiscardParameters.debug), + commonTree.get("infologger.filterDiscardLevel", spec.infologgerDiscardParameters.fromLevel), + commonTree.get("infologger.filterDiscardFile", spec.infologgerDiscardParameters.discardFile), + commonTree.get("infologger.filterRotateMaxBytes", spec.infologgerDiscardParameters.rotateMaxBytes), + commonTree.get("infologger.filterRotateMaxFiles", spec.infologgerDiscardParameters.rotateMaxFiles) + }; spec.postprocessingPeriod = commonTree.get("postprocessing.periodSeconds", spec.postprocessingPeriod); return spec; diff --git a/Framework/src/PostProcessingRunner.cxx b/Framework/src/PostProcessingRunner.cxx index 042130d0e6..493c1a9e77 100644 --- a/Framework/src/PostProcessingRunner.cxx +++ b/Framework/src/PostProcessingRunner.cxx @@ -68,7 +68,7 @@ void PostProcessingRunner::init(const PostProcessingRunnerConfig& runnerConfig, mRunnerConfig = runnerConfig; mTaskConfig = taskConfig; - QcInfoLogger::init("post/" + mName, runnerConfig.infologgerFilterDiscardDebug, runnerConfig.infologgerDiscardLevel, runnerConfig.infologgerDiscardFile); + QcInfoLogger::init("post/" + mName, mRunnerConfig.infologgerDiscardParameters); ILOG(Info, Support) << "Initializing PostProcessingRunner" << ENDM; root_class_factory::loadLibrary(mTaskConfig.moduleName); @@ -251,9 +251,7 @@ PostProcessingRunnerConfig PostProcessingRunner::extractConfig(const CommonSpec& ppTaskSpec.taskName, commonSpec.database, commonSpec.consulUrl, - commonSpec.infologgerFilterDiscardDebug, - commonSpec.infologgerDiscardLevel, - commonSpec.infologgerDiscardFile, + commonSpec.infologgerDiscardParameters, commonSpec.postprocessingPeriod, "", ppTaskSpec.tree diff --git a/Framework/src/QcInfoLogger.cxx b/Framework/src/QcInfoLogger.cxx index 943146d62a..e4a0dec4f4 100644 --- a/Framework/src/QcInfoLogger.cxx +++ b/Framework/src/QcInfoLogger.cxx @@ -60,9 +60,7 @@ void QcInfoLogger::setPartition(const std::string& partitionName) } void QcInfoLogger::init(const std::string& facility, - bool discardDebug, - int discardFromLevel, - const std::string& discardToFile, + const DiscardFileParameters& discardFileParameters, AliceO2::InfoLogger::InfoLogger* dplInfoLogger, AliceO2::InfoLogger::InfoLoggerContext* dplContext, int run, @@ -75,15 +73,16 @@ void QcInfoLogger::init(const std::string& facility, } // Set the proper discard filters - ILOG_INST.filterDiscardDebug(discardDebug); - ILOG_INST.filterDiscardLevel(discardFromLevel); - if (!discardToFile.empty()) { - ILOG_INST.filterDiscardSetFile(discardToFile.c_str(), 1000000000, 10, 0, true /*Do not store Debug messages in file*/); + ILOG_INST.filterDiscardDebug(discardFileParameters.debug); + ILOG_INST.filterDiscardLevel(discardFileParameters.fromLevel); + if (!discardFileParameters.discardFile.empty()) { + ILOG_INST.filterDiscardSetFile(discardFileParameters.discardFile.c_str(), discardFileParameters.rotateMaxBytes, discardFileParameters.rotateMaxFiles, true /*Do not store Debug messages in file*/); } ILOG(Debug, Ops) << "QC infologger initialized" << ENDM; - ILOG(Debug, Support) << " Discard debug ? " << discardDebug << ENDM; - ILOG(Debug, Support) << " Discard from level ? " << discardFromLevel << ENDM; - ILOG(Debug, Support) << " Discard to file ? " << (!discardToFile.empty() ? discardToFile : "No") << ENDM; + ILOG(Debug, Support) << " Discard debug ? " << discardFileParameters.debug << ENDM; + ILOG(Debug, Support) << " Discard from level ? " << discardFileParameters.fromLevel << ENDM; + ILOG(Debug, Support) << " Discard to file ? " << (!discardFileParameters.discardFile.empty() ? discardFileParameters.discardFile : "No") << ENDM; + ILOG(Debug, Support) << " Discard max bytes and files ? " << discardFileParameters.rotateMaxBytes << " = " << discardFileParameters.rotateMaxFiles << ENDM; setFacility(facility); setRun(run); @@ -97,11 +96,12 @@ void QcInfoLogger::init(const std::string& facility, int run, const std::string& partitionName) { + DiscardFileParameters discardFileParameters; std::string discardDebugStr = config.get("qc.config.infologger.filterDiscardDebug", "false"); - bool discardDebug = discardDebugStr == "true"; - int discardLevel = config.get("qc.config.infologger.filterDiscardLevel", 21 /* Discard Trace */); - std::string discardToFile = config.get("qc.config.infologger.filterDiscardFile", ""); - init(facility, discardDebug, discardLevel, discardToFile, dplInfoLogger, dplContext, run, partitionName); + discardFileParameters.debug = discardDebugStr == "true"; + discardFileParameters.fromLevel = config.get("qc.config.infologger.filterDiscardLevel", 21 /* Discard Trace */); + discardFileParameters.discardFile = config.get("qc.config.infologger.filterDiscardFile", ""); + init(facility, discardFileParameters, dplInfoLogger, dplContext, run, partitionName); } } // namespace o2::quality_control::core diff --git a/Framework/src/TaskRunner.cxx b/Framework/src/TaskRunner.cxx index 93180f7ed7..f3dc00d48e 100644 --- a/Framework/src/TaskRunner.cxx +++ b/Framework/src/TaskRunner.cxx @@ -117,11 +117,9 @@ void TaskRunner::initInfologger(InitContext& iCtx) ILOG(Error, Devel) << "Could not find the DPL InfoLogger" << ENDM; } - mTaskConfig.infologgerDiscardFile = templateILDiscardFile(mTaskConfig.infologgerDiscardFile, iCtx); + mTaskConfig.infologgerDiscardParameters.discardFile = templateILDiscardFile(mTaskConfig.infologgerDiscardParameters.discardFile, iCtx); QcInfoLogger::init("task/" + mTaskConfig.taskName, - mTaskConfig.infologgerFilterDiscardDebug, - mTaskConfig.infologgerDiscardLevel, - mTaskConfig.infologgerDiscardFile, + mTaskConfig.infologgerDiscardParameters, il, ilContext); QcInfoLogger::setDetector(mTaskConfig.detectorName); diff --git a/Framework/src/TaskRunnerFactory.cxx b/Framework/src/TaskRunnerFactory.cxx index 9bf90cd7fa..a8f9a43117 100644 --- a/Framework/src/TaskRunnerFactory.cxx +++ b/Framework/src/TaskRunnerFactory.cxx @@ -111,9 +111,7 @@ TaskRunnerConfig TaskRunnerFactory::extractConfig(const CommonSpec& globalConfig parallelTaskID, taskSpec.saveObjectsToFile, resetAfterCycles.value_or(taskSpec.resetAfterCycles), - globalConfig.infologgerFilterDiscardDebug, - globalConfig.infologgerDiscardLevel, - globalConfig.infologgerDiscardFile, + globalConfig.infologgerDiscardParameters, fallbackActivity }; } diff --git a/Framework/test/testQcInfoLogger.cxx b/Framework/test/testQcInfoLogger.cxx index 80183675b0..ffe7b25103 100644 --- a/Framework/test/testQcInfoLogger.cxx +++ b/Framework/test/testQcInfoLogger.cxx @@ -92,7 +92,7 @@ BOOST_AUTO_TEST_CASE(qc_info_logger_dplil) auto dplContext = new AliceO2::InfoLogger::InfoLoggerContext(); dplContext->setField(infoContext::FieldName::Facility, "dplfacility"); dplContext->setField(infoContext::FieldName::System, "dplsystem"); - QcInfoLogger::init("facility", false, 21, "", &dplInfoLogger, dplContext); + QcInfoLogger::init("facility", { false, 21, "" }, &dplInfoLogger, dplContext); } } // namespace o2::quality_control::core diff --git a/doc/Advanced.md b/doc/Advanced.md index bdcd749440..33a810ae1a 100644 --- a/doc/Advanced.md +++ b/doc/Advanced.md @@ -935,8 +935,10 @@ should not be present in real configuration files. "filterDiscardDebug": "false", "": "Set to 1 to discard debug and trace messages (default: false)", "filterDiscardLevel": "2", "": "Message at this level or above are discarded (default: 21 - Trace)", "filterDiscardFile": "", "": ["If set, the discarded messages will go to this file (default: )", - "The keyword _ID_, if used, is replaced by the device ID.", - "Discarded Debug messages don't go there."] + "The keyword _ID_, if used, is replaced by the device ID.", + "Discarded Debug messages don't go there."], + "filterRotateMaxBytes": "", "": "Maximum size of the discard file.", + "filterRotateMaxFiles": "", "": "Maximum number of discard files." }, "postprocessing": { "": "Configuration parameters for post-processing", "periodSeconds": 10.0, "": "Sets the interval of checking all the triggers. One can put a very small value",