log4cpp 封装

log4cpp 封装最近学习 log4cpp 试着封装了下 mark 下 includeiostr includelog4c Category hh includelog4c Appender hh includelog4c FileAppender hh includelog4c RollingFileA hh includelog4c Ostrea

最近学习log4cpp,试着封装了下,mark下。

#include<iostream> #include<log4cpp/Category.hh> #include<log4cpp/Appender.hh> #include<log4cpp/FileAppender.hh> #include<log4cpp/RollingFileAppender.hh> #include<log4cpp/OstreamAppender.hh> #include<log4cpp/PatternLayout.hh> #include<log4cpp/Priority.hh> using namespace std; //1.实现日志文件信息在终端上显示 //2.实现日志文件信息在终端和日志文件同时显示 //3.实现回滚备份,替换掉2即可 class Mylog { public: Mylog(); ~Mylog(); public: void error(const char * msg); void warn(const char * msg); void info(const char * msg); void debug(const char * msg); void set_priority(const char *); private: //布局 log4cpp::PatternLayout * pLayout_cout_; log4cpp::PatternLayout * pLayout_file_; log4cpp::PatternLayout * pLayout_rollfile_; //依附目标文件 log4cpp::OstreamAppender * osAppender_; log4cpp::FileAppender * fileAppender_; log4cpp::RollingFileAppender * rollfileAppender_; //种类 log4cpp::Category & root_; }; //构造函数 //引用必须用初始化列表初始化 Mylog::Mylog():root_(log4cpp::Category::getInstance("infoCategory")) { std::cout << "Mylog()" << std::endl; //创建Layout并设置成pattern模式 pLayout_cout_ = new log4cpp::PatternLayout(); pLayout_cout_ -> setConversionPattern("%d: %p %c %x: %m%n"); pLayout_file_ = new log4cpp::PatternLayout(); pLayout_file_ -> setConversionPattern("%d: %p %c %x: %m%n"); pLayout_rollfile_ = new log4cpp::PatternLayout(); pLayout_rollfile_ -> setConversionPattern("%d: %p %c %x: %m%n"); //创建Appender并将layout对象绑定 osAppender_ = new log4cpp::OstreamAppender("osAppender_", &std::cout); osAppender_ -> setLayout(pLayout_cout_); //日志文件保存在固定的文件夹中 fileAppender_ = new log4cpp::FileAppender("fileAppender_", "/home/lukey/log/myfile_log"); fileAppender_ -> setLayout(pLayout_file_); //回滚文件也是保存在固定地方,为了便于测试把文件大小设置成1*1024 rollfileAppender_ = new log4cpp::RollingFileAppender("rollfileAppender_","/home/lukey/log/myrolfile_log", 1*1024, 3); rollfileAppender_ -> setLayout(pLayout_rollfile_); //log4cpp::Category & root_ = log4cpp::Category::getInstance("infoCategory");//不能再这初始化,引用必须在初始化列表中 //把Appender对象附到category上,一个category可以有多个appender root_.addAppender(osAppender_); root_.addAppender(fileAppender_); root_.addAppender(rollfileAppender_); } //设置优先级 void Mylog::set_priority(const char * prioritylevel) { if(prioritylevel == "DEBUG") root_.setPriority(log4cpp::Priority::DEBUG); else if(prioritylevel == "ERROR") root_.setPriority(log4cpp::Priority::ERROR); else if(prioritylevel == "WARN") root_.setPriority(log4cpp::Priority::WARN); else if(prioritylevel == "INFO") root_.setPriority(log4cpp::Priority::INFO); else //把优先级设置到最低 root_.setPriority(801); } void Mylog::error(const char * msg) { std::cout << "error()" << std::endl; root_.error(msg); } void Mylog::warn(const char * msg) { std::cout << "warn()" << std::endl; root_.warn(msg); } void Mylog::info(const char * msg) { std::cout << "info()" << std::endl; root_.info(msg); } void Mylog::debug(const char * msg) { std::cout << "debug()" << std::endl; root_.debug(msg); } //析构函数 Mylog::~Mylog() { std::cout << "~Mylog()" << std::endl; log4cpp::Category::shutdown(); } //简单测试所写的封装 int main(int argc, char * argv[]) { const char * msg = "hello,world"; const char * priority = "ERROR"; Mylog mylog; mylog.set_priority(priority); mylog.error(msg); mylog.warn(msg); mylog.info(msg); mylog.debug(msg); return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232756.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java8中 Date和LocalDate的相互转换[通俗易懂]

    Java8中 Date和LocalDate的相互转换[通俗易懂]一.简述Date对象表示特定的日期和时间,而LocalDate(Java8)对象只包含没有任何时间信息的日期。因此,如果我们只关心日期而不是时间信息,则可以在Date和LocalDate之间进行转换。二.Date转LocalDate如果要将java.util.Date转换为java.time.LocalDate,可以使用以下步骤:1)将java.util.Date转换为ZonedDateTime

    2022年10月3日
    2
  • js中跳转_js跳转页面传递参数

    js中跳转_js跳转页面传递参数JS页面跳转大全所谓的js页面跳转就是利用javesrcipt对打开的页面ULR进行跳转,如我们打开的是A页面,通过javsrcipt脚本就会跳转到B页面。一、常规的JS页面跳转代码1、在原来的窗体中直接跳转用  window.location.href=”你所要跳转的页面”;  2、在新窗体中打开页面用:  window.open(‘你所要跳转的页面’);

    2022年8月13日
    6
  • 对知识推理的认识的相关论文

    对知识推理的认识的相关论文​论文一()中文引用格式:官赛萍,靳小龙,贾岩涛,王元卓,程学旗.面向知识图谱的知识推理研究进展.软件学报,2018,29(10):29662994.http://www.jos.org.cn/1000-9825/5551.htm1.1知识推理的简介面向知识图谱的知识推理旨在基于已有的知识图谱事实,推理新的事实或识别错误知识。例如,在DBpedia中已知三元组(X,birthPlace,Y),可以在很大程度上推理出缺失的三元组(X,nationality,Y)。主要分为:

    2022年6月5日
    32
  • Java分布式锁(6种实现方法)

    Java分布式锁(6种实现方法)目录Java分布式锁一、基于ReentrantLock锁解决超卖问题(单体)1.1、重要代码1.2、测试代码二、基于数据库的分布式锁(分布式)2.1、重要代码2.2、重要sql语句2.3、测试三、基于redis分布式锁3.1、重要代码3.2、yml配置四、基于分布式锁解决定时任务重复问题4.1、封装redis分布式锁4.2、重要代码4.3、解决任务重复五、zookeeper分布式锁代码实现5.1…

    2022年5月18日
    46
  • Unity AssetBundle介绍

    Unity AssetBundle介绍1.什么是AssetBundle?AssetBundle是一种资源压缩包。资源打包AssetBundle有两个好处:减小安装包的大小,资源可以在进入游戏时候,网络下载。 热更资源,方便修复线上资源问题引起的Bug,或新增加游戏内容。AssetBundle分为两种类型:场景AssetBundle&非场景AssetBundle。2.AssetBundle结构2.1As…

    2022年6月18日
    33
  • 笔记本(无线网卡)配置虚拟机上网

    笔记本(无线网卡)配置虚拟机上网当我们安装了virtualbox或者VMware虚拟机,都会虚出一个虚拟网卡。如果我们使用的是网线上网,那么可以选择“网桥”的方式让虚拟机上网,这样可以保证虚拟机和主机之间互通,而且虚拟机也可以访问外网。这时,虚拟机可以使用dhcp也可以手工的方式指定ip。那么,如果笔记本使用的是无线网卡上网,那么就无法使用“网桥”的方式配置虚拟机上网了。这时,可以使用host-only的配置方式,同

    2022年5月19日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号