Boost logo

Boost Users :

Subject: Re: [Boost-users] [Log] Error with operator<< in basic_formatting_ostream
From: Víctor Yo (rcpoetics_at_[hidden])
Date: 2013-11-14 08:25:02


I found the answer for the previous problem. When named_scope is used, the
BOOST_LOG_NAMED_SCOPED() must be used in every scope we want to register.
This macro fills the values of the named_scoped variables in order to be
available for the logger and the formatter.

El jueves, 7 de noviembre de 2013 09:10:56 UTC+1, Víctor Yo escribió:
>
> As I said, I discovered that I was using incorrect names in the formatter.
> I though that I had to use the same attribute names there but it happens
> that I had to use the names associated to the formatter. I post the new
> code for better understanding:
>
> frontend -> set_formatter
> (
> boost::log::expressions::stream
> <<_lineID
> <<" ["<<boost::log::expressions::format_named_scope(_scope,
> boost::log::keywords::format = "%n (%f:%l)")
> <<"] "<< boost::log::expressions::format_date_time<
> boost::posix_time::ptime >("TimeStamp", "%H:%M:%S")
> <<" <"<<boost::log::expressions::attr< severity_level >("Severity")
> <<"> "<<boost::log::expressions::message
> );
>
> In my firts code I used attributes names but it is customary to use
> expressions names corresponding to the variables we want to use in the log.
> However, I'm still having problems with the named_scope because it is not
> working. I have nothing printed in the log messages when it is supposed to
> print the scope, the file name and the line number. Anyone could help me
> with that? Thank you very much.
>
> El miércoles, 6 de noviembre de 2013 08:36:03 UTC+1, Víctor Yo escribió:
>>
>> Thank you Johan. I have read that documentation before. Anyway, I
>> discovered that one of the problems I had is that I need to use formatters
>> types asociated with the variables (or objects) I want to use in the log,
>> but I was using the variable types instead. I'm working on it and when I
>> have everything working, I will post the changes here for future reference.
>> I think I have it under control :D Thank you!
>>
>> El martes, 5 de noviembre de 2013 22:19:58 UTC+1, Johan Lundberg escribió:
>>>
>>> Hi,
>>>
>>> In the tutorial here:
>>>
>>> http://www.boost.org/doc/libs/1_54_0/libs/log/doc/html/log/tutorial/formatters.html
>>>
>>> There is a link to this example:
>>>
>>> http://www.boost.org/doc/libs/1_54_0/libs/log/example/doc/tutorial_fmt_format.cpp
>>>
>>> Which I can compile fine like this:
>>> g++ -DBOOST_ALL_DYN_LINK -Lboost-trunk155beta_inst/lib/ -lboost_system
>>> -lboost_log -lboost_filesystem -lboost_thread -I
>>> boost-trunk155beta_inst/include/ boost_log_format.cpp
>>>
>>> Could start from that?
>>>
>>> cheers, Johan
>>>
>>>
>>> 2013/11/5 Víctor Yo <rcpo..._at_[hidden]>
>>>
>>>> Hi ewveryone,
>>>>
>>>> I'm working lately with Boost.Log (I'm a newbie) library and I want to
>>>> write a logger with some parameters and formatting options. I followed the
>>>> documentation, I created a backend and a frontend and I tried to format the
>>>> output in the frontend with the set_formatter() function. I tried with the
>>>> Lambda style and with the Boost.Format style but I'm getting an error that
>>>> I can not locate. Iwas working on it for the last two whole days but I
>>>> couldn't find a solution. It is related with the basic_formatting_ostream,
>>>> but I don't understand what that means. I defined the backend and attached
>>>> to it two streams (to a file and to cout)
>>>>
>>>>
>>>> typedef boost::log::sinks::text_ostream_backend our_backend;
>>>> typedef boost::log::sinks::synchronous_sink<our_backend>
>>>> our_frontend;
>>>>
>>>>
>>>> //............................................................................................................................................
>>>>
>>>> boost::shared_ptr<our_backend> backend =
>>>> boost::make_shared<our_backend>();
>>>> //Stream definitions
>>>> boost::shared_ptr<std::ostream> stream_out(&std::cout,
>>>> boost::log::empty_deleter());
>>>> boost::shared_ptr<std::ostream> stream_file(new
>>>> std::ofstream("file_logger.log"));
>>>> backend -> add_stream(stream_out);
>>>> backend -> add_stream(stream_file);
>>>>
>>>> Created the frontend (and wrapping the backend to it)
>>>>
>>>> //Wrap the backend into the frontend and register in the core.
>>>> //The frontend provides synchronization for the backend.
>>>> boost::shared_ptr<our_frontend> frontend(new
>>>> our_frontend(backend));
>>>>
>>>> And now come the offending code which is supposed to format the output
>>>> (note that the first commented block was my first try). None of them works
>>>> and the error is the same in both cases:
>>>>
>>>> */*frontend -> set_formatter*
>>>> * (*
>>>> * boost::log::expressions::format("[%1%] %2%, File: %3%,
>>>> Line: %4% <%5%>: %6% ")*
>>>> * % boost::log::attributes::counter< unsigned int
>>>> >(1)*
>>>> * % boost::log::attributes::local_clock()*
>>>> * % boost::log::expressions::attr< severity_level
>>>> >("Severity")*
>>>> * % boost::log::expressions::message*
>>>> * );*/*
>>>>
>>>> //We are going to define the formatter in a different style to
>>>> try to get formatted output
>>>> frontend -> set_formatter
>>>> (
>>>> boost::log::expressions::stream
>>>> << boost::log::attributes::counter< unsigned int >(1)
>>>> <<" ["<< boost::log::attributes::local_clock()
>>>> <<"] <"<< boost::log::expressions::attr< severity_level >("Severity")
>>>> <<"> "<< boost::log::expressions::message
>>>> );
>>>>
>>>> The error I get is the next one:
>>>>
>>>> */home/victor/Programacion/workspace/opice/build-parallel/../libs/include/boost/log/utility/formatting_ostream.hpp:664:5:
>>>> error: no match for ‘operator<<’ in ‘(&
>>>> strm)->boost::log::v2_mt_posix::basic_formatting_ostream<CharT, TraitsT,
>>>> AllocatorT>::stream [with CharT = char, TraitsT = std::char_traits<char>,
>>>> AllocatorT = std::allocator<char>,
>>>> boost::log::v2_mt_posix::basic_formatting_ostream<CharT, TraitsT,
>>>> AllocatorT>::ostream_type = std::basic_ostream<char>]() << value’*
>>>>
>>>> And I really don't know what is happening. I also included a lot of
>>>> files (I'm sure I included too much files, indeed) to be sure it was not
>>>> caused by some undefined operator or something similar. However I still
>>>> have the same problem. The includes are:
>>>>
>>>> #include <iostream>
>>>> #include <fstream>
>>>> #include <string>
>>>>
>>>> #include <boost/thread/shared_mutex.hpp>
>>>>
>>>> #include <boost/log/core.hpp>
>>>> #include <boost/log/common.hpp>
>>>> #include <boost/make_shared.hpp>
>>>> #include <boost/log/expressions.hpp>
>>>>
>>>> #include <boost/log/utility/setup/file.hpp>
>>>> #include <boost/log/utility/setup/console.hpp> //puede ser
>>>> innecesario
>>>> #include <boost/log/utility/setup/common_attributes.hpp> //puede
>>>> ser innecesario
>>>> #include <boost/log/utility/empty_deleter.hpp>
>>>>
>>>> #include<boost/thread/mutex.hpp>
>>>> #include <boost/log/attributes/timer.hpp>
>>>> #include <boost/log/attributes/mutable_constant.hpp>
>>>> #include <boost/log/sources/severity_logger.hpp>
>>>> #include <boost/log/utility/formatting_ostream.hpp>
>>>>
>>>> #include <boost/log/sinks/text_ostream_backend.hpp>
>>>> #include <boost/log/sinks/sync_frontend.hpp>
>>>>
>>>> #include <boost/log/support/date_time.hpp>
>>>>
>>>> As you can see, they are probably redundant or innecessary but I could
>>>> rip off that files when I could get the program compiled. Now, I'm out of
>>>> ideas so any help you could bring me should be very appreciated. Thank you
>>>> in advance.
>>>>
>>>> Victor Hevia
>>>>
>>>> _______________________________________________
>>>> Boost-users mailing list
>>>> Boost..._at_[hidden]
>>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>>>
>>>
>>>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net