利用Asio搭建日志系统

  Asio(http://think-async.com)官方示例中给出了一个比较初步的日志服务,主要代码在basic_logger.hpplogger_service.hpplogger_service.cpp这3个文件。稍作改进(比如创建单独目录存放Log文件、格式化Log文件名以及每一行日志、定时创建新的日志文件)就可以搭建起一个可用的日志系统。

  新增一个logger类继承自basic_logger<logger_service>,在logger中创建定时器和定时事件,每隔规定时间发出请求重新生成一个日志文件。

  对basic_logger类中的use_file方法稍作修改,在此方法中创建存放Log文件的目录,并响应生成新Log文件的请求,Log文件可以利用生成时间命名以便进行区分。

  //basic_logger.hpp
  void use_file(const std::string& file)
  {    // create new dir for log files
    // create new log file‘s name depends on time    ... ...
    service_.use_file(impl_, file);
  }

  void log(const std::string& message)
  {
    service_.log(impl_, message);
  }

  从basic_logger.hpp的代码可以看出,真正的IO操作,无论是Log文件的创建还是Log记录的写入,都是在logger_service中进行的。写入Log时,不妨加上时间前缀,以便今后的日志分析。

  //logger_service.hpp
  void use_file(impl_type& /*impl*/, const std::string& file)
  {
       work_io_service_.post(boost::bind(
          &logger_service::use_file_impl, this, file));
  }

  void log(impl_type& impl, const std::string& message)
  {
     // add time prefix
     std::ostringstream os;
     os << ... ... << ": " << message;

     work_io_service_.post(boost::bind(
          &logger_service::log_impl, this, os.str()));
   }

  void use_file_impl(const std::string& file)
  {
     ofstream_.close();
     ofstream_.clear();
     ofstream_.open(file.c_str());
   }

   void log_impl(const std::string& text)
   {
     ofstream_ << text << std::endl;
   }

  在logger_service中,use_file和log都调用post方法把回调放入内部io对象的事件队列。use_file_impl负责创建新的Log文件,log_impl负责写入Log文件,所有的回调函数在单线程内被调用,这样即便它们共享ofstream_,也不需要加锁保护。

  在虚拟机测试一下性能,CentOS 6.5、单核、1G内存,写入100万条日志需15秒。

时间: 2024-11-02 22:28:41

利用Asio搭建日志系统的相关文章

.NET基于Eleasticsearch搭建日志系统实战演练(公开版)

一.需求背景介绍 1.1.需求描述 大家都知道C/S架构模式的客户端应用程序(比如:WinForm桌面应用.WPF.移动App应用程序.控制台应用程序.Windows服务等等)的日志记录都存储在本地客户端中,这样就导致有时候一旦客户端出现了的异常问题,为了快速地定位对应服务端出现的位置却极其的繁琐和不方便,就需要找到当时的客户端出现异常问题的日志快照记录. 所以说为了解决实时日志监控问题,ELK提供的一套的解决方案就应运而生了 .然而真实的现状往往比你现实的想象中的还有更糟糕,很有可能在我们的项

利用 ELK 搭建 Docker 容器化应用日志中心

利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志收集. 本文即将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其架构如下图所示: 架构图 镜像准备 ElasticSearch镜像 Logstash镜像 Kibana镜像 Nginx镜像(作为容器化应用来生产日志) 开启Linux系统Rsys

分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式处理,采用 flume 收集日志,发送到 kafka 队列做缓冲,storm 分布式实时框架进行消费处理,短期数据落地到 hbase.mongo中,长期数据进入 hadoop 中存储. 接下来打算将这其间所遇到的问题.学习到的知识记录整理下,作为备忘,作为分享,带给需要的人. 淘宝开源了许多产品组件

教你一步搭建Flume分布式日志系统

在前篇几十条业务线日志系统如何收集处理?中已经介绍了Flume的众多应用场景,那此篇中先介绍如何搭建单机版日志系统. 环境 CentOS7.0 Java1.8 下载 官网下载 http://flume.apache.org/download.html 当前最新版  apache-flume-1.7.0-bin.tar.gz 下载后上传到CentOS中的/usr/local/ 文件夹中,并解压到当前文件中重命名为flume170    /usr/local/flume170 tar -zxvf a

linux下利用elk+redis 搭建日志分析平台教程

linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了,下面我们来看一篇在linux下利用elk+redis 搭建日志分析平台教程,希望例子对各位有帮助. 这个是最新的elk+redis搭建日志分析平台,今年时间是2015年9月11日. Elk分别为 elasticsearch,logstash, kibana 官网为:https://www.elasti

分布式实时日志系统(二) 环境搭建之 flume 集群搭建/flume ng资料

最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式处理,采用 flume 收集日志,发送到 kafka 队列做缓冲,storm 分布式实时框架进行消费处理,短期数据落地到 hbase.mongo中,长期数据进入 hadoop 中存储. 接下来打算将这其间所遇到的问题.学习到的知识记录整理下,作为备忘,作为分享,带给需要的人. 学习flume ng的

Es+kafka搭建日志存储查询系统(设计)

现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高.Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es).Logstash.Kibana上个项目结合.Es就是基于Lucene的存储,索引的搜索引擎:logstash是提供输入输出及转化处理插件的日志标准化管道:Kibana提供可视化和查询统计的用户界面.往往这些开源项目并不是适合每一个公司的业务,业务不同,对开源项目扩展也就不同,logstash进行

ELK日志系统:Elasticsearch+Logstash+Kibana搭建教程

ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载包:jdk-8u131-linux-x64.rpm yum localinstall jdk-8u131-linux-x64.rpm mvn 安装 cd /usr/lo

2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(教程详情)

章节一 2018年 ELK课程计划和效果演示1.课程安排和效果演示简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示es: localhost:9200kibana http://localhost:5601/ 章节二 elasticSearch 6.2版本基础讲解到阿里云部署实战 2.搜索引擎知识介绍和相关框架简介:介绍搜索的基本概念,市面上主流的搜索框架elasticSearch和solr等对比什么是搜索:在海量信息中获取我们想要的信息传统做法:1.文档中使用系统的Fin