Boost logo

Boost Users :

Subject: [Boost-users] boost logging to file
From: Jarrett Chisholm (j.chisholm_at_[hidden])
Date: 2013-08-03 13:06:30


Thanks to everyone who's replied to my previous boost logging question -
still having some issues I'm afraid :S

I've been struggling with boost log for a while now - I got their simple
example writing to a log file
(http://boost-log.sourceforge.net/libs/log/example/doc/tutorial_file.cpp).
However, when I try to copy that code into my own 'Logger' class, I
can't get it to write to the log file. I can see the file `default.log`
get created, but there is nothing in it.

I'm on debian 7 64bit. Everything compiles fine - compile line is:

    g++ -o build/Logger.o -c -std=c++11 -Wall -g -O0
-DBOOST_LOG_DYN_LINK -DDEBUG src/Logger.cpp
    g++ -o build/logtest build/Logger.o -lboost_log -lboost_log_setup
-lboost_date_time -lboost_thread -lboost_wave -lboost_regex
-lboost_program_options

Here's my code:

`Logger.cpp`
    
    #include "Logger.h"
    
    namespace logging = boost::log;
    namespace sinks = boost::log::sinks;
    namespace src = boost::log::sources;
    namespace expr = boost::log::expressions;
    namespace attrs = boost::log::attributes;
    namespace keywords = boost::log::keywords;
    
    namespace dhlogging {
        
    Logger::Logger(std::string fileName)
    {
        initialize(fileName);
    }
    
    Logger::Logger(Logger const&)
    {
    }
    
    Logger::~Logger()
    {
    
    }
    
    Logger* Logger::logger_ = nullptr;
    Logger* Logger::getInstance(std::string logFile)
    {
        if ( Logger::logger_ == nullptr ) {
            logging::add_file_log( logFile );
    
            logging::core::get()->set_filter
            (
                logging::trivial::severity >= logging::trivial::info
            );
            
            logging::add_common_attributes();
            Logger::logger_ = new Logger(logFile);
        }
    
        return Logger::logger_;
    }
    
    void Logger::initialize(std::string fileName)
    {
        BOOST_LOG(log_) << "Hello, World!";
        BOOST_LOG_SEV(log_, info) << "Hello, World2!";
    }
    
    void Logger::logInfo(std::string message)
    {
        BOOST_LOG_SEV(log_, info) << message;
    }
    
    void Logger::logDebug(std::string message)
    {
        BOOST_LOG_SEV(log_, debug) << message;
    }
    
    void Logger::logWarn(std::string message)
    {
        BOOST_LOG_SEV(log_, warning) << message;
    }
    
    void Logger::logError(std::string message)
    {
        BOOST_LOG_SEV(log_, error) << message;
    }
    
    void Logger::logFatal(std::string message)
    {
        BOOST_LOG_SEV(log_, fatal) << message;
    }
    
    }
    
    int main(int, char*[])
    {
        logging::add_common_attributes();
    
        using namespace logging::trivial;
        
        dhlogging::Logger::getInstance()->logInfo("himom");
        
        return 0;
    }

`Logger.h`
    
    #ifndef LOGGER_H_
    #define LOGGER_H_
   
    #include <boost/log/core.hpp>
    #include <boost/log/trivial.hpp>
    #include <boost/log/expressions.hpp>
    #include <boost/log/sinks/text_file_backend.hpp>
    #include <boost/log/utility/setup/file.hpp>
    #include <boost/log/utility/setup/common_attributes.hpp>
    #include <boost/log/sources/severity_logger.hpp>
    #include <boost/log/sources/record_ostream.hpp>
    
    namespace logging = boost::log;
    namespace sinks = boost::log::sinks;
    namespace src = boost::log::sources;
    namespace expr = boost::log::expressions;
    namespace attrs = boost::log::attributes;
    namespace keywords = boost::log::keywords;
    
    using namespace logging::trivial;
    
    namespace dhlogging {
    class Logger {
        
    public:
        static Logger* getInstance(std::string logFile = "default.log");
        
        void logInfo(std::string message);
        void logDebug(std::string message);
        void logWarn(std::string message);
        void logError(std::string message);
        void logFatal(std::string message);
        
    
    private:
        Logger(std::string fileName);
        Logger(Logger const&);
        Logger& operator=(Logger const&);
        virtual ~Logger();
    
        void initialize(std::string fileName);
    
        src::severity_logger< severity_level > log_;
    
        static Logger* logger_; // singleton instance
    };
    }
    #endif /* LOGGER_H_ */

Anyone have any ideas?

Jarrett


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