boost.log(九) 配置文件

前面几节中描述了Boost.Log 的基础知识,对Boost.Log 库的操作我们都是在C++代码中进行中,这样就会有一些不便的地方。比如说我们想要更改一下输出格式或者过滤条件,都必须对C++代码进行更改,并且还得编译一次(感觉编译时间还有点长)。其实Boost.Log 里面已经为这个问题提供了一种解决方案,就是通过配置文件来初始化Boost.Log 库,C++这边的代码也比较简单,就是这样的:

  1. std::ifstream settings("settings.txt");
  2. if (!settings.is_open())
  3. throw std::runtime_error("Could not open settings.txt file");
  4. logging::init_from_stream(settings);

示例代码:

就这几句代码我们就可以完成对Boost.Log 的简单初始化了,不用自己去写格式化、接收器、过滤条件什么的,非常方便。现在来看看"settings.txt"文件,看看它是怎么让Boost.Log进行初始化的,下面是"settings.txt"文件的内容:

  1. #
  2. # Copyright Andrey Semashev 2007 - 2014.
  3. # Distributed under the Boost Software License, Version 1.0.
  4. # (See accompanying file LICENSE_1_0.txt or copy at
  5. # http://www.boost.org/LICENSE_1_0.txt)
  6. #
  7. [Sinks.TextFileSettings]
  8. Destination=TextFile
  9. FileName=test.log
  10. AutoFlush=true
  11. Format="[%TimeStamp%] [%Severity%]\n%MyScopes%\n\t:: %Message%"
  12. Asynchronous=false

Boost.Log库就是通过读取上面那些选项及所对应的数据来进行初始化操作的,下面列出所有默认的可用选项,并解释一下的常用选项的含义:

  1. // Core 配置
  2. Core
  3. // 过滤条件, 例如 "%Severity% >= debug")
  4. Filter
  5. // 禁用日志, true 或者 flase)
  6. DisableLogging
  7. // 接收器配置
  8. Sinks
  9. // 输出位置,有五个选项,每个选项对应一系列相应选项
  10. Destination(Console/TextFile/Syslog/Debugger/SimpleEventLog)
  11. // 控制台对应的选项
  12. ##Console
  13. // 是否宽字节 true 或者 flase
  14. Wide
  15. // 自动刷新 true 或者 flase
  16. AutoFlush
  17. // 过滤条件, 例如 "%Severity% >= debug")
  18. Filter
  19. // 异步方式 true 或者 flase
  20. Asynchronous
  21. // 格式化 例如 "[%TimeStamp%] [%Severity%]\n%MyScopes%\n\t:: %Message%"
  22. Format
  23. // 文件对应的选项
  24. ##TextFile
  25. // 文件名 可以直接输入文件名也可以输出文件名的格式,例如test.log和"%Y-%m-%d_%N.log"
  26. FileName
  27. // 单个文件大小,超过此大小自动建立新文件 单位是字节
  28. RotationSize
  29. // 多久后自动建立新文件 单位是秒
  30. RotationInterval
  31. // 什么时候自动建立新文件 例如每个0点创建新文件就是:"00:00:00"
  32. RotationTimePoint
  33. AutoFlush
  34. // 是否将记录追加到原有文件 true 或者 flase
  35. Append
  36. // 输出文件夹(有此选项后才能有下列选项)
  37. Target
  38. // 文件夹最大大小 单位是字节
  39. MaxSize
  40. // 文件夹最小预留空间 单位是字节
  41. MinFreeSpace
  42. // 扫描文件 true 或者 flase
  43. ScanForFiles(ALL/Matching)
  44. Filter
  45. Asychronous
  46. Format
  47. ##Syslog
  48. LocalAddress
  49. TargetAddress
  50. Filter
  51. Asynchronous
  52. Format
  53. ##Debugger
  54. Wide
  55. Filter
  56. Asynchronous
  57. Format
  58. ##SimpleEventLog
  59. Wide
  60. LogName
  61. LogSource
  62. Registration
  63. Filter
  64. Asynchronous
  65. Format

[注意]Format的值不支持==、||、&&等运算符,取而代之的是=、or、and和not。

