我有工作提升日志代码,但想要将File,Function和Line附加到每个日志调用。这是我的代码:
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
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;
}
以下是我目前的称呼方式:
INFO << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") | started";
是否可以使用全局定义自动执行此操作?谢谢。
答案 0 :(得分:2)
只需将宏定义为
即可#define INFO BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::info) << __FILE__ << "(" ..
答案 1 :(得分:1)
四年后,我更新了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