C++ 将文件、函数、行添加到全局boost记录器

C++ 将文件、函数、行添加到全局boost记录器,c++,logging,boost,C++,Logging,Boost,我有正在工作的boost日志代码,但希望在每个日志调用中附加文件、函数和行。这是我的密码: logging.hpp #ifndef LOGGING_HPP #define LOGGING_HPP #include <boost/log/expressions.hpp> #include <boost/log/sources/global_logger_storage.hpp> #include <boost/log/support/date_time.hpp>

我有正在工作的boost日志代码,但希望在每个日志调用中附加文件、函数和行。这是我的密码:

logging.hpp

#ifndef LOGGING_HPP
#define LOGGING_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)

#define SYS_LOGFILE "/var/www/html/logs/pal5.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)

#endif
\ifndef测井\u水电站
#定义HPP的日志记录
#包括
#包括
#包括
#包括
#包括
#定义信息BOOST\u LOG\u SEV(我的日志记录器::get(),BOOST::LOG::平凡::信息)
#定义WARN BOOST\u LOG\u SEV(my\u logger::get(),BOOST::LOG::tritile::warning)
#定义错误BOOST\u LOG\u SEV(我的日志记录器::get(),BOOST::LOG::平凡::错误)
#定义系统日志文件“/var/www/html/logs/pal5.log”
//窄字符线程安全记录器。
typedef boost::log::sources::严重性日志记录程序\u mt日志记录程序\u t;
//声明具有自定义初始化的全局记录器
BOOST_LOG_GLOBAL_LOGGER(我的LOGGER,LOGGER_t)
#恩迪夫
logging.cpp

#include "../include/logging.hpp"

// CFLAGS += -DBOOST_LOG_DYN_LINK
// LIBS += -lboost_log_setup -lboost_log -lpthread

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;

//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(
            keywords::file_name = SYS_LOGFILE,
            keywords::rotation_size = 1024 * 1024 * 20,    // megabytes
            keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point (0, 0, 0),
            keywords::auto_flush = true,
            keywords::format = (
                    expr::stream << expr::format_date_time <boost::posix_time::ptime> ("TimeStamp", "%y-%m-%d %H:%M:%S.%f")
                    << " [" << expr::attr <boost::log::trivial::severity_level> ("Severity") << "]: "
                    << expr::smessage
            )
    );

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

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

    return lg;
}
#include“./include/logging.hpp”
//CFLAGS+=-DBOOST\u LOG\u DYN\u链接
//LIBS+=-lboost\u log\u设置-lboost\u log-lpthread
名称空间日志=boost::log;
名称空间sinks=boost::log::sinks;
名称空间src=boost::log::sources;
名称空间expr=boost::log::expressions;
名称空间attrs=boost::log::attributes;
名称空间关键字=boost::log::关键字;
//定义全局记录器初始化例程
BOOST_LOG_GLOBAL_LOGGER_INIT(我的LOGGER,LOGGER_t)
{
记录器(lg);
日志记录::添加公共属性();
日志记录::添加文件日志(
关键词::文件名=系统日志文件,
关键词::旋转大小=1024*1024*20,//兆字节
关键词::基于时间的旋转=boost::log::sinks::file::旋转在时间点(0,0,0),
关键词::auto_flush=true,
关键词::格式=(

expr::stream只需将宏定义为

#define INFO  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info) << __FILE__ << "(" ..

#定义INFO BOOST_LOG_SEV(my_logger::get(),BOOST::LOG::trival::INFO)只需将宏定义为

#define INFO  BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info) << __FILE__ << "(" ..

#定义INFO BOOST_LOG_SEV(my_logger::get(),BOOST::LOG::trival::INFO)四年后我更新的
logging.hpp
仅显示文件名而不显示其路径:

#ifndef LOGGING_HPP
#define LOGGING_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 __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
#define TRACE BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::trace) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define DEBUG BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::debug) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define INFO BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define WARNING BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::warning) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define ERROR BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define FATAL BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::fatal) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "

#define SYS_LOGFILE "/var/www/html/logs/pal5_%y-%m-%d_#%N.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)

#endif
\ifndef测井\u水电站
#定义HPP的日志记录
#包括
#包括
#包括
#包括
#包括
#定义uuu文件名uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

#四年后定义TRACE BOOST_LOG_SEV(my_logger::get(),BOOST::LOG::trival::TRACE)my updated
logging.hpp

#ifndef LOGGING_HPP
#define LOGGING_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 __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
#define TRACE BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::trace) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define DEBUG BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::debug) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define INFO BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define WARNING BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::warning) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define ERROR BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "
#define FATAL BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::fatal) << "[" << __FILENAME__ << "/" << __FUNCTION__ << ":" << __LINE__ << "] "

#define SYS_LOGFILE "/var/www/html/logs/pal5_%y-%m-%d_#%N.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)

#endif
\ifndef测井\u水电站
#定义HPP的日志记录
#包括
#包括
#包括
#包括
#包括
#定义uuu文件名uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

#定义跟踪BOOST_LOG_SEV(我的日志记录器::get(),BOOST::LOG::trival::TRACE)哎呀,我试过了,但我想我没有正确地用头重新编译;谢谢Hoops,我试过了,但我想我没有正确地用头重新编译;谢谢