boost - 如何通过 Gloa 使用来自多个文件的 boost 日志

标签 boost boost-logging

我正在尝试在整个应用程序中创建一个全局记录器,以便我可以使用

src::severity_logger_mt< >& lg = my_logger::get();

获取不同类(驻留在不同文件中)日志记录的全局记录器。

我尝试遵循 boost.org 中列出的示例(如下所列)。但似乎不起作用。有谁知道我可以遵循的任何例子,或者如果有效的话我需要做什么。谢谢。

http://www.boost.org/doc/libs/1_54_0/libs/log/doc/html/log/detailed/sources.html

BOOST_LOG_GLOBAL_LOGGER(my_logger, src::severity_logger_mt)


// my_logger.h
// ===========

#include "my_logger.h"

BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, src::severity_logger_mt)
{
    src::severity_logger_mt< > lg;
    lg.add_attribute("StopWatch", boost::make_shared< attrs::timer >());
    return lg;
}

// my_logger.cpp
// ===========

#include "my_logger.h"

BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, src::severity_logger_mt)
{
    src::severity_logger_mt< > lg;
    lg.add_attribute("StopWatch", boost::make_shared< attrs::timer >());
    return lg;
}

最佳答案

我刚刚设法自己让这个工作

日志记录.h

#pragma once

#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)

#define SYS_LOGFILE             "/var/log/example.log"

//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)

日志记录.cpp

#include "Logging.h"

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();

    logging::add_file_log(
            boost::log::keywords::file_name = SYS_LOGFILE,
            boost::log::keywords::format = (
                    expr::stream << expr::format_date_time<     boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")
                    << " [" << expr::attr<     boost::log::trivial::severity_level >("Severity") << "]: "
                    << expr::smessage
            )
    );

    logging::add_console_log(
            std::cout,
            boost::log::keywords::format = (
                    expr::stream << expr::format_date_time<     boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S")
                    << " [" << expr::attr<     boost::log::trivial::severity_level >("Severity") << "]: "
                    << expr::smessage
            )
    );

    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );

    return lg;
}

main.c

#include "Logging.h"

int main(int argc, char **argv)
{
    INFO << "Program started";

    return 0;
}

我的build设置

AM_LDFLAGS += -lboost_system -lboost_thread -lpthread
AM_LDFLAGS += -DBOOST_LOG_DYN_LINK -lboost_log_setup -lboost_log
AM_CXXFLAGS += -std=c++11 -DBOOST_LOG_DYN_LINK

关于boost - 如何通过 Gloa 使用来自多个文件的 boost 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20086754/

相关文章:

c++ - 如何用转义空格分割句子?

c++ - 是否可以在 CLI 解析完成后添加 boost program_options 和参数?

python - 如何使用 boost.python 提取 unicode 字符串

c++ - boost::chrono::high_resolution_clock::now() 断言

c++ - 初始化 boost 日志接收器时将函数对象作为过滤器传递

c++ - Boost.Log 与 Boost.Log v2

c++ - 使用带有 boost::optional 的相等运算符

c++ - 使用 Xcode 预编译 header 时 boost.log 中断

c++ - boost.log v2,如何获取当前日志文件名

c++ - 如何为 boost 接收器(非全局)设置 open_mode 以附加