Skip to content

Commit b2c6f8a

Browse files
NathanielVolfangojenkins
authored andcommitted
QPR-11977 -- Add logging exclude filters to filter out log messages based on function() -> bool
1 parent 29fb965 commit b2c6f8a

4 files changed

Lines changed: 35 additions & 5 deletions

File tree

OREAnalytics/orea/app/inputparameters.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@ class InputParameters {
332332
const boost::shared_ptr<ore::data::EngineData>& pricingEngine() { return pricingEngine_; }
333333
const boost::shared_ptr<ore::data::TodaysMarketParameters>& todaysMarketParams() { return todaysMarketParams_; }
334334
const boost::shared_ptr<ore::data::Portfolio>& portfolio() { return portfolio_; }
335+
const boost::shared_ptr<ore::data::Portfolio>& useCounterpartyOriginalPortfolio() {
336+
return useCounterpartyOriginalPortfolio_;
337+
}
335338

336339
QuantLib::Size maxRetries() const { return maxRetries_; }
337340
QuantLib::Size nThreads() const { return nThreads_; }
@@ -591,7 +594,7 @@ class InputParameters {
591594
CurveConfigurationsManager curveConfigs_;
592595
boost::shared_ptr<ore::data::EngineData> pricingEngine_;
593596
boost::shared_ptr<ore::data::TodaysMarketParameters> todaysMarketParams_;
594-
boost::shared_ptr<ore::data::Portfolio> portfolio_;
597+
boost::shared_ptr<ore::data::Portfolio> portfolio_, useCounterpartyOriginalPortfolio_;
595598
QuantLib::Size maxRetries_ = 7;
596599
QuantLib::Size nThreads_ = 1;
597600

OREData/ored/portfolio/portfolio.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class Portfolio : public XMLSerializable {
6666
//! Portfolio size
6767
QuantLib::Size size() const { return trades_.size(); }
6868

69+
bool empty() const { return trades_.empty(); }
70+
6971
//! XMLSerializable interface
7072
void fromXML(XMLNode* node) override;
7173
XMLNode* toXML(XMLDocument& doc) override;

OREData/ored/utilities/log.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,21 @@ void Log::removeAllLoggers() {
106106
loggers_.clear();
107107
}
108108

109+
void Log::addExcludeFilter(const string& key, const std::function<bool(std::string)>& func) {
110+
excludeFilters_[key] = func;
111+
}
112+
113+
void Log::removeExcludeFilter(const string& key) { excludeFilters_.erase(key); }
114+
115+
bool Log::checkExcludeFilters(const std::string& msg) {
116+
for (const auto& f : excludeFilters_) {
117+
if (f.second(msg))
118+
return true;
119+
}
120+
121+
return false;
122+
}
123+
109124
void Log::header(unsigned m, const char* filename, int lineNo) {
110125
// 1. Reset stringstream
111126
ls_.str(string());

OREData/ored/utilities/log.hpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)