boost Logger出现问题
issue with boost Logger
我正在尝试创建一个多线程的boost记录器文件。这可以做以下事情:
- 写入以提供目录
- 文件可以在午夜或rache最大文件大小时旋转
- 需要检查是否有空间将文件扭放到光盘上
- 最多可以创建10个日志文件
我使用的增强版本是1.65.1。
问题是:
- 提升具有相同内容的机箱2文件示例:BioEngine_117145_Mon_Nov_11_15_32_40_2019和BioEngine_11_2019_15_32_40_0.log
- 在我需要的目标目录中没有创建任何文件。文件写入了处理运行的位置
- 最大文件数不起作用,我分配的文件数超过10个
我找不出我做错了什么。感谢您提供下面的帮助代码。
Logger.h
#ifndef LOG_LOGGER_HXX
#define LOG_LOGGER_HXX
#pragma once
#include <string>
#include <boost/log/trivial.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/move/utility.hpp>
#include <boost/log/sources/logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/sources/global_logger_storage.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <boost/log/support/date_time.hpp>
#include <string>
using std::string;
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace keywords = boost::log::keywords;
namespace attrs = boost::log::attributes;
namespace sinks = boost::log::sinks;
namespace expr = boost::log::expressions;
namespace trivial = boost::log::trivial;
#define LogInfo MYLOG(logging::trivial::severity_level::info)
#define LogWarning MYLOG(logging::trivial::severity_level::warning)
#define LogError MYLOG(logging::trivial::severity_level::error)
#define LogTrace MYLOG(logging::trivial::severity_level::trace)
#define LogFatal MYLOG(logging::trivial::severity_level::fatal)
#define LogDebug MYLOG(logging::trivial::severity_level::debug)
typedef boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> logger_t;
typedef boost::log::sinks::synchronous_sink< boost::log::sinks::text_file_backend > file_sink;
BOOST_LOG_GLOBAL_LOGGER(my_logger, logger_t)
#define MYLOG(severity) BOOST_LOG_SEV(my_logger::get(),severity) << "[" << __FUNCTION__ << ":" << __LINE__ <<"] "
#endif /* LOG_LOGGER_HXX */
在任何日志被扭曲为文件之前,记录器Init函数从Init函数调用。
void LoggerInit(string& log_dir)
{
boost::shared_ptr< file_sink > sink(new file_sink(
boost::log::keywords::target = log_dir,
boost::log::keywords::file_name = "BioEngine_%d_%m_%Y_%H_%M_%S_%N.log",
boost::log::keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::max_size = 10 * 1024 * 1024,
boost::log::keywords::min_free_space = 100 * 1024 * 1024,
boost::log::keywords::max_files = 10,
keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
boost::log::sinks::file::scan_method::scan_matching,
boost::log::keywords::open_mode = std::ios_base::app,
boost::log::keywords::auto_flush = true
));
sink->locked_backend()->set_file_collector(boost::log::sinks::file::make_collector(
boost::log::keywords::target = log_dir, /*< the target directory >*/
boost::log::keywords::max_size = 10 * 1024 * 1024, /*< maximum total size of the stored files, in bytes >*/
boost::log::keywords::min_free_space = 100 * 1024 * 1024, /*< minimum free space on the drive, in bytes >*/
boost::log::keywords::max_files = 10 /*< maximum number of stored files >*/
));
sink->set_formatter(
expr::stream
<< "[" << boost::log::expressions::attr<boost::log::process_id>("ProcessID")
<< "][" << boost::log::expressions::attr<boost::log::thread_id>("ThreadID")
<< "][" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%d-%m-%Y %H:%M:%S.%fz") << "]"
<< "[" << logging::trivial::severity << "]"
<< expr::smessage
);
sink->locked_backend()->scan_for_files(boost::log::sinks::file::scan_method::scan_matching, true);
logging::core::get()->add_sink(sink);
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
我修复了这个问题,现在只有1个日志被写入进程工作目录,在文件get被旋转后,它被扭曲到boost::log::keywords::target
void LoggerInit(string& log_dir)
{
logging::add_common_attributes();
boost::shared_ptr< logging::core > core = logging::core::get();
logging::add_file_log
(
keywords::file_name = "BioEngine_%d_%m_%Y__%H_%M_%S_%N.log",
keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::target = log_dir,
boost::log::keywords::min_free_space = 100 * 1024 * 1024,
boost::log::keywords::max_size = 100 * 1024 * 1024,
keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
boost::log::keywords::scan_method = boost::log::sinks::file::scan_matching,
keywords::auto_flush = true,
keywords::max_files = 10,
keywords::format =
(
expr::stream
<< "[" << boost::log::expressions::attr<boost::log::process_id>("ProcessID")
<< "][" << boost::log::expressions::attr<boost::log::thread_id>("ThreadID")
<< "][" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%d-%m-%Y %H:%M:%S.%f") << "]"
<< "[" << logging::trivial::severity << "]"
<< expr::smessage
)
);
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- boost Logger出现问题