代码之家  ›  专栏  ›  技术社区  ›  whoami

未创建日志文件

  •  -2
  • whoami  · 技术社区  · 6 年前

    我需要一个全局记录器,我可以跨我的项目中的多个类使用。我想在ini文件中有记录器设置。

    here 再加上我前面问题的一些建议 here .

    我的Logger.h如下。

    #pragma once
    
    #include <boost/log/common.hpp>
    #include <boost/log/attributes.hpp>
    #include <boost/log/utility/setup/from_stream.hpp>
    #include <boost/regex.hpp>
    
    #include <boost/log/expressions.hpp>
    #include <boost/log/sources/global_logger_storage.hpp>
    #include <boost/log/support/date_time.hpp>
    #include <boost/log/trivial.hpp>
    #include <boost/log/utility/setup.hpp>
    
    
    #define INFO  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info)
    #define WARN  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::warning)
    #define ERROR BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error)
    
    //Narrow-char thread-safe logger.
    typedef boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> logger_t;
    
    //declares a global logger with a custom initialization
    BOOST_LOG_GLOBAL_LOGGER(my_logger, logger_t)
    BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT(test_lg, boost::log::sources::severity_logger< >)
    

    这个记录器.cpp具体如下。

    #include "stdafx.h"
    #include "Logger.h"
    #include <fstream>
    
    namespace attrs = boost::log::attributes;
    namespace expr = boost::log::expressions;
    namespace logging = boost::log;
    
    //Defines a global logger initialization routine
    BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, logger_t)
    {
        logger_t lg;
    
        logging::add_common_attributes();
    
        std::ifstream settings("settings.ini");
        if (!settings.is_open())
        {
            std::cout << "Could not open settings.txt file" << std::endl;
            //return 1;
        }
    
        // Read the settings and initialize logging library
        logging::init_from_stream(settings);
    
        // Add some attributes
        logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock());
        logging::register_simple_filter_factory<logging::trivial::severity_level>("Severity");
    
        return lg;
    }
    

    这个设置.ini看起来像下面

    #
    #          Copyright Andrey Semashev 2007 - 2014.
    # Distributed under the Boost Software License, Version 1.0.
    #    (See accompanying file LICENSE_1_0.txt or copy at
    #          http://www.boost.org/LICENSE_1_0.txt)
    #
    
    [Core]
    Filter="%Severity% >= debug"
    
    [Sinks.1]
    Destination=TextFile
    FileName=test.log
    AutoFlush=true
    Format="[%TimeStamp%] <%Severity%> (%Channel%): %Message%"
    

    最后,我尝试使用记录器如下。

    #include "Logger.h"
    int wmain(int argc, wchar_t* argv[])
    {
        INFO << "Program started";
    }
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   sehe    6 年前

    正在分析设置ini。

    // Add some attributes
    logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock());
    logging::register_simple_filter_factory<logging::trivial::severity_level>("Severity");
    

    必须在电话前面

    // Read the settings and initialize logging library
    logging::init_from_stream(settings);
    

    推荐文章