boost log库使用四

原创 2013年12月04日 10:26:10

现在,将boost log应用到一个已经存在的C++程序中用来替代CppCMS log。我用它完成一些任务,单个日志文件尺寸小于10M,磁盘剩余空间最小要保持3G。

要达到这个目的,有些事情需要注意:

1. 包含正确的头文件:

#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/text_file_backend.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

2. 必须注册格式,否则你看不到severity字段

void InitLog() {
  boost::log::register_simple_formatter_factory< boost::log::trivial::severity_level, char >("Severity");
  logging::add_file_log(
   keywords::file_name = AppHolder::Instance().config().log_folder + "/sign_%Y-%m-%d_%H-%M-%S.%N.log",
   keywords::rotation_size = 10 * 1024 * 1024,
   keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
   keywords::format = "[%TimeStamp%] (%Severity%) : %Message%",
   keywords::min_free_space=3 * 1024 * 1024
   );
  logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug);
}

3. 在main函数中, 调用InitLog之后,要设置属性

InitLog();
    logging::add_common_attributes();
    using namespace logging::trivial;
    src::severity_logger< severity_level > lg;
    BOOST_LOG_SEV(lg, info) << "thread id: " << this_thread::get_id() << " Initialization succeeded";
现在,看一下日志文件,每个文件尺寸都在10M以下,零点时分会产生新的日志文件

 -rw-r--r-- 1 root root  10M Dec  3 23:16 sign_2013-12-03_23-00-01.0.log
-rw-r--r-- 1 root root  10M Dec  3 23:36 sign_2013-12-03_23-16-55.1.log
-rw-r--r-- 1 root root  10M Dec  3 23:55 sign_2013-12-03_23-36-21.2.log
-rw-r--r-- 1 root root 2.4M Dec  4 00:00 sign_2013-12-03_23-55-33.3.log
-rw-r--r-- 1 root root  10M Dec  4 00:19 sign_2013-12-04_00-00-00.4.log
-rw-r--r-- 1 root root  10M Dec  4 00:38 sign_2013-12-04_00-19-30.5.log
-rw-r--r-- 1 root root  10M Dec  4 00:58 sign_2013-12-04_00-38-48.6.log
-rw-r--r-- 1 root root  10M Dec  4 01:17 sign_2013-12-04_00-58-06.7.log
-rw-r--r-- 1 root root  10M Dec  4 01:36 sign_2013-12-04_01-17-19.8.log
-rw-r--r-- 1 root root  10M Dec  4 01:56 sign_2013-12-04_01-36-45.9.log
-rw-r--r-- 1 root root  10M Dec  4 02:15 sign_2013-12-04_01-56-07.10.log

看其中一个日志文件

[2013-Dec-04 10:17:45.728393] (debug) : object id: 529df217186f983f62ffa718 sent data: 01 30 30 30 43 44 31 4F 4B 31 30 03  sent size:12


4. 在其他.cc文件中,只需要include一个头文件

 #include <boost/log/trivial.hpp>
并使用宏 BOOST_LOG_TRIVIAL()

BOOST_LOG_TRIVIAL(debug) << "object id: " << id_ << " sent data: " << PrintBytesAsHexString(*data, data->size()) << " sent size:" << data->size();

现在可以了。

boost log内部有很多细节要学习。暂时没有时间分析它。将来有空会写相关博客。


版权声明:本文为博主原创文章,未经博主允许不得转载。

使用Nginx+CppCMS构建高效Web应用服务器

1:Why 当前,越来越多的网站使用了各种框架,大部分框架使用了脚本语言、半编译语言等。比如Java、Python、Php、C#.NET等。 这些框架大部分目标是解决快速开发、运行稳定。但是,...
  • tmchongye
  • tmchongye
  • 2017年03月18日 05:03
  • 3283

值得推荐的C/C++框架和库 (真的很强大)

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力...
  • maweifei
  • maweifei
  • 2016年07月08日 11:54
  • 575

boost log库 使用十一

不同的sinke使用不同的旋转日志
  • sheismylife
  • sheismylife
  • 2013年12月28日 13:40
  • 5029

boost::log库,示例代码

测试环境: [1]boost 1.57 [2]VS2013Update3 主要来源 [1]boost官网,做了些微小的改动。 最简单的示例 // TestBoostLog....
  • lee353086
  • lee353086
  • 2015年01月19日 16:28
  • 4201

CPPCMS从编译到开始

CPPCMS是一个流行的C++ web开发框架。但是编译过程复杂, 要借助很多工具和第三方代码库。 如果要找编译相关的信息可以访问这个人的博客: http://blog.csdn.net/lee353...
  • linfengmove
  • linfengmove
  • 2015年11月05日 16:49
  • 1005

使用cppcms开发JSON_RPC服务:高级用法

通过最近几天的研究,我发现cppcms的API有更高级更丰富的功能,比如URL的映射,JSON value与常用数据类型的转换。其配置文件也有很丰富的选项,比如多线程和多进程模式,网络参数等。 ...
  • bible521125
  • bible521125
  • 2014年08月13日 10:59
  • 1059

boost log 写不进本地的日志文件

当使用的logging sink是本地的日志文件时,需要用到add_file_log函数这时如果不加参数 keywords::auto_flush = true 那么日志并不会写进本地的日志文件中...
  • cdsdtt123
  • cdsdtt123
  • 2015年01月08日 15:41
  • 670

Boost.log库使用方法

做服务器开发首要做的事情,就是将日志系统建立起来。这个系统也是方便我们检查服务器的问题。 初始化日志系统这是一个初始化日志系统的代码。我这里是使用了一个配置文件来做boost.log的设置的。所以代...
  • erlang_hell
  • erlang_hell
  • 2016年08月25日 10:40
  • 2482

CppCMS和Nginx协同工作

为什么需要Nginx CppCMS自己已经支持Http访问,为什么还需要Nginx.一些原因是我们需要动态负载平衡,还有原因是安全问题。下面的文字来自于CppCMS站点。 CppCMS pro...
  • bible521125
  • bible521125
  • 2014年08月13日 10:29
  • 444

CPPCMS库在Windows下的使用

标题:CPPCMS库在Windows下的使用 时间:2012-7 作者:Kagula 环境: [1]WinXP SP3 [2]VisualStudio2008 SP1 [3]ZLib ...
  • bible521125
  • bible521125
  • 2014年08月13日 10:12
  • 678
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost log库使用四
举报原因:
原因补充:

(最多只允许输入30个字)