diff --git a/docs/doxygen/doxygen_index.md b/docs/doxygen/doxygen_index.md index 8760e35cc..23b463b80 100644 --- a/docs/doxygen/doxygen_index.md +++ b/docs/doxygen/doxygen_index.md @@ -30,7 +30,6 @@ This website provides documentation for JANA2 C++ API automatically generated by ## Internal services -* [JLoggingService](class_j_logging_service.html): Furnish the user with a logger already configured for that particular component * [JParameterManager](class_j_parameter_manager.html): Furnish the user with parameters extracted from command line flags and configuration files ## Parallelism engine diff --git a/src/examples/InteractiveStreamingExample/InteractiveStreamingExample.cc b/src/examples/InteractiveStreamingExample/InteractiveStreamingExample.cc index d9235524b..9ed2be6ed 100644 --- a/src/examples/InteractiveStreamingExample/InteractiveStreamingExample.cc +++ b/src/examples/InteractiveStreamingExample/InteractiveStreamingExample.cc @@ -18,9 +18,11 @@ void dummy_publisher_loop(JApplication* app) { + auto params = app->GetJParameterManager(); + JBenchUtils bench_utils = JBenchUtils(); size_t delay_ms = 1; - auto logger = app->GetService()->get_logger("dummy_publisher_loop"); + auto logger = params->GetLogger("dummy_publisher_loop"); bench_utils.set_seed(7, "InteractiveStreamingExample.cc:dummy_publisher_loop"); std::this_thread::yield(); @@ -71,7 +73,7 @@ extern "C" { void InitPlugin(JApplication* app) { InitJANAPlugin(app); - auto logger = app->GetService()->get_logger("streamDet"); + auto logger = app->GetJParameterManager()->GetLogger("streamDet"); app->SetParameterValue("nthreads", 4); app->SetParameterValue("jana:extended_report", true); diff --git a/src/libraries/JANA/CLI/JBenchmarker.cc b/src/libraries/JANA/CLI/JBenchmarker.cc index 6df57d73f..34a2cf2c1 100644 --- a/src/libraries/JANA/CLI/JBenchmarker.cc +++ b/src/libraries/JANA/CLI/JBenchmarker.cc @@ -5,7 +5,6 @@ #include "JBenchmarker.h" #include -#include #include #include @@ -15,10 +14,11 @@ JBenchmarker::JBenchmarker(JApplication* app) : m_app(app) { m_max_threads = JCpuInfo::GetNumCpus(); - m_logger = app->GetService()->get_logger("JBenchmarker"); auto params = app->GetJParameterManager(); + m_logger = params->GetLogger("JBenchmarker"); + params->SetParameter("jana:nevents", 0); // Prevent users' choice of nevents from interfering with everything diff --git a/src/libraries/JANA/Calibrations/JCalibrationManager.h b/src/libraries/JANA/Calibrations/JCalibrationManager.h index b5fe0e144..500494f57 100644 --- a/src/libraries/JANA/Calibrations/JCalibrationManager.h +++ b/src/libraries/JANA/Calibrations/JCalibrationManager.h @@ -7,7 +7,6 @@ #include #include -#include #include #include "JLargeCalibration.h" @@ -30,9 +29,9 @@ class JCalibrationManager : public JService { void acquire_services(JServiceLocator *service_locator) { // Configure our logger - m_logger = service_locator->get()->get_logger("JCalibrationManager"); m_params = service_locator->get(); + m_logger = m_params->GetLogger("JCalibrationManager"); // Url and context may be passed in either as environment variables // or configuration parameters. Default values are used if neither is available. diff --git a/src/libraries/JANA/Components/JOmniFactory.h b/src/libraries/JANA/Components/JOmniFactory.h index 81da2ef6f..a00629b5c 100644 --- a/src/libraries/JANA/Components/JOmniFactory.h +++ b/src/libraries/JANA/Components/JOmniFactory.h @@ -10,14 +10,12 @@ * which might be changed by user parameters. */ +#include "JANA/Services/JParameterManager.h" #include #include #include #include -#include -#include - #include #include @@ -271,8 +269,7 @@ class JOmniFactory : public JMultifactory, public jana::components::JHasInputs { } // Obtain logger - //m_logger = m_app->GetService()->logger(m_prefix); - m_logger = m_app->GetService()->get_logger(m_prefix); + m_logger = m_app->GetService()->GetLogger(m_prefix); // Configure logger. Priority = [JParameterManager, system log level] // std::string default_log_level = eicrecon::LogLevelToString(m_logger->level()); diff --git a/src/libraries/JANA/Engine/JArrowProcessingController.cc b/src/libraries/JANA/Engine/JArrowProcessingController.cc index 2d71611b5..f056aba17 100644 --- a/src/libraries/JANA/Engine/JArrowProcessingController.cc +++ b/src/libraries/JANA/Engine/JArrowProcessingController.cc @@ -2,6 +2,7 @@ // Copyright 2020, Jefferson Science Associates, LLC. // Subject to the terms in the LICENSE file found in the top-level directory. +#include "JANA/Services/JParameterManager.h" #include #include #include @@ -14,15 +15,14 @@ using millisecs = std::chrono::duration; using secs = std::chrono::duration; void JArrowProcessingController::acquire_services(JServiceLocator * sl) { - auto ls = sl->get(); - m_logger = ls->get_logger("JArrowProcessingController"); - m_worker_logger = ls->get_logger("JWorker"); - m_scheduler_logger = ls->get_logger("JScheduler"); + + auto params = sl->get(); + m_logger = params->GetLogger("JArrowProcessingController"); + m_worker_logger = params->GetLogger("JWorker"); + m_scheduler_logger = params->GetLogger("JScheduler"); m_topology = sl->get(); - // Obtain timeouts from parameter manager - auto params = sl->get(); params->SetDefaultParameter("jana:timeout", m_timeout_s, "Max time (in seconds) JANA will wait for a thread to update its heartbeat before hard-exiting. 0 to disable timeout completely."); params->SetDefaultParameter("jana:warmup_timeout", m_warmup_timeout_s, "Max time (in seconds) JANA will wait for 'initial' events to complete before hard-exiting."); // Originally "THREAD_TIMEOUT" and "THREAD_TIMEOUT_FIRST_EVENT" diff --git a/src/libraries/JANA/Engine/JScheduler.cc b/src/libraries/JANA/Engine/JScheduler.cc index 4c0786df2..ea1a659b1 100644 --- a/src/libraries/JANA/Engine/JScheduler.cc +++ b/src/libraries/JANA/Engine/JScheduler.cc @@ -7,7 +7,6 @@ #include "JScheduler.h" #include #include -#include JScheduler::JScheduler(std::shared_ptr topology) diff --git a/src/libraries/JANA/Engine/JWorker.h b/src/libraries/JANA/Engine/JWorker.h index fae64290c..3adf6b1d0 100644 --- a/src/libraries/JANA/Engine/JWorker.h +++ b/src/libraries/JANA/Engine/JWorker.h @@ -4,7 +4,6 @@ #pragma once #include -#include #include #include #include diff --git a/src/libraries/JANA/JApplication.cc b/src/libraries/JANA/JApplication.cc index dbcd2b5bb..fa84def8a 100644 --- a/src/libraries/JANA/JApplication.cc +++ b/src/libraries/JANA/JApplication.cc @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -47,7 +46,6 @@ JApplication::JApplication(JParameterManager* params) { ProvideService(m_params); ProvideService(m_component_manager); ProvideService(m_plugin_loader); - ProvideService(std::make_shared()); ProvideService(std::make_shared()); ProvideService(std::make_shared()); @@ -121,13 +119,12 @@ void JApplication::Initialize() { m_services_available = true; // We trigger initialization - auto logging_service = m_service_locator->get(); auto component_manager = m_service_locator->get(); auto plugin_loader = m_service_locator->get(); auto topology_builder = m_service_locator->get(); // Set logger on JApplication itself - m_logger = logging_service->get_logger("JApplication"); + m_logger = m_params->GetLogger("JApplication"); m_logger.show_classname = false; // Set up wiring diff --git a/src/libraries/JANA/JFactoryGenerator.h b/src/libraries/JANA/JFactoryGenerator.h index 8ac3f0ab6..e774801ee 100644 --- a/src/libraries/JANA/JFactoryGenerator.h +++ b/src/libraries/JANA/JFactoryGenerator.h @@ -60,7 +60,7 @@ class JFactoryGeneratorT : public JFactoryGenerator { factory->SetTypeName(JTypeInfo::demangle()); factory->SetPluginName(GetPluginName()); factory->SetApplication(GetApplication()); - factory->SetLogger(GetApplication()->template GetService()->get_logger(factory->GetPrefix())); + factory->SetLogger(GetApplication()->GetJParameterManager()->GetLogger(factory->GetPrefix())); factory_set->Add(factory); } }; diff --git a/src/libraries/JANA/JLogger.h b/src/libraries/JANA/JLogger.h index 189f5941e..b72f6bcae 100644 --- a/src/libraries/JANA/JLogger.h +++ b/src/libraries/JANA/JLogger.h @@ -8,6 +8,7 @@ #include #include + struct JLogger { enum class Level { TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF }; Level level; diff --git a/src/libraries/JANA/Services/JComponentManager.cc b/src/libraries/JANA/Services/JComponentManager.cc index fb050eec7..a15dcaa8f 100644 --- a/src/libraries/JANA/Services/JComponentManager.cc +++ b/src/libraries/JANA/Services/JComponentManager.cc @@ -69,11 +69,11 @@ void JComponentManager::configure_components() { void JComponentManager::preinitialize_components() { for (auto* src : m_evt_srces) { src->SetApplication(GetApplication()); - src->SetLogger(m_logging->get_logger(src->GetLoggerName())); + src->SetLogger(m_params->GetLogger(src->GetLoggerName())); } for (auto* proc : m_evt_procs) { proc->SetApplication(GetApplication()); - proc->SetLogger(m_logging->get_logger(proc->GetLoggerName())); + proc->SetLogger(m_params->GetLogger(proc->GetLoggerName())); } for (auto* fac_gen : m_fac_gens) { fac_gen->SetApplication(GetApplication()); @@ -85,7 +85,7 @@ void JComponentManager::preinitialize_components() { } for (auto* unfolder : m_unfolders) { unfolder->SetApplication(GetApplication()); - unfolder->SetLogger(m_logging->get_logger(unfolder->GetLoggerName())); + unfolder->SetLogger(m_params->GetLogger(unfolder->GetLoggerName())); } } diff --git a/src/libraries/JANA/Services/JComponentManager.h b/src/libraries/JANA/Services/JComponentManager.h index 691976999..3f6a501e7 100644 --- a/src/libraries/JANA/Services/JComponentManager.h +++ b/src/libraries/JANA/Services/JComponentManager.h @@ -56,7 +56,6 @@ class JComponentManager : public JService { private: Service m_params {this}; - Service m_logging {this}; std::string m_current_plugin_name; std::vector m_src_names; diff --git a/src/libraries/JANA/Services/JLoggingService.cc b/src/libraries/JANA/Services/JLoggingService.cc index 69645e792..dd8382e38 100644 --- a/src/libraries/JANA/Services/JLoggingService.cc +++ b/src/libraries/JANA/Services/JLoggingService.cc @@ -5,38 +5,8 @@ #include -#include -template <> -inline void JParameterManager::Parse(const std::string& in, JLogger::Level& out) { - std::string token(in); - std::transform(in.begin(), in.end(), token.begin(), ::tolower); - if (std::strcmp(token.c_str(), "trace") == 0) { - out = JLogger::Level::TRACE; - } - else if (std::strcmp(token.c_str(), "debug") == 0) { - out = JLogger::Level::DEBUG; - } - else if (std::strcmp(token.c_str(), "info") == 0) { - out = JLogger::Level::INFO; - } - else if (std::strcmp(token.c_str(), "warn") == 0) { - out = JLogger::Level::WARN; - } - else if (std::strcmp(token.c_str(), "error") == 0) { - out = JLogger::Level::ERROR; - } - else if (std::strcmp(token.c_str(), "fatal") == 0) { - out = JLogger::Level::FATAL; - } - else if (std::strcmp(token.c_str(), "off") == 0) { - out = JLogger::Level::OFF; - } - else { - throw JException("Unable to parse log level: '%s'. Options are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF", in.c_str()); - } -} void JLoggingService::acquire_services(JServiceLocator* serviceLocator) { diff --git a/src/libraries/JANA/Services/JParameterManager.cc b/src/libraries/JANA/Services/JParameterManager.cc index 805ae9490..530b823f8 100644 --- a/src/libraries/JANA/Services/JParameterManager.cc +++ b/src/libraries/JANA/Services/JParameterManager.cc @@ -17,10 +17,8 @@ using namespace std; /// @brief Default constructor JParameterManager::JParameterManager() { - // Set the logger temporarily, until the JLoggingService figures out the correct log level - m_logger.show_classname = true; - m_logger.className = "JParameterManager"; - m_logger.level = JLogger::Level::INFO; + // Set the logger temporarily + m_logger = GetLogger("JParameterManager"); } /// @brief Copy constructor diff --git a/src/libraries/JANA/Services/JParameterManager.h b/src/libraries/JANA/Services/JParameterManager.h index 95b2593bb..f7ed6ced5 100644 --- a/src/libraries/JANA/Services/JParameterManager.h +++ b/src/libraries/JANA/Services/JParameterManager.h @@ -384,6 +384,37 @@ inline void JParameterManager::Parse(const std::string& value, std::vector &v } } +/// @brief Specialization for JLogger::Level enum +template <> +inline void JParameterManager::Parse(const std::string& in, JLogger::Level& out) { + std::string token(in); + std::transform(in.begin(), in.end(), token.begin(), ::tolower); + if (std::strcmp(token.c_str(), "trace") == 0) { + out = JLogger::Level::TRACE; + } + else if (std::strcmp(token.c_str(), "debug") == 0) { + out = JLogger::Level::DEBUG; + } + else if (std::strcmp(token.c_str(), "info") == 0) { + out = JLogger::Level::INFO; + } + else if (std::strcmp(token.c_str(), "warn") == 0) { + out = JLogger::Level::WARN; + } + else if (std::strcmp(token.c_str(), "error") == 0) { + out = JLogger::Level::ERROR; + } + else if (std::strcmp(token.c_str(), "fatal") == 0) { + out = JLogger::Level::FATAL; + } + else if (std::strcmp(token.c_str(), "off") == 0) { + out = JLogger::Level::OFF; + } + else { + throw JException("Unable to parse log level: '%s'. Options are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF", in.c_str()); + } +} + #if __cplusplus >= 201703L /// @brief Basic implementation of Stringify for C++17 and newer. Provides a helpful error message when attempting to stringify a type that doesn't come with a stream operator. template diff --git a/src/libraries/JANA/Topology/JMailbox.h b/src/libraries/JANA/Topology/JMailbox.h index ef5256c14..49a5a8384 100644 --- a/src/libraries/JANA/Topology/JMailbox.h +++ b/src/libraries/JANA/Topology/JMailbox.h @@ -3,12 +3,12 @@ // Subject to the terms in the LICENSE file found in the top-level directory. #pragma once -#include -#include #include -#include #include +#include +#include + /// JMailbox is a threadsafe event queue designed for communication between Arrows. /// It is different from the standard data structure in the following ways: /// - pushes and pops return a Status enum, handling the problem of .size() always being stale diff --git a/src/libraries/JANA/Topology/JTopologyBuilder.cc b/src/libraries/JANA/Topology/JTopologyBuilder.cc index ff685575a..5c5db07ae 100644 --- a/src/libraries/JANA/Topology/JTopologyBuilder.cc +++ b/src/libraries/JANA/Topology/JTopologyBuilder.cc @@ -154,8 +154,8 @@ void JTopologyBuilder::acquire_services(JServiceLocator *sl) { "Constrain memory locality. 0=No constraint. 1=Events stay on the same socket. 2=Events stay on the same NUMA domain. 3=Events stay on same core. 4=Events stay on same cpu/hyperthread.") ->SetIsAdvanced(true); - m_arrow_logger = m_logging->get_logger("JArrow"); - m_queue_logger = m_logging->get_logger("JQueue"); + m_arrow_logger = m_params->GetLogger("JArrow"); + m_queue_logger = m_params->GetLogger("JQueue"); }; diff --git a/src/libraries/JANA/Topology/JTopologyBuilder.h b/src/libraries/JANA/Topology/JTopologyBuilder.h index a287d4631..c0ed19058 100644 --- a/src/libraries/JANA/Topology/JTopologyBuilder.h +++ b/src/libraries/JANA/Topology/JTopologyBuilder.h @@ -11,11 +11,9 @@ #include #include -#include class JParameterManager; -class JLoggingService; class JComponentManager; class JArrow; class JQueue; @@ -29,7 +27,6 @@ class JTopologyBuilder : public JService { public: // Services Service m_params {this}; - Service m_logging {this}; std::shared_ptr m_components; // The topology itself diff --git a/src/libraries/JANA/Utils/JCallGraphRecorder.h b/src/libraries/JANA/Utils/JCallGraphRecorder.h index 7fbdccc54..a17e98804 100644 --- a/src/libraries/JANA/Utils/JCallGraphRecorder.h +++ b/src/libraries/JANA/Utils/JCallGraphRecorder.h @@ -10,7 +10,6 @@ #include #include -#include // Note on tracking how/where Insert() objects came from. // diff --git a/src/libraries/JANA/Utils/JStringification.cc b/src/libraries/JANA/Utils/JStringification.cc index 364da2fd3..bf0986ab8 100644 --- a/src/libraries/JANA/Utils/JStringification.cc +++ b/src/libraries/JANA/Utils/JStringification.cc @@ -75,7 +75,7 @@ void JStringification::GetObjectSummaries(std::map } #endif }else{ - _DBG_<<"No factory found! object_name=" << object_name << std::endl; + LOG <<"No factory found! object_name=" << object_name << LOG_END; } } @@ -131,4 +131,4 @@ std::string JStringification::GetRootObjectMemberAsString(const TObject *tobj, c else if( type == "string" ) return GetAddrAsString(addr); return "unknown"; } -#endif // JANA2_HAVE_ROOT \ No newline at end of file +#endif // JANA2_HAVE_ROOT diff --git a/src/programs/perf_tests/PerfTests.cc b/src/programs/perf_tests/PerfTests.cc index 974a57731..771374e4d 100644 --- a/src/programs/perf_tests/PerfTests.cc +++ b/src/programs/perf_tests/PerfTests.cc @@ -36,7 +36,7 @@ int main() { params->SetParameter("benchmark:resultsdir", "perftest_fake_halldrecon"); JApplication app(params); - auto logger = app.GetService()->get_logger("PerfTests"); + auto logger = params->GetLogger("PerfTests"); app.AddPlugin("JTest"); LOG_INFO(logger) << "Running JTest tuned to imitate halld_recon" << LOG_END; @@ -75,7 +75,7 @@ int main() { params->SetParameter("benchmark:resultsdir", "perftest_pure_overhead"); JApplication app(params); - auto logger = app.GetService()->get_logger("PerfTests"); + auto logger = params->GetLogger("PerfTests"); app.AddPlugin("JTest"); LOG_INFO(logger) << "Running JTest with all sleeps and computations turned off" << LOG_END; @@ -92,7 +92,7 @@ int main() { auto params = new JParameterManager; params->SetParameter("log:off", "JApplication,JPluginLoader,JArrowProcessingController,JArrow"); // Log levels get set as soon as JApp gets constructed XD JApplication app(params); - auto logger = app.GetService()->get_logger("PerfTests"); + auto logger = params->GetLogger("PerfTests"); // TODO: Add Podio sources, processors, and factories just like JTest LOG_INFO(logger) << "Running PODIO stress test" << LOG_END; JBenchmarker benchmarker(&app); diff --git a/src/programs/unit_tests/Topology/TestTopologyComponents.h b/src/programs/unit_tests/Topology/TestTopologyComponents.h index e4eaec88c..c0a6f827f 100644 --- a/src/programs/unit_tests/Topology/TestTopologyComponents.h +++ b/src/programs/unit_tests/Topology/TestTopologyComponents.h @@ -4,11 +4,7 @@ #pragma once -#include - -#include #include -#include #include "MapArrow.h" @@ -17,7 +13,6 @@ struct RandIntSource : public JPipelineArrow { size_t emit_limit = 20; // How many to emit size_t emit_count = 0; // How many emitted so far int emit_sum = 0; // Sum of all ints emitted so far - JLogger logger; RandIntSource(std::string name, JPool* pool, JMailbox* output_queue) : JPipelineArrow(name, false, true, false, nullptr, output_queue, pool) {} @@ -32,18 +27,18 @@ struct RandIntSource : public JPipelineArrow { *item = 7; emit_sum += *item; emit_count += 1; - LOG_DEBUG(logger) << "RandIntSource emitted event " << emit_count << " with value " << *item << LOG_END; + LOG_DEBUG(JArrow::m_logger) << "RandIntSource emitted event " << emit_count << " with value " << *item << LOG_END; success = true; status = (emit_count == emit_limit) ? JArrowMetrics::Status::Finished : JArrowMetrics::Status::KeepGoing; // This design lets us declare Finished immediately on the last event, instead of after } void initialize() override { - LOG_INFO(logger) << "RandIntSource.initialize() called!" << LOG_END; + LOG_INFO(JArrow::m_logger) << "RandIntSource.initialize() called!" << LOG_END; }; void finalize() override { - LOG_INFO(logger) << "RandIntSource.finalize() called!" << LOG_END; + LOG_INFO(JArrow::m_logger) << "RandIntSource.finalize() called!" << LOG_END; } };