2013-08-03 10 views
11

पर लिखी गई नहीं है, मैं थोड़ी देर के लिए बूस्ट लॉग के साथ संघर्ष कर रहा हूं - मुझे लॉग फ़ाइल (http://boost-log.sourceforge.net/libs/log/example/doc/tutorial_file.cpp) पर अपना सरल उदाहरण लिखना पड़ा। हालांकि, जब मैं उस कोड को 'लॉगर' वर्ग में कॉपी करने का प्रयास करता हूं, तो मैं इसे लॉग फ़ाइल में लिखने के लिए नहीं मिल सकता। मैं फ़ाइल default.log फ़ाइल प्राप्त कर सकता हूं, लेकिन इसमें कुछ भी नहीं है।बूस्ट लॉग फ़ाइल

मैं डेबियन 7 64 बिट पर हूं। सब कुछ ठीक संकलित - लाइन संकलन है:

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 

यहाँ मेरी कोड है:

Logger.cpp

/* 
* Logger.cpp 
* 
* Created on: 2011-01-17 
*  Author: jarrett 
*/ 

#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

/* 
* Logger.h 
* 
* Created on: 2011-01-17 
*  Author: jarrett 
*/ 

#ifndef LOGGER_H_ 
#define LOGGER_H_ 

#include <map> 
#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_ */ 

उत्तर

31

आप जब फ़ाइल लॉग

बनाने इस विशेषता की जरूरत है
keywords::auto_flush = true 

इस तरह लॉग प्रविष्टियां तुरंत लिखी जाती हैं। डिफ़ॉल्ट रूप से , फ़ाइल लॉगर फ़ाइल से लिखने के लिए प्रतीत होता है, या किसी अन्य रहस्यमय बिंदु पर, दस्तावेज़

+4

के बारे में कुछ भी उल्लेख नहीं करता है, यह बिल्कुल अजीब है। उदाहरण ने उस कीवर्ड का भी उल्लेख नहीं किया, और अभी तक पूरी तरह से काम किया। धन्यवाद @ उपयोगकर्ता 1283078! – Jarrett

+1

उदाहरण: http://stackoverflow.com/questions/15853981/boost-log-2-0-empty-severity-level-in-logs – lepe

संबंधित मुद्दे