目录

  • 下载与安装
  • log4cpp框架
    • Category
    • Appender
    • Layout
    • Priorty
    • Output
  • 功能
    • 日志级别
    • ⽇志格式化
    • ⽇志输出
    • 日志回滚
    • 日志配置文件

下载与安装

https://sourceforge.net/projects/log4cpp/

tar xvf log4cpp-1.1.3.tar.gz
cd log4cpp
./configure
make
make check
make install
ldconfig

头文件位于/usr/local/include/log4cpp/
库文件位于/usr/local/lib/

log4cpp框架

Category

Appender

  1. ⽇志输出到控制台
OstreamAppender(const std::string& name, std::ostream* stream);
  1. ⽇志输出到本地⽂件
FileAppender(const std::string& name, const std::string& fileName,bool append = true, mode_t mode = 00644);
  1. ⽇志通过⽹络输出到远程服务器
RemoteSyslogAppender(const std::string& name, const std::string& syslogName, const std::string& relayer, int facility = LOG_USER,int portNumber = 514);
  1. 日志输出到系统日志
SyslogAppender(const std::string& name, const std::string& syslogName, int facility = LOG_USER);
  1. 日志输出到String队列
StringQueueAppender(const std::string& name);
  1. 日志输出到Buffer
BufferingAppender(const std::string name, unsigned long max_size, std::auto_ptr<Appender> sink,std::auto_ptr<TriggeringEventEvaluator> evaluator);
  1. 日志在规定大小的文件中回滚输入
RollingFileAppender::RollingFileAppender(const std::string& name,const std::string& fileName, size_t maxFileSize, unsigned int maxBackupIndex,bool append,mode_t mode) :
  1. ……(可定制)

Layout

日志格式模板

  1. Basic layout
/*** BasicLayout is a simple fixed format Layout implementation. **/class LOG4CPP_EXPORT BasicLayout : public Layout {public:BasicLayout();virtual ~BasicLayout();/*** Formats the LoggingEvent in BasicLayout style:<br>* "timeStamp priority category ndc: message"**/virtual std::string format(const LoggingEvent& event);};
  1. simple layout
/*** BasicLayout is a simple fixed format Layout implementation. **/class LOG4CPP_EXPORT SimpleLayout : public Layout {public:SimpleLayout();virtual ~SimpleLayout();/*** Formats the LoggingEvent in SimpleLayout style:<br>* "priority - message"**/virtual std::string format(const LoggingEvent& event);};
  1. Pattern layout
