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


相关推荐

  • linux 文件夹 775,Linux chmod目录权限命令图文详解

    linux 文件夹 775,Linux chmod目录权限命令图文详解原标题 Linuxchmod 目录权限命令图文详解在 Linux 文件系统模型中 每个文件都有一组 9 个权限位用来控制谁能够读写和执行该文件的内容 普通文件大家都了解 这里说说目录的情况 对于目录来说 执行位的作用是控制能否进入或者通过该目录 而不是控制能否列出它的内容 读取位和执行位的组合的作用才是控制是否列出目录中的内容 写入位和执行位的组合则是允许在目录中创建 删除 和重命名文件 下面用实例来说明

    2025年7月17日
    2
  • laravel 增加不存在数据库的字段

    laravel 增加不存在数据库的字段

    2021年10月24日
    49
  • QTreeView使用总结7,右键菜单

    QTreeView使用总结7,右键菜单1,简介最开始我要做右键菜单时,理所当然的想到的是右键单击的信号,这样是可以的。后来发现原来Qt给QWidget提供了单独的菜单信号:voidcustomContextMenuRequested(constQPoint&amp;pos);不过需要先设置菜单策略,使用接口:setContextMenuPolicy(Qt::CustomContextMenu);2,菜单效果下面介绍一个示例,实现…

    2022年5月9日
    35
  • H2数据库教程_h2数据库编辑数据库

    H2数据库教程_h2数据库编辑数据库 启动和使用H2控制台H2控制台应用程序允许您使用浏览器访问数据库。这可以是H2数据库,也可以是支持JDBCAPI的其他数据库。这是一个客户端/服务器应用程序,因此需要服务器和客户端(浏览器)来运行它。根据您的平台和环境,有多种方法可以启动H2控制台:OS 开始 视窗 单击[开始],[所有程序],[H2]和[H2控制台(命令行)]  系统托盘中将添加…

    2022年10月12日
    7
  • Gradle下载慢解决方案

    Gradle下载慢解决方案参考:阿里云公共代理库首先我们来看看google官方的依赖方式:buildscript{repositories{mavenCentral()jcenter()google()}dependencies{classpath’com.android.tools.build:gradle:3.0.1′}}allprojects{repositories{

    2022年6月15日
    27
  • 9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年

    9款最好用的MySQL数据库客户端图形界面管理工具,第三款我用了10年MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考。MySQL是一个非常流行的小型关系型数据

    2022年7月1日
    24

发表回复

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

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