@@ -262,6 +262,12 @@ class Log : public QuantLib::Singleton<Log, std::integral_constant<bool, true>>
262262 */
263263 void removeAllLoggers ();
264264
265+ void addExcludeFilter (const std::string&, const std::function<bool (std::string)>&);
266+
267+ void removeExcludeFilter (const std::string&);
268+
269+ bool checkExcludeFilters (const std::string&);
270+
265271 // ! macro utility function - do not use directly
266272 void header (unsigned m, const char * filename, int lineNo);
267273 // ! macro utility function - do not use directly
@@ -337,6 +343,8 @@ class Log : public QuantLib::Singleton<Log, std::integral_constant<bool, true>>
337343 int pid_ = 0 ;
338344
339345 mutable boost::shared_mutex mutex_;
346+
347+ std::map<std::string, std::function<bool (std::string)>> excludeFilters_;
340348};
341349
342350/* !
@@ -347,10 +355,12 @@ class Log : public QuantLib::Singleton<Log, std::integral_constant<bool, true>>
347355 if (ore::data::Log::instance ().enabled () && ore::data::Log::instance ().filter (mask)) { \
348356 std::ostringstream __ore_mlog_tmp_stringstream__; \
349357 __ore_mlog_tmp_stringstream__ << text; \
350- boost::unique_lock<boost::shared_mutex> lock (ore::data::Log::instance ().mutex ()); \
351- ore::data::Log::instance ().header (mask, __FILE__, __LINE__); \
352- ore::data::Log::instance ().logStream () << __ore_mlog_tmp_stringstream__.str (); \
353- ore::data::Log::instance ().log (mask); \
358+ if (!ore::data::Log::instance ().checkExcludeFilters (__ore_mlog_tmp_stringstream__.str ())) { \
359+ boost::unique_lock<boost::shared_mutex> lock (ore::data::Log::instance ().mutex ()); \
360+ ore::data::Log::instance ().header (mask, __FILE__, __LINE__); \
361+ ore::data::Log::instance ().logStream () << __ore_mlog_tmp_stringstream__.str (); \
362+ ore::data::Log::instance ().log (mask); \
363+ } \
354364 } \
355365 }
356366
0 commit comments