https://www.cnblogs.com/diegodu/p/6100804.html

log4cpp有3个主要的组件:categories(类别)、appenders(附加目的地)、和 layouts(布局)

log4cpp当前提供以下layout格式: 

log4cpp::BasicLayout // 以“时间戳 优先级(priority,下文介绍) 类别(category,下文介绍)  NDC标签

log4cpp::PatternLayout // 让用户根据类似于 C 语言 printf 函数的转换模式来指定输出格式。

log4cpp::SimpleLayout // 以“优先级(priority) - 日志信息”格式显示。

log4cpp当前提供以下appender:

log4cpp::IdsaAppender // 发送到IDS或者logger,

log4cpp::FileAppender // 输出到文件

log4cpp::RollingFileAppender // 输出到回卷文件,即当文件到达某个大小后回卷

log4cpp::OstreamAppender // 输出到一个ostream类

log4cpp::RemoteSyslogAppender // 输出到远程syslog服务器

log4cpp::StringQueueAppender // 内存队列

log4cpp::SyslogAppender // 本地syslog

log4cpp::Win32DebugAppender // 发送到缺省系统调试器

log4cpp::NTEventLogAppender // 发送到win 事件日志

优先级:

当消息的优先级大于等于category的优先级时,这个消息才会被category记录,否则被忽略。

NOTSET < DEBUG < INFO < NOTICE < WARN < ERROR < CRIT < ALERT < FATAL = EMERG

category被组织成一个树,子category创建时优先级缺省NOTSET,category缺省会继承父category的appender。而如果不希望这种appender的继承关系,log4cpp允许使用additivity 标签,为false时新的appender取代category的appender列表。

log4cpp 的 category 分为 rootCategory 和其它自定义的 category。而每个 category 都可以输出到多个 appender。并且 category 也是有包含关系的。

rootCategory 就是所有 category 的根。而自定义的 category 也可以在配置文件中定义其包含关系。

例子:

log4cpp.rootCategory=DEBUG, console, sample

这个定义里,指定了 rootCategory 的 log 优先级是 DEBUG,其 appender 有 2 个,分别是 console 和 sample。

即是说,等号右边内容以逗号分隔,第一项是优先级别,接下来的都是 appender 名字,可以有一个或多个。

现在来看看自定义的 category

log4cpp.category.demo=DEBUG, sample

这里定义了一个名字为 demo 的 category,其优先级为 DEBUG,appender 为 sample。

注意, category 和 appender 名字可以完全相同。

再来看看有包含关系的 category 的定义

log4cpp.category.demo.son=DEBUG, son

log4cpp.category.demo.daughter=DEBUG, daughter

以上定义了 2 个 category,名字分别为 son 和 daughter,其父 category 为 demo。

son 产生的 log 会写到 son 和 demo 的 appender 中。同理,daughter 的 log 会写到 daughter 和 demo 的 appender 中。

ConsoleAppender 的例子

log4cpp.appender.console=ConsoleAppender

log4cpp.appender.console.layout=PatternLayout

log4cpp.appender.console.layout.ConversionPattern=%d [%p] - %m%n

FileAppender 的例子 

log4cpp.appender.sample=FileAppender

log4cpp.appender.sample.fileName=sample.log

log4cpp.appender.sample.layout=PatternLayout

log4cpp.appender.sample.layout.ConversionPattern=%d [%p] - %m%n

完整例子:

#定义 root category 的属性

log4cpp.rootCategory=DEBUG, console

#定义 console 属性

log4cpp.appender.console=ConsoleAppender

log4cpp.appender.console.layout=PatternLayout

log4cpp.appender.console.layout.ConversionPattern=%d [%p] - %m%n

#定义 sample category 的属性

log4cpp.category.sample=DEBUG, sample

#定义 sample appender 的属性

log4cpp.appender.sample=FileAppender

log4cpp.appender.sample.fileName=sample.log

log4cpp.appender.sample.layout=PatternLayout

log4cpp.appender.sample.layout.ConversionPattern=%d [%p] - %m%n

#定义 sample.son category 的属性

log4cpp.category.sample.son=DEBUG, son

#定义 son appender 的属性

log4cpp.appender.son=FileAppender

log4cpp.appender.son.fileName=son.log

log4cpp.appender.son.layout=PatternLayout

log4cpp.appender.son.layout.ConversionPattern=%d [%p] - %m%n

#定义 sample.daughter category 的属性

log4cpp.category.sample.daughter=DEBUG, daughter

#定义 daughter appender 的属性

log4cpp.appender.daughter=FileAppender

log4cpp.appender.daughter.fileName=daughter.log

log4cpp.appender.daughter.layout=PatternLayout

log4cpp.appender.daughter.layout.ConversionPattern=%d [%p] - %m%n

ConversionPattern 参数解读,参阅源码 log4cpp-0.3.5rc3\src\PatternLayout.cpp

%m log message 内容, 即 用户写 log 的具体信息

%n 回车换行

%c category 名字

%d 时间戳

%p 优先级

%r 距离上一次写 log 的间隔, 单位毫秒

%R 距离上一次写 log 的间隔, 单位秒

%t 线程名

%u 处理器时间

%x NDC ?

代码使用配置文件:

try  { log4cpp::PropertyConfigurator::configure("log4cpp.properties");
} catch (log4cpp::ConfigureFailure & f)  {  std::cerr << "configure problem " << f.what() << std::endl;
}  

