• 快速使用Log4Cpp


    封了一下接口,快速使用。

    其他的你都不用管了。

    这里封装了需要读取外部conf文件配置输出项。否则可以用getInstance初始化日志类

    #include "L4Cpp.h"
    
    void CTestAgainDlg::OnBnClickedButton1()
    {
        L4Cpp::get()->warn("eeeeeeeee");
    }

    下面展示了封装以及引用结构

     1 #pragma once
     2 #include "L4Cpp/Category.hh"
     3 
     4 class L4Cpp
     5 {
     6 private:
     7     L4Cpp(){};
     8     static log4cpp::Category* root;
     9 
    10 public:
    11     //获得日志仓库
    12     static log4cpp::Category* get();
    13     static void defaultFileInstance();
    14     static void defaultSteamInstance();
    15 };
    L4Cpp.h
     1 //LogFacade.cpp如下:
     2 
     3 #include "StdAfx.h"
     4 #include "L4Cpp.h"
     5 
     6 
     7 #include "L4Cpp/Appender.hh"
     8 #include "L4Cpp/FileAppender.hh"
     9 #include "L4Cpp/OstreamAppender.hh"
    10 #include "L4Cpp/NTEventLogAppender.hh"
    11 #include "L4Cpp/StringQueueAppender.hh"
    12 #include "L4Cpp/RollingFileAppender.hh"
    13 //#include "L4Cpp/SyslogAppender.hh"
    14 #include "L4Cpp/Layout.hh"
    15 #include "L4Cpp/BasicLayout.hh"
    16 #include "L4Cpp/SimpleLayout.hh"
    17 #include "L4Cpp/PatternLayout.hh"
    18 #include "L4Cpp/BasicConfigurator.hh"
    19 #include "L4Cpp/PropertyConfigurator.hh"
    20 #include "L4Cpp/Priority.hh"
    21 #include "L4Cpp/NDC.hh"
    22 
    23 #include <string.h>
    24 
    25 
    26 #pragma comment(lib,"log4cpp.lib")
    27 
    28 log4cpp::Category* L4Cpp::root = NULL;
    29 
    30 log4cpp::Category* L4Cpp::get()    
    31 {
    32     if (!root)
    33     {
    34         //debug模式下,配置没找到会跳出runtime 异常,貌似捕获不了。考虑把那里注掉或换成logic_error
    35         try { 
    36             log4cpp::PropertyConfigurator::configure("./log4cpp1.conf");
    37             root = &log4cpp::Category::getRoot();
    38         } catch(std::runtime_error e) {
    39             //读不到配置文件不操作
    40             //但外部调用并不会出错
    41         }
    42     }
    43     return root;
    44 }
    45 
    46 //加载默认配置,输出到同级目录中的logging.log文件
    47 void L4Cpp::defaultFileInstance(){
    48     if (!root)
    49     {
    50         log4cpp::Layout* layout = new log4cpp::BasicLayout();    // 1实例化一个layout 对象
    51         log4cpp::Appender* appender = new log4cpp::FileAppender("FileAppender",    "./hgsoft.log");     // 2. 初始化一个appender 对象
    52         appender->setLayout(layout);     // 3. 把layout对象附着在appender对象上
    53         root = &log4cpp::Category::getRoot();// 4. 实例化一个category对象
    54         root->setAdditivity(false);     // 5. 设置additivity为false,替换已有的appender
    55         root->setAppender(appender);     // 5. 把appender对象附到category上
    56         root->setPriority(log4cpp::Priority::DEBUG);     // 6. 设置category的优先级,低于此优先级的日志不被记录
    57     }
    58 } 
    59 
    60 void L4Cpp::defaultSteamInstance(){
    61     if (!root)
    62     {
    63         log4cpp::Layout* layout = new log4cpp::BasicLayout();    // 1实例化一个layout 对象
    64         log4cpp::Appender* appender = new log4cpp::OstreamAppender("ostream",&std::cout);     // 2. 初始化一个appender 对象
    65         appender->setLayout(layout);     // 3. 把layout对象附着在appender对象上
    66         root = &log4cpp::Category::getRoot();// 4. 实例化一个category对象
    67         root->setAdditivity(false);     // 5. 设置additivity为false,替换已有的appender
    68         root->setAppender(appender);     // 5. 把appender对象附到category上
    69         root->setPriority(log4cpp::Priority::DEBUG);     // 6. 设置category的优先级,低于此优先级的日志不被记录
    70     }
    71 } 
    L4Cpp.cpp

    文件引用架构

    还需要改动的地方是原本

    #include <log4cpp/****.hh>

    需要转换成 引用本地的头文件

    #include "L4Cpp/****.hh"

    库文件在L4Cpp.cpp中通过#pragma comment(lib,"log4cpp.lib") 引用了

    拓展阅读:

    http://www.ibm.com/developerworks/cn/linux/l-log4cpp/

    http://log4cpp.sourceforge.net/

  • 相关阅读:
    P1541
    P1004
    P1006
    高精度
    数组
    递归
    顺序结构
    循环结构
    变量
    分支结构
  • 原文地址:https://www.cnblogs.com/Again/p/5394139.html
Copyright © 2020-2023  润新知