What is boost log, how to get it and how to build it
Asked Answered
R

5

31

So I heard good things about boost log. This claims its existence:

http://boost-log.sourceforge.net/libs/log/doc/html/index.html

This is the tutorial:

http://boost-log.sourceforge.net/libs/log/doc/html/log/tutorial.html#log.tutorial.trivial

However, boost log is not part of boost. Hence not in the regular boost branch.

One can download boost log separately from here:

http://sourceforge.net/projects/boost-log/

I might just be too inexperienced, but I find the installation instructions very poor. Nonetheless, after downloading and copying the folders boost and lib into the boost folder, I can run bootstrap and bjam. This fails with errors relating to Boost.Filesystem versions, similar to the ones mentioned here:

http://boost.2283326.n4.nabble.com/Boost-Log-compilation-on-msvc-2010-fail-td3488502.html

The recommendation from Andrew Semashev (in above link) is to "Please use Boost.Log v2 (from SVN trunk)."

Looking at https://boost-log.svn.sourceforge.net/svnroot/boost-log, I can only see version 1.

Looking at http://svn.boost.org/svn/boost/sandbox/, I can find boost logging v2 by John Torjo. However, just from the syntax that might not be the boost log v2 that Andrew Semashev is talking about.

Seeing that I spend way too many hours on this already, I figured I'd get some help, and maybe some other people might profit from this post and the answers and save themselves some time. I don't think it has been answered before, and answers like these change I supposed.

So, here goes: What is boost log v2 that Andrew Semashev is talking about? Is it the same as John Torjo's? If not, where I can find it? And how do I build it?

Thanks

P.S. I should mention this is on Windows with Visual Studio Express 2010

