Log4cpp 配置文件格式说明
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 配置文件格式说明相关推荐
- 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
文章目录 前言 一.Groovy 配置文件格式 二.Groovy 配置文件读取 二.完整配置文件及解析代码示例 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 G ...
- jdk db版本_企业视频会议系统音视频通话EasyRTC-SFU版本研发中更合适的配置文件格式-TOML配置介绍 - TSINGSEE...
在 EasyRTC-SFU 版本的开发过程中,很多配置需要存储在配置文件中.开发人员经常使用的配置文件有 ini.json.xml.yaml 等格式,在综合分析各种文件格式的优劣后,我们最终确认使用 ...
- 常用配置文件格式比较
分类 properties josn yaml hocon 轻松支持比较复杂的配置 除了properties 和 json 在复杂的配置文件下,可选择YAML或HOCON YAML: 适用场景:多层级 ...
- 程序常用配置文件格式介绍
文章目录 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 ...
- 托管配置文件格式不正确 error: unsupported rule type RULE-SET
问题 托管配置文件格式不正确: rules[0] [RULE-SET,Unbreak,DIRECT] error: unsupported rule type RULE-SET 解决方案 在订阅链接末 ...
- 在ensp安装过程中遇到的错误(40 41错误,usg6000v导入时配置文件格式错误)
这个ensp安装配置我前前后后捣鼓了好几天,好不容易整好了,在这里稍微记录一下,希望能帮助大家少走弯路. 40 41错误 1. 首先,可以把virtualbox卸载了重装一遍,版本我用的是5.2.30 ...
- python 配置文件一般用什么格式_配置文件格式,哪个最强?
1. 配置文件是什么? 配置文件是用于配置计算机程序的参数和初始化设置的文件.如果没有这些配置,程序可能无法执行. 比如现在你要开发一款app, 当部署这款app时,你需要配置它的 host 地址.数 ...
- 配置文件格式详解之终极无惑
文章目录 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 ...
- 【视觉定位UV】Mark点配置文件格式说明
00. 目录 文章目录 00. 目录 01. Mark点概述 02. Mark点分类 03. Mark点组成 04. Mark点设计规范 05. Mark点文件格式 06. 附录 01. Mark点概 ...
- 前端常见配置文件格式及选择
背景 自己撸一个脚手架的时候,需要为脚手架提供一个配置文件,然后发现有好多种配置文件的格式可以选择,比如.json .js或.yml等,一时有点迷茫应该选择哪个格式,查阅一些资料总结此文,以供查阅. ...
最新文章
- C++开源代码项目汇总
- python成长之路——第四天
- python 图片地址_python解码data:image开头的图片地址
- Linux 进程 | 进程间的通信方式
- 开发接口文档_更优更稳更好,看文档驱动开发模式在AIMS中的优势
- 《大数据》专题征文:医学大数据(截稿时间:2020年5月31日)
- toj 4315 一二三
- 阿里云释放数据能力 开启大数据元年
- MongoDB的使用技巧(转)
- HTML简介与历史版本
- linux关于tcp协议ack的实现--总结和公平性问题
- 惠普台式电脑重装系统仍然启动不了,怎么办
- java高并发编程讲解_有人看过 java高并发编程详解 汪文君著 这本书吗?
- c语言答辩ppt案例,c语言ppt例子课题答辩ppt成品中南民族大学.ppt
- java正则表达式中的斜杠,java正则表达式匹配斜杠[Java编程]
- 自我实现型的人的五个特质
- SOLIDWORKS参数化设计方式几多种,你都用恰当了吗?
- 微信公众号历史文章采集
- 终于知道google为什么有时不能用了
- 【2023】北京大学计算机考研信息汇总