Subject: [Boost-users] Log: [Bug] Setting attribute makes log entry disappear
From: Florian Lindner (mailinglists_at_[hidden])
Date: 2015-10-12 10:44:34


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