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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python requests post 请求报错:415 Unsupported Media Type

    Python requests post 请求报错:415 Unsupported Media Type本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末requestspost请求报错:415UnsupportedMediaType在使用response.post发送json数据时,出现如题所示错误,是因为User-Agent被服务器设置拒绝请求了解决方法:’content-type’:’application/json’headers={‘User-Agent’:’Dalvik/2.1.0(Linux;U;Android6.0.1;Nexus5

    2022年6月12日
    91
  • Windows系统中设置定时开关机方法「建议收藏」

    Windows系统中设置定时开关机方法「建议收藏」编写不易,如有转载,请声明出处:梦回河口:http://blog.csdn.net/zxc514257857/article/details/72858312前言  使用系统自带的任务计划及Bios方式设置Windows系统的定时开关机定时关机  通过系统自带的任务计划实现定时关机“开始”—>“附件”—>“系统工具”—>“任务计划程序”“任务计划程序库”—>“创建基本任务”输入名称描述设

    2022年5月14日
    43
  • .NET设计模式(11):组合模式(Composite Pattern)

    .NET设计模式(11):组合模式(Composite Pattern)

    2021年7月22日
    66
  • 微信API接口大全「建议收藏」

    微信API接口大全「建议收藏」微信API接口1、基础消息类型1、客户端发送的心跳包HeartBeatReq=1001;2、消息接收确认回复(接收或拒绝接收)MsgReceivedAck=1002;3、错误单独提升为一种消息类型Error=1003;4、通用任务执行结果通知TaskResultNotice=1025;2、设备客户端授权类消息1、设备(手机客户端、客服客户端)获取通信token请求与响应DeviceAuthReq=1010;设备(手机客户端、客服客户端)获取通信token响应D…

    2022年10月2日
    5
  • mac mysql管理工具_hadoop平台管理工具

    mac mysql管理工具_hadoop平台管理工具Mac平台的MySQL管理工具

    2022年8月22日
    10
  • pytest skipif_pytest失败重跑

    pytest skipif_pytest失败重跑前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月31日
    6

发表回复

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

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