Log: [Bug] Setting attribute makes log entry disappear
Hello, I have a tracer, that should log going in and out of a function: class Tracer { public: Tracer(Logger logger, std::string function, std::string file) : _logger(logger), _function(function), _file(file) {} ~Tracer() { using namespace boost::log; // attribute_cast<attributes::mutable_constant<int>>(core::get()->get_global_attributes()["Line"]).set(1); attribute_cast<attributes::mutable_constant<std::string>>(core::get()->get_global_attributes()["File"]).set(_file); attribute_cast<attributes::mutable_constant<std::string>>(core::get()->get_global_attributes()["Function"]).set(_function); BOOST_LOG_SEV(_logger, trivial::severity_level::trace) << "Leaving " << _function; } private: Logger _logger; std::string _function; std::string _file; }; This works fine, but as soon as I uncomment the line that sets the Line attribut I don't get any Leaving messages anymore. The attributes are added beforehand like that: using namespace boost::log; add_common_attributes(); core::get()->add_global_attribute("Scope", attributes::named_scope()); core::get()->add_global_attribute("Rank", attributes::constant<int>(5)); core::get()->add_global_attribute("Line", attributes::mutable_constant<int>(5)); core::get()->add_global_attribute("File", attributes::mutable_constant<std::string>("")); core::get()->add_global_attribute("Function", attributes::mutable_constant<std::string>("")); Setting all other attributes, similiar to Line works fine. I'm puzzled because Line does not seem to be a reserved name, it works somewhere else and the boost::log sources reveal no relevant usages of that name. What could be the problem here? I'm happy to send anyone the complate code (approx. 150 lines in total) Thanks! Florian
Florian Lindner wrote:
Hello,
I have a tracer, that should log going in and out of a function:
class Tracer { public: Tracer(Logger logger, std::string function, std::string file) : _logger(logger), _function(function), _file(file) {}
~Tracer() { using namespace boost::log; // attribute_cast<attributes::mutable_constant<int>>(core::get()- get_global_attributes()["Line"]).set(1); attribute_cast<attributes::mutable_constant<std::string>>(core::get()- get_global_attributes()["File"]).set(_file); attribute_cast<attributes::mutable_constant<std::string>>(core::get()- get_global_attributes()["Function"]).set(_function); BOOST_LOG_SEV(_logger, trivial::severity_level::trace) << "Leaving " << _function; }
private: Logger _logger; std::string _function; std::string _file; };
This works fine, but as soon as I uncomment the line that sets the Line attribut I don't get any Leaving messages anymore.
The attributes are added beforehand like that:
using namespace boost::log; add_common_attributes(); core::get()->add_global_attribute("Scope", attributes::named_scope()); core::get()->add_global_attribute("Rank", attributes::constant<int>(5)); core::get()->add_global_attribute("Line", attributes::mutable_constant<int>(5)); core::get()->add_global_attribute("File", attributes::mutable_constant<std::string>("")); core::get()->add_global_attribute("Function", attributes::mutable_constant<std::string>(""));
Setting all other attributes, similiar to Line works fine. I'm puzzled because Line does not seem to be a reserved name, it works somewhere else and the boost::log sources reveal no relevant usages of that name.
Sorry, forgot to add what the actual problem is: The log message (Leaving...) is simply discarded. All log message before and after that are printed fine, but this one.
participants (1)
-
Florian Lindner