/*** PatternLayout is a simple fixed format Layout implementation. **/class LOG4CPP_EXPORT PatternLayout : public Layout {public:/**The default conversion pattern**/static const char* DEFAULT_CONVERSION_PATTERN;/**A conversion pattern equivalent to the SimpleLayout.**/static const char* SIMPLE_CONVERSION_PATTERN;/**A conversion pattern equivalent to the BasicLayout.**/static const char* BASIC_CONVERSION_PATTERN;/**A conversion pattern equivalent to the TTCCLayout.Note: TTCCLayout is in log4j but not log4cpp.**/           static const char* TTCC_CONVERSION_PATTERN;PatternLayout();virtual ~PatternLayout();// NOTE: All double percentage signs ('%%') followed by a character//       in the following comments should actually be a single char.//       The doubles are included so that doxygen will print them correctly./*** Formats the LoggingEvent in the style set by* the setConversionPattern call. By default, set* to "%%m%%n"**/virtual std::string format(const LoggingEvent& event);/*** Sets the format of log lines handled by this* PatternLayout. By default, set to "%%m%%n".<br>* Format characters are as follows:<br>* <li><b>%%</b> - a single percent sign</li>* <li><b>%%c</b> - the category</li>* <li><b>%%d</b> - the date\n*  Date format: The date format character may be followed by a date format *  specifier enclosed between braces. For example, %%d{%%H:%%M:%%S,%%l} or %%d{%%d %%m %%Y %%H:%%M:%%S,%%l}.*  If no date format specifier is given then the following format is used:*  "Wed Jan 02 02:03:55 1980". The date format specifier admits the same syntax *  as the ANSI C function strftime, with 1 addition. The addition is the specifier*  %%l for milliseconds, padded with zeros to make 3 digits.</li>* <li><b>%%m</b> - the message</li>* <li><b>%%n</b> - the platform specific line separator</li>* <li><b>%%p</b> - the priority</li>* <li><b>%%r</b> - milliseconds since this layout was created.</li>* <li><b>%%R</b> - seconds since Jan 1, 1970</li>* <li><b>%%u</b> - clock ticks since process start</li>* <li><b>%%x</b> - the NDC</li>* @param conversionPattern the conversion pattern* @exception ConfigureFailure if the pattern is invalid**/virtual void setConversionPattern(const std::string& conversionPattern);virtual std::string getConversionPattern() const;virtual void clearConversionPattern();class LOG4CPP_EXPORT PatternComponent {public:inline virtual ~PatternComponent() {};virtual void append(std::ostringstream& out, const LoggingEvent& event) = 0;};private:typedef std::vector<PatternComponent*> ComponentVector; ComponentVector _components;std::string _conversionPattern;};
  1. PassThroughLayout
class PassThroughLayout : public Layout{public:virtual std::string format(const LoggingEvent& event) { return event.message; }};

Priorty

Output

三种输出风格

warn_log.log(log4cpp::Priority::WARN, "This will be a logged warning, darren = %d", 100);
warn_log.warnStream() << "This will be a logged warning, darren = " << 100;
warn_log.alert("Alert info");

功能

日志级别

日志等级值越小,打印等级越高

typedef enum {EMERG = 0,FATAL = 0,ALERT = 100,CRIT = 200,ERROR = 300,WARN = 400,NOTICE = 500,INFO = 600,DEBUG = 700,NOTSET = 800
} PriorityLevel;

⽇志格式化

/*********************************************************************
格式化布局。它的使⽤⽅式类似C语⾔中的printf,使⽤格式化它符串来描述输出格式。⽬前⽀持的转义
定义如下:
%% - 转义字符'%'
%c - Category
%d - ⽇期;⽇期可以进⼀步设置格式,⽤花括号包围,例如%d{%H:%M:%S,%l}。
⽇期的格式符号与ANSI C函数strftime中的⼀致。但增加了⼀个格式符号%l,表示毫秒,占三个
⼗进制位。
%m - 消息
%n - 换⾏符;会根据平台的不同⽽不同,但对⽤户透明。
%p - 优先级
%r - ⾃从layout被创建后的毫秒数
%R - 从1970年1⽉1⽇开始到⽬前为⽌的秒数
%u - 进程开始到⽬前为⽌的时钟周期数
%x - NDC
%t - 线程id
***********************************************************************/

⽇志输出

  1. ⽇志输出到控制台
  2. ⽇志输出到本地⽂件
  3. ⽇志通过⽹络输出到远程服务器
  4. ……(可定制)

日志回滚

  1. 本地⽇志⽀持最⼤⽂件限制
  2. 当本地⽇志到达最⼤⽂件限制的时候新建⼀个⽂件
  3. 每天⾄少⼀个⽂件

日志配置文件

该功能可以将日志打印建立层级关系,如下图,他们能够同步从上级将日志输出,不同的权限(root、sub1、sub2、sub1.sub1……)可以定制不同的输出方式,比如输出到服务器,比如输出到文件等,是否需要将日志向上级汇报,可以通过配置文件进行设置

  1. 加载日志配置文件
log4cpp::PropertyConfigurator::configure("log4cpp_lsy_test.conf");
  1. 获取输出层级
log4cpp::Category& root = log4cpp::Category::getRoot();log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1"));log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1"));log4cpp::Category& sub1_sub2 = log4cpp::Category::getInstance(std::string("sub1.sub2"));
  1. 配置是否向上级汇报
# 默认是true,即默认向上级汇报
log4cpp.additivity.sub1=false
  1. 配置启用某个层级
    启用层级的时候,可以配置两个参数
    第一个参数:打印等级
    第二个参数:配置对应的adaptor
log4cpp.rootCategory=DEBUG, rootAppender
log4cpp.category.sub1=,A1
log4cpp.category.sub2=INFO
log4cpp.category.sub1.sub2=, A2
  1. 设置adaptor
# 配置为控制台输出
log4cpp.appender.rootAppender=org.apache.log4cpp.ConsoleAppender
log4cpp.appender.rootAppender.layout=org.apache.log4cpp.BasicLayout
# 配置为文件输出
log4cpp.appender.A1=org.apache.log4cpp.FileAppender
log4cpp.appender.A1.fileName=A1.log
log4cpp.appender.A1.layout=org.apache.log4cpp.SimpleLayout
# 配置为控制台输出
log4cpp.appender.A2=org.apache.log4cpp.ConsoleAppender
log4cpp.appender.A2.layout=org.apache.log4cpp.PatternLayout
# 配置输出模板
log4cpp.appender.A2.layout.ConversionPattern=%d %p %x - %m%n