初始化完成后,就可以这样用了

log4cpp::Category & log = log4cpp::Category::getInstance(std::string("sample"));
log.debug("test debug log");
log.info("test info log");  // 用 sample.son
log4cpp::Category & log = log4cpp::Category::getInstance(std::string("sample.son"));
log.debug("test debug log of son");
log.info("test info log of son");  // 用 sample.daughter
log4cpp::Category & log = log4cpp::Category::getInstance(std::string("sample.daughter"));  log.debug("test debug log of daughter");
log.info("test info log of daughter");  

Log4cpp 配置文件格式说明相关推荐

  1. 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )

    文章目录 前言 一.Groovy 配置文件格式 二.Groovy 配置文件读取 二.完整配置文件及解析代码示例 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 G ...

  2. jdk db版本_企业视频会议系统音视频通话EasyRTC-SFU版本研发中更合适的配置文件格式-TOML配置介绍 - TSINGSEE...

    在 EasyRTC-SFU 版本的开发过程中,很多配置需要存储在配置文件中.开发人员经常使用的配置文件有 ini.json.xml.yaml 等格式,在综合分析各种文件格式的优劣后,我们最终确认使用 ...

  3. 常用配置文件格式比较

    分类 properties josn yaml hocon 轻松支持比较复杂的配置 除了properties 和 json 在复杂的配置文件下,可选择YAML或HOCON YAML: 适用场景:多层级 ...

  4. 程序常用配置文件格式介绍

    文章目录 1.键值对 2.JSON 2.1 JSON 语法 2.2 JSON 实例 2.3 JSON 解析 3.XML 3.1 XML 语法 3.2 XML 实例 3.3 XML 解析 4.YAML ...

  5. 托管配置文件格式不正确 error: unsupported rule type RULE-SET

    问题 托管配置文件格式不正确: rules[0] [RULE-SET,Unbreak,DIRECT] error: unsupported rule type RULE-SET 解决方案 在订阅链接末 ...

  6. 在ensp安装过程中遇到的错误(40 41错误,usg6000v导入时配置文件格式错误)

    这个ensp安装配置我前前后后捣鼓了好几天,好不容易整好了,在这里稍微记录一下,希望能帮助大家少走弯路. 40 41错误 1. 首先,可以把virtualbox卸载了重装一遍,版本我用的是5.2.30 ...

  7. python 配置文件一般用什么格式_配置文件格式,哪个最强?

    1. 配置文件是什么? 配置文件是用于配置计算机程序的参数和初始化设置的文件.如果没有这些配置,程序可能无法执行. 比如现在你要开发一款app, 当部署这款app时,你需要配置它的 host 地址.数 ...

  8. 配置文件格式详解之终极无惑

    文章目录 1.键值对 2.JSON 2.1 JSON 语法 2.2 JSON 实例 2.3 JSON 解析 3.XML 3.1 XML 语法 3.2 XML 实例 3.3 XML 解析 4.YAML ...

  9. 【视觉定位UV】Mark点配置文件格式说明

    00. 目录 文章目录 00. 目录 01. Mark点概述 02. Mark点分类 03. Mark点组成 04. Mark点设计规范 05. Mark点文件格式 06. 附录 01. Mark点概 ...

  10. 前端常见配置文件格式及选择

    背景 自己撸一个脚手架的时候,需要为脚手架提供一个配置文件,然后发现有好多种配置文件的格式可以选择,比如.json .js或.yml等,一时有点迷茫应该选择哪个格式,查阅一些资料总结此文,以供查阅. ...

最新文章

  1. C++开源代码项目汇总
  2. python成长之路——第四天
  3. python 图片地址_python解码data:image开头的图片地址
  4. Linux 进程 | 进程间的通信方式
  5. 开发接口文档_更优更稳更好,看文档驱动开发模式在AIMS中的优势
  6. 《大数据》专题征文:医学大数据(截稿时间:2020年5月31日)
  7. toj 4315 一二三
  8. 阿里云释放数据能力 开启大数据元年
  9. MongoDB的使用技巧(转)
  10. HTML简介与历史版本
  11. linux关于tcp协议ack的实现--总结和公平性问题
  12. 惠普台式电脑重装系统仍然启动不了,怎么办
  13. java高并发编程讲解_有人看过 java高并发编程详解 汪文君著 这本书吗?
  14. c语言答辩ppt案例,c语言ppt例子课题答辩ppt成品中南民族大学.ppt
  15. java正则表达式中的斜杠,java正则表达式匹配斜杠[Java编程]
  16. 自我实现型的人的五个特质
  17. SOLIDWORKS参数化设计方式几多种,你都用恰当了吗?
  18. 微信公众号历史文章采集
  19. 终于知道google为什么有时不能用了
  20. 【2023】北京大学计算机考研信息汇总

热门文章

  1. excel服务器bom修改,勤哲Excel服务器物料清单BOM表的实现方法
  2. python从入门到精通 清华大学出版社-清华大学出版社 python
  3. 【电路设计】1N系列二极管型号总结
  4. 《21天学通Java(第7版)》—— 导读
  5. ckplayer插件播放m3u8视频
  6. Matlab来实现DDS功能
  7. CANape操作指南
  8. PDF以及PPT技巧
  9. PreScan传感器(零)——通用配置
  10. 微信公众号自动发布文章