上面的代码Format="[%TimeStamp%] [%Severity%]\n%MyScopes%\n\t:: %Message%", 如果你想在配置文件里面使用%TimeStamp%等属性来格式化记录,那么就必须要在C++里面注册这个属性,并且要在Boost.Log的core里为这个属性注册一个格式工厂。如果你想像Filter="%Severity% >= trace"这样来过滤日志记录,你就得在Boost.Log的core里为这个属性注册一个过滤工厂。如果你想要自己增添选项这也是允许的,你需要在Boost.Log的core里注册一个接收器工厂,然后实现它。具体的方法就不详解了,在上面的源码中可以找到答案。

附件列表

时间: 2024-11-07 21:37:22

boost.log(九) 配置文件的相关文章

boost.log要点笔记

常用简写: namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; 要点: 结构图要牢记在

boost.log在项目中应用

#pragma once #include <string> #include <boost/log/trivial.hpp> using std::string; #define LOG_DEBUG\ BOOST_LOG_SEV((MyLog::s_slg),(boost::log::trivial::debug)) #define LOG_INFO\ BOOST_LOG_SEV((MyLog::s_slg),(boost::log::trivial::info)) #defin

Boost Log 基本用法

Boost Log 基本用法 flyfish 2014-11-5 根据boost提供的代码示例,学习Boost Log 的基本用法 前提 boost版本boost_1_56_0 示例代码文件夹 boost_1_56_0\libs\log\example\basic_usage 使用的单词很形象,整个过程就像流水一样 假设要输出的日志比作水 水                     (Hello, World!) 水槽                 (sink) 流向哪里        (co

boost.log 的使用

在编译boost.log 的示例程序时,遇到了下面的错误: zhifan$ make boost_log LDFLAGS='-lboost_log-mt' Undefined symbols for architecture x86_64: "boost::log::v2s_mt_posix::record_view::public_data::destroy(boost::log::v2s_mt_posix::record_view::public_data const*)", re

Boost log 简单使用

Boost log 简单使用 flyfish 2014-11-8 该示例是在VC2010 MFC Unicode环境下使用 内容包括 1 启动关闭日志 2 设置日志存储路径 3 设置输出日志等级 4 日志是否立即写入文件 5 设置单个文件的大小 6 设置磁盘最小可利用空间 Logger.h #pragma once #include <cassert> #include <iostream> #include <fstream> #include <boost/l

boost.log(八)宽字符记录

宽字符记录 Boost.Log支持包含本地字符集字符串的日志记录.基本上有两种方式做这件事.在 UNIX 系统上通常使用一些多字节字符编码 (例如 UTF-8) 用来表示本地字符.在这种情况下,Boost.Log库可以直接以纯 ASCII 的方式记录而不需要其它额外的设置. 在Windows 上常见的做法是使用宽字符串来表示本地字符串.此外大多数系统 API 也是使用的宽字符,这需要特定于 Windows 的接收器也支持宽字符.另一方面,通用的接收器,例如 TextFile,是面向字节的,你写入

boost.log(七)再谈过滤

再谈过滤 我们已经在前面的章节接触过滤,但只是浅尝辄止.我们现在能够添加日志记录并设置接收器的属性,我们需要建立复杂的过滤功能.让我们看下这个例子: #include <string> #include <fstream> #include <iomanip> #include <boost/log/core.hpp> #include <boost/smart_ptr.hpp> #include <boost/log/sinks.hpp&

boost.log(四)记录器

记录器对象 在上个章节的接收器部分我们已经知道了boost.log库是如何存储日志的,现在是时候去尝试记录日志了.首先我们要创建一个记录器,这非常简单: boost::log::sources::logger lg; [注意]boost.log库在后台给记录器(logger)提供了写的功能,就如同BOOST_LOG_TRIVIAL 宏一样. 与接收器不同,记录器无须在任何地方注册,因为它们是直接与日志记录核心进行交互的.此外请注意boost.log库提供了两个版本的记录器: 线程安全的(logg

boost.log(一)打印日志

打印输出 对于那些不想阅读手册,只需要一个简单的工具用于日志记录的人.你可以直接在控制台中输出日志信息,首先你需要包含头文件boost/log/trivial.hpp,然后编写下面的代码: #include <iostream> #include <boost/log/trivial.hpp> int main(int, char*[]) { BOOST_LOG_TRIVIAL(trace) << "A trace severity message"