boost::log重新启动时会清空之前日志文件内容 的问题解决

一、boost::log日志
在应用程序中需要生成日志一边调试,QT有封装的日志级别(debug,info…),但是在UOS系统中debug级别的日志不能显示,而boost::log可以更灵活地设定自己的日志级别。

boost::log官方文档

sink是boost::log的日志接收器,自动注册到日志核心,如果不指定日志文件则默认将日志信息输出到console
shared_ptr: boost的智能共享指针,make_shared是其工厂函数

//text_ostream_backend 将日志记录化为一个或多个字符流
boost::shared_ptr< boost::log::sinks::text_ostream_backend > m_backend;
m_backend = boost::make_shared< boost::log::sinks::text_ostream_backend >();
m_backend->add_stream(
boost::shared_ptr< std::ostream >( &std::clog, boost::null_deleter()));

下面函数用于将path路径对应的文件作为日志文件对象,使日志信息写入这个文件

//下面函数中用到的m_log_path声明在.h文件中,用于保存日志文件对象
boost::filesystem::path m_log_path;

// 设定设定日志文件,并创建文件日志对象。原有对象将被替换成新的。
void  LogMgr::_LogPath(const boost::filesystem::path logpath) {

    // 如果文件名相同,则直接退出
	if (m_log_path == logpath) {
        qDebug()<<"m_log_fstream"<<m_log_fstream.get();
		return;
	}
    // 删除原来的日志文件对象,empty路径为空
    if (!m_log_path.empty()) {
		m_backend->remove_stream(m_log_fstream);

		m_log_fstream->close();
		m_log_fstream = 0;
    }
	m_log_path = logpath;

	if (!fs::exists(logpath.parent_path())) {
		if (!fs::create_directories(logpath.parent_path())) {
            throw std::logic_error(("Can't create directory: " + logpath.parent_path().string()).c_str());
		}
	}

	// 添加新的日志文件
	if (!m_log_path.empty()) {

        /*
         * std::ios_base::app表示写入时从上次结尾处添加;那么重新启动程序时日志文件就不会被清空
         * 那么以下的内容便是make_shared创建一个指向日志文件的指针,并将其添加到sink中
         * 这样新的日志会写入console和m_log_path
         */
        m_log_fstream = boost::make_shared<std::ofstream>(m_log_path.string(),std::ios_base::app);
       qDebug()<<"m_log_fstream"<<m_log_fstream.get();
        m_backend->add_stream(m_log_fstream);
	}
}
``

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值