P.P.S. Guess "version 2", which is apparently just the SVN, also has problems, but with this line (see Sergio's answer below)

<toolset>msvc:<define>BOOST_FILESYSTEM_VERSION=2

in the bjam file at least I can compile. However, this file

#include <boost/log/trivial.hpp>
int main(int, char*[])
{
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
}

straight out of the tutorial, albeit now compiling and linking, doesn't produce any output...

Ruffian answered 20/5, 2011 at 18:51 Comment(4)
Managed to get output with #include "boost\log\utility\init\to_file.hpp" #include "boost\log\utility\init\to_console.hpp" and logging::init_log_to_file("sample.log"); or logging::init_log_to_console();Ruffian
I just felt your pain, thanks for posting. Even after all these help mine still does not build.Revisionism
Boost.Log is in Boost as of 1.54.0Turpentine
@jla: So, if Boost.Log is now in Boost, doesn't it make this question rather obsolete? If so, OP: Would you consider deleting it, or marking it obsolete with Boost 1.54+, due to this comment?Kiowa
C
8

boost log v2 is simply what you get by checking out trunk, according to what Andrey says in the post you link.

indeed, it seems that this version too has got problems compiling against boost::filesystem v3.

if this is also your case, one workaround is compiling after adding

<define>BOOST_FILESYSTEM_VERSION=2

to the jamfile.

if this does not work, then, check whether you are building a single threaded or multi-threaded version of the libraries. multi-threadred boost-log should be more tested (according to Andrey).

hope this helps... I have not tried it...

EDIT:

where to add the ?

I would add it to the requirements section of boost-log/libs/log/build/Jamfile.v2, shared subsection:

project boost/log
    : source-location ../src
    : requirements
       <link>shared:<define>BOOST_LOG_DLL
       <link>shared:<define>BOOST_FILESYSTEM_VERSION=2

EDIT: from Cookie's comment, BOOST_FILESYSTEM_VERSION=2 should be specified as

       <link>msvc:<define>BOOST_FILESYSTEM_VERSION=2

not in shared.

Clinkstone answered 20/5, 2011 at 19:11 Comment(3)
Sorry, but where exactly would I add this?Ruffian
project boost/log : source-location ../src : requirements <snip> # shared:BOOST_LOG_DLL shared:BOOST_FILESYSTEM_VERSION=2 # not working <toolset>msvc:<define>BOOST_FILESYSTEM_VERSION=2 # compiles <snip> Hmm formatting is bit snippy... anyway... the second line compiles, the line from your answer didn't quite work.Ruffian
thanks, fixed formatting and added your quote for other readers.Clinkstone
T
14

This is the method I followed to install Boost.Log in my Linux box. One important note before you build and install Boost libraries: Make sure you have installed a threading library like pthreads. Most package managers should have them.

Here are the build steps:

If you have installed Boost already from source, then its fine continue to next step. Otherwise download it from here (preferably the latest version (v1.46). I used v1.45). Extract the boost libraries at say: /opt. We can build the libraries along with Boost.Log.

  • Download Boost.Log from Sourceforge.
  • Extract the Boost.Log source archive in a folder – say /opt. Copy the log folder in: /opt/boost-log-1.0/boost to your boost source directory /opt/Boost_1_45_0/boost (assuming that you have extracted it in /opt).
  • Copy the log folder in: /opt/boost-log-1.0/libs to your boost libs directory /opt/Boost_1_45_0/libs (assuming that you have extracted it in /opt). If you haven’t installed other Boost libraries, then follow these steps:
    • cd /opt/Boost_1_45_0
    • .bootstrap.sh --show-libraries — this will list all the libraries that will be built and installed. You should see log listed as part of it.
    • .bootstrap.sh --with-libraries=all --prefix=/usr/local --includedir=/usr/local/include --libdir=/usr/local/lib
    • ./bjam install

Finally make sure $LD_LIBRARY_PATH has /usr/local/lib (the path specified in bjam to install the built libraries) as part of it. If it is not edit your ~/.bashrc and add the following:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
Tawnytawnya answered 20/5, 2011 at 19:17 Comment(2)
mytechnotebook.wordpress.com/2011/01/04/…Dormie
@Offirmo: That's my not so active blog :( I wrote it for my own reference.Tawnytawnya
C
8

boost log v2 is simply what you get by checking out trunk, according to what Andrey says in the post you link.

indeed, it seems that this version too has got problems compiling against boost::filesystem v3.

if this is also your case, one workaround is compiling after adding

<define>BOOST_FILESYSTEM_VERSION=2

to the jamfile.

if this does not work, then, check whether you are building a single threaded or multi-threaded version of the libraries. multi-threadred boost-log should be more tested (according to Andrey).

hope this helps... I have not tried it...

EDIT:

where to add the ?

I would add it to the requirements section of boost-log/libs/log/build/Jamfile.v2, shared subsection:

project boost/log
    : source-location ../src
    : requirements
       <link>shared:<define>BOOST_LOG_DLL
       <link>shared:<define>BOOST_FILESYSTEM_VERSION=2

EDIT: from Cookie's comment, BOOST_FILESYSTEM_VERSION=2 should be specified as

       <link>msvc:<define>BOOST_FILESYSTEM_VERSION=2

not in shared.

Clinkstone answered 20/5, 2011 at 19:11 Comment(3)
Sorry, but where exactly would I add this?Ruffian
project boost/log : source-location ../src : requirements <snip> # shared:BOOST_LOG_DLL shared:BOOST_FILESYSTEM_VERSION=2 # not working <toolset>msvc:<define>BOOST_FILESYSTEM_VERSION=2 # compiles <snip> Hmm formatting is bit snippy... anyway... the second line compiles, the line from your answer didn't quite work.Ruffian
thanks, fixed formatting and added your quote for other readers.Clinkstone
C
3

After lots of searching and testing this what I found out.

  • Download desired Boost (I tested it on stable release 1.51)

  • Checkout boost-log from here and copy <boost-log>/boost/log and <boost-log>/libs/log to <boost>/boost/log and <boost>/libs

  • Make sure you have a supported compiler (my problem was that!. It worked with gcc 4.1.7)

  • Run

    ./bootstrap.sh --with-libraries=all --prefix=<dir_to_install>
    

    and

    ./b2 address-model=32
    

If everything goes according to plan, a directory <boost>/stage/libs will be created with the compiled libraries (including libboost_log.so)

Notes:

  • I'm not sure why but prefix didn't work. I was expecting to see the libraries built there.

  • Use b2 not bjam.

  • No need to alter Jamfile in <boost-log>.

  • I got a bunch of warnings but no when building log.

I hope it helps somebody.

Competency answered 27/9, 2012 at 14:40 Comment(0)
H
1

If I interpret Andrew's answer correctly, his recommendation is to not use one of the packaged version of Boost.Log but do an SVN checkout from the boost-log SVN repository on SourceForge. I had a quick look at the files in the trunk there and can't find any reference to a v1.

And no, I'm pretty sure that he isn't talking about John Torjo's Boost.Log v2, but a newer version of his Boost.Log that hasn't been packaged for a release yet.

We are using Boost.Log and I'm pretty happy with it so far; your question actually helped me figure out what to do in order to build Boost.Log with 1.46.1...

Horsewoman answered 20/5, 2011 at 18:59 Comment(2)
Well. In response to this answer I did check out boost-log.svn.sourceforge.net/svnroot/boost-log. However, I still think it to be v1, and either way, I am still getting the error relating to the boost filesystem.Ruffian
I've just checked out the trunk from sourceforge and that builds fine here with Boost 1.46.1 and VS2010.Horsewoman
W
1

Unknown symbol in text_file_backend.cpp at line 1197 while building boost-log-1-1 with boost 1.51.0

I am using Windows MSVC 2010, but I suspect that the problem I had may be common to other platforms as well. I copied the boost.log sources into the boost 1.51 source tree and ran bootstrap.bat and .\b2 as per the instructions. The build failed, complaining that get_generic_category() is an unknown symbol in text_file_backend.cpp at line 1197

I changed line 1197 of text_file_backend.cpp so that it now reads

system::error_code(system::errc::io_error, system::generic_category()));

and I re-ran the build. The build worked.

I hope this helps someone else who has trouble building the boost-log library with boost 1.51

Please see http://www.boost.org/doc/libs/1_51_0/libs/system/doc/reference.html#Deprecated-names for more information about this change.

Edit: I just tried again using the boost-log sources direct from Subversion trunk, and it compiled OK. So the solution is: ignore boost-log 1.1 and use the Subversion trunk.

Woodpecker answered 13/9, 2012 at 12:38 Comment(2)
If this happened against the trunk of boost-log, then you should post on the authors forums making him aware of the issue.Seabolt
Response to Roger Stewart. I used the zipped boost 1.51 sources that I downloaded from the boost website. Good point about posting on the author's forum, though. I will do that.Woodpecker

© 2022 - 2024 — McMap. All rights reserved.