log4cpp初入门相关推荐

  1. 学python有哪些用途-初入门学习python有哪些用途?

    python是人工智能的重要编程语言,无论发展前景还是就业方向,不可限量.更重要的是python还是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.那么初入门学习python有哪些用途呢 ...

  2. 1_RabbitMQ初入门入门Hello消费者+生产者

    文章目录 1_RabbitMQ初入门 1.RabbitMQ的介绍 1.工作原理&发送/接收消息的流程 2. 为什么要使用消息队列? 3.使用了消息队列有什么缺点? 2.安装RabbitMQ 3 ...

  3. Java入门基础及面试100题--初入门

    Java入门基础及面试100题 注:适合应届毕业生或java初入门者 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程, ...

  4. [python爬虫之路day19:] scrapy框架初入门day1——爬取百思不得姐段子

    好久没学习爬虫了,今天再来记录一篇我的初入门scrapy. 首先scrapy是针对大型数据的爬取,简单便捷,但是需要操作多个文件以下介绍: 写一个爬虫,需要做很多的事情.比如: 发送网络请求, 数据解 ...

  5. 第16天-树莓派初入门(一)—点亮-2016年9月26日 21:33:24

    第16天-树莓派初入门(一)-点亮-2016年9月26日 21:33:24 标题里的第16天,不是接触树莓派16天,而是在我心中另一个重要的纪念的计时.. 下午刚收到订购的SD卡,晚上就迫不及待的鼓捣 ...

  6. JavaLeetCode 初入门——009. 回文数

    Java&LeetCode 初入门--009. 回文数 题目 个人解法 官方解法 思路 算法 文内代码全部采用JAVA语言. 题目 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序( ...

  7. SVPWM 三相逆变器电压空间矢量调制 初入门

    1.引言 首先需要说明的是 ,本文只适用于初入门的人看,因为本文并不涉及具体怎么实现的,只涉及到原理讲解,规避了具体怎么实现. SVPWM的思想起源于交流异步电机变频调速.但这种调制方法现在已经广泛用 ...

  8. 《量子张量网络机器学习》——量子力学初入门(一)

    量子力学初入门(一) 量子力学基本概念 量子逻辑门 量子门操作与并行计算 不确定性原理 使用Quantum糖进一步理解不确定性原理 恐怖的双缝干涉实验: 量子力学基本概念 薛定谔的猫作为一个通俗易懂的 ...

  9. ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门

    前言 来啦老铁! 笔者学习Spring Boot有一段时间了,截至目前已实践.总结了26篇Spring Boot系列学习文章,感兴趣的同学可以关注专题一起学习吧! Spring Boot全家桶 在上一 ...

最新文章

  1. SQLSERVER中如何忽略索引提示
  2. DevExpress WinFormsSuite 本地化(Simplified Chinese OR Traditional Chinese)
  3. Oracle编程入门经典 第6章 在Oracle中处理语句
  4. 字符集之间转换(UTF-8,UNICODE,Gb2312) c++
  5. 关于github里readme编辑的方法
  6. nginx-rtmp常用指令
  7. HTML与CSS基础之子和后代元素选择器(八)
  8. oracle 导库时日志满了,oracle rac 11g 日志占满系统盘导致数据库down掉
  9. php实现排序,PHP实现各种排序
  10. vue.js学习02之vue-cli脚手架创建项目环境搭建
  11. “格力手机”的蝴蝶效应
  12. nbu备份文件失败,提示信息NBU status: 2074, EMM status: Disk volume is down
  13. 2021年起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)报名考试
  14. 戴尔微型计算机7050配置,戴尔 Dell OptiPlex 7060 微型机体验分享 - 1升的迷你小钢炮...
  15. 2022最新MySQL面试题-有详细完整的答案解析
  16. 计算机学win7画图,Windows7电脑基础使用画图程序画一个小鸭
  17. docker ps 命令显示格式化和显示完整信息
  18. iPhone,iPad如何获取WIFI名称即SSID
  19. java:编写一个求平方的窗体
  20. 窥视C++细节-使用tie函数解包pair对象的原理

热门文章

  1. 西安面试第一天面试问题总结
  2. PCIEBXMCx4板卡
  3. strncpy()函数详解
  4. strcpy()、strncpy()、strlcpy()、strncpy_s()函数
  5. CPU和主存包括什么?
  6. 谷歌排名影响因素最新研究(SEM RUSH版)
  7. cath数据库fasta备注_sam's note
  8. linux下/proc/sysrq-trigger详解
  9. 教师职业道德与专业发展
  10. 【MyBatis 面试题】