Hi All,

I am trying to introduce boost::log into one of projects I am working on. The application already does some logging to the trace file and additionaly uses Windows Event Log to post messages. What I am going to do is to replace the existing logging framework with boost::log.

Being frank - these are my first attempts at boost at all. I am following exactly the steps from the examples section of the documentation. I have written the following code:
    boost::shared_ptr< sinks::event_log_backend > backend(
        new sinks::event_log_backend((
           keywords::message_file = "<path to library>.dll",
           keywords::log_name = "My Application",
           keywords::log_source = "My Source"
        ))
    );
 
    sinks::event_log::event_composer composer(
        sinks::event_log::direct_event_id_mapping<int>("EventId")
    );
 
    composer[MY_APPLICATION_SESSION_CREATION_FAILURE] % fmt::message();

    backend->set_event_composer(composer);
 
    boost::shared_ptr<sinks::synchronous_sink< sinks::event_log_backend>> sink(
        new sinks::synchronous_sink< sinks::event_log_backend >(backend)
    );
 
    sink->set_filter(
        (flt::attr<SeverityLevel>("Severity") == info ||
        flt::attr<SeverityLevel>("Severity") == warning ||
        flt::attr<SeverityLevel>("Severity") == error ||
        flt::attr<SeverityLevel>("Severity") == fatal) &&
        flt::has_attr<int>("EventId")
        );
 
    sinks::event_log::custom_event_type_mapping<SeverityLevel> mapping("Severity");
    mapping[trace] = sinks::event_log::info;
    mapping[debug] = sinks::event_log::info;
    mapping[info] = sinks::event_log::info;
    mapping[warning] = sinks::event_log::warning;
    mapping[error] = sinks::event_log::error;
    mapping[fatal] = sinks::event_log::error;
 
    sink->locked_backend()->set_event_type_mapper(mapping);
 
    logging::core::get()->add_sink(sink);
I am building the code with Visual Studio 2010. Unfortunately I get the following error:

1>F:\boost\boost\boost/function/function_template.hpp(153): error C2064: term does not evaluate to a function taking 3 arguments
1>          class does not define an 'operator()' or a user defined conversion operator to a pointer-to-function or reference-to-function that takes appropriate number of arguments
1>          F:\boost\boost\boost/function/function_template.hpp(147) : while compiling class template member function 'void boost::detail::function::void_function_obj_invoker3<FunctionObj,R,T0,T1,T2>::invoke(boost::detail::function::function_buffer &,T0,T1,T2)'
1>          with
1>          [
1>              FunctionObj=boost::log_mt_nt5::formatters::fmt_message<char>,
1>              R=void,
1>              T0=std::basic_ostream<char,std::char_traits<char>> &,
1>              T1=const boost::log_mt_nt5::basic_attribute_values_view<char> &,
1>              T2=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &
1>          ]
1>          F:\boost\boost\boost/function/function_template.hpp(907) : see reference to class template instantiation 'boost::detail::function::void_function_obj_invoker3<FunctionObj,R,T0,T1,T2>' being compiled
1>          with
1>          [
1>              FunctionObj=boost::log_mt_nt5::formatters::fmt_message<char>,
1>              R=void,
1>              T0=std::basic_ostream<char,std::char_traits<char>> &,
1>              T1=const boost::log_mt_nt5::basic_attribute_values_view<char> &,
1>              T2=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &
1>          ]
1>          F:\boost\boost\boost/function/function_template.hpp(722) : see reference to function template instantiation 'void boost::function3<R,T0,T1,T2>::assign_to<Functor>(Functor)' being compiled
1>          with
1>          [
1>              R=void,
1>              T0=std::basic_ostream<char,std::char_traits<char>> &,
1>              T1=const boost::log_mt_nt5::basic_attribute_values_view<char> &,
1>              T2=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,
1>              Functor=boost::log_mt_nt5::formatters::fmt_message<char>
1>          ]
1>          F:\boost\boost\boost/log/sinks/event_log_backend.hpp(678) : see reference to function template instantiation 'boost::function3<R,T0,T1,T2>::function3<FormatterT>(Functor,int)' being compiled
1>          with
1>          [
1>              R=void,
1>              T0=std::basic_ostream<char,std::char_traits<char>> &,
1>              T1=const boost::log_mt_nt5::basic_attribute_values_view<char> &,
1>              T2=const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,
1>              FormatterT=boost::log_mt_nt5::formatters::fmt_message<char>,
1>              Functor=boost::log_mt_nt5::formatters::fmt_message<char>
1>          ]
1>          LoggingFacility.cpp(111) : see reference to function template instantiation 'boost::log_mt_nt5::sinks::event_log::basic_event_composer<CharT>::event_map_reference &boost::log_mt_nt5::sinks::event_log::basic_event_composer<CharT>::event_map_reference::operator %<boost::log_mt_nt5::formatters::fmt_message<CharT>>(const FormatterT &)' being compiled
1>          with
1>          [
1>              CharT=char,
1>              FormatterT=boost::log_mt_nt5::formatters::fmt_message<char>
1>          ]

The problem seems to be caused by the following expression:
composer[MY_APPLICATION_SESSION_CREATION_FAILURE] % fmt::message();

Other backends work flawlessly. Event log files (.h/.mc/.dll) are OK too. Any help?

Regards,
Konrad Rybacki.