对 log4cplus 库的封装,修改自网路

LogUtils.h

/*
* LogUtils.h
*
* Created on: 2018年8月9日
* Author: oftenlin
*/ #ifndef UTILS_LOGUTILS_H_
#define UTILS_LOGUTILS_H_
// LogUtils.h: interface for the LogUtils class.
//
////////////////////////////////////////////////////////////////////// #include "log4cplus/loglevel.h"
#include "log4cplus/ndc.h"
#include "log4cplus/logger.h"
#include "log4cplus/configurator.h"
#include "iomanip"
#include "log4cplus/fileappender.h"
#include "log4cplus/layout.h"
#include <log4cplus/loggingmacros.h> using namespace log4cplus;
using namespace log4cplus::helpers; #define PATH_SIZE 100
//日志封装
#define TRACE(p) LOG4CPLUS_TRACE(LogUtils::_logger, p)
#define DEBUG(p) LOG4CPLUS_DEBUG(LogUtils::_logger, p)
#define NOTICE(p) LOG4CPLUS_INFO(LogUtils::_logger, p)
#define WARNING(p) LOG4CPLUS_WARN(LogUtils::_logger, p)
#define FATAL(p) LOG4CPLUS_ERROR(LogUtils::_logger, p) // 日志控制类,全局共用一个日志
class LogUtils
{
public:
// 打开日志
bool open_log(); // 获得日志实例
static LogUtils& instance(); static Logger _logger; private:
LogUtils(); virtual ~LogUtils(); //log文件路径及名称
char _log_path[PATH_SIZE];
char _log_name[PATH_SIZE];
}; #endif /* UTILS_LOGUTILS_H_ */

LogUtils.cpp

/*
* LogUtils.cpp
*
* Created on: 2018年8月9日
* Author: oftenlin
*/ // Log.cpp: implementation of the Log class.
//
////////////////////////////////////////////////////////////////////// #include "LogUtils.h"
#include <memory> //////////////////////////////////////////////////////////////////////
// Construction/Destruction
////////////////////////////////////////////////////////////////////// Logger LogUtils::_logger = log4cplus::Logger::getInstance("main_log"); LogUtils::LogUtils()
{
snprintf(_log_path, sizeof(_log_path), "%s", "./log");
snprintf(_log_name, sizeof(_log_name), "%s/%s.%s", _log_path, "app", "log");
} LogUtils::~LogUtils()
{
} LogUtils& LogUtils::instance()
{
static LogUtils log;
return log;
} bool LogUtils::open_log()
{ int Log_level = ; /* step 1: Instantiate an appender object */
SharedAppenderPtr _append(new FileAppender(_log_name));
_append->setName("file log test"); /* step 2: Instantiate a layout object */
std::string pattern = "[%p] [%d{%m/%d/%y %H:%M:%S}] [%t] - %m %n";
std::auto_ptr<Layout> _layout(new PatternLayout(pattern)); // std::auto_ptr<Layout> pTTCLayout(new TTCCLayout());
/* step 3: Attach the layout object to the appender */
_append->setLayout(_layout);
// _append->setLayout(pTTCLayout);
/* step 4: Instantiate a logger object */ /* step 5: Attach the appender object to the logger */
LogUtils::_logger.addAppender(_append); /* step 6: Set a priority for the logger */
LogUtils::_logger.setLogLevel(Log_level); return true;
}

C++ log4cplus 类库的封装的更多相关文章

  1. ubuntu:通过封装验证码类库一步步安装php的gd扩展

    我相信很多人的lamp环境都是直接复制一堆参数安装进去的,这里有可能成功,也有可能失败,如果是新手,估计要碰到各种错误,就算安装成功,也未必知道那些参数是干嘛的,反正装进去能用就行. 我当初开始的时候 ...

  2. CamStar insitexmlclient重新封装为.net Core类库

    工作原因经常使用camstar的 InsiteXMLClient类库做二次开发,但是只能在4.X环境下使用,对于日益繁荣的.net core生态,花费了些时间把原有的类库重新封装为.net core ...

  3. 封装的一套简单轻量级JS 类库(RapidDevelopmentFramework.JS)

    1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...

  4. 封装RabbitMQ.NET Library 的一点经验总结

    这篇文章内容会很短,主要是想给大家分享下我最近在做一个简单的rabbitmq客户端类库的封装的经验总结,说是简单其实一点都不简单.为了节省时间我主要按照Library的执行顺序来介绍,在你看来这里仅仅 ...

  5. NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇

    背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...

  6. 简单轻量级的一套JS 类库(RapidDevelopmentFramework.JS)

    1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...

  7. .Net Core跨平台应用研究-CustomSerialPort(增强型跨平台串口类库)

    .Net Core跨平台应用研究-CustomSerialPort -增强型跨平台串口类库 摘要 在使用SerialPort进行串口协议解析过程中,经常遇到接收单帧协议数据串口接收事件多次触发,协议解 ...

  8. netMarketing类库: 类库说明

    这个类库是作者工作中使用的私人类库,本类库适用于自动化行业的软件工程师使用.如果大家在使用中有任何疑问和建议欢迎联系作者, 或者在页面留言. (一) 引用类库 本类库的环境为.net framewor ...

  9. 封装RabbitMQ.NET Library 的一点经验总结 转载

    这篇文章内容会很短,主要是想给大家分享下我最近在做一个简单的rabbitmq客户端类库的封装的经验总结,说是简单其实一点都不简单.为了节省时间我主要按照Library的执行顺序来介绍,在你看来这里仅仅 ...

随机推荐

  1. 剑指Offer_编程题_24

    题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. /* struct TreeNode { int ...

  2. [Android] Android 锁屏实现与总结 (三)

    上接: Android 锁屏实现与总结 (二) 系列文章链接如下: [Android] Android 锁屏实现与总结 (一) [Android] Android 锁屏实现与总结 (二) [Andro ...

  3. $\be$-QGE 的弱强唯一性

    在 [Zhao, Jihong; Liu, Qiao. Weak-strong uniqueness criterion for the $\beta$-generalized surface qua ...

  4. oracle数据库驱动(ojdbc)

    第1部分 Q:为什么oralce的jdbc驱动,在maven上搜索到把pom配置复制到pom.xml里进行引用的时候会报错? ANS:虽然能在maven仓库里搜索到,但貌似不能用,原因是oracle是 ...

  5. luogu P5294 [HNOI2019]序列

    传送门 这个什么鬼证明直接看uoj的题解吧根本不会证明 首先方案一定是若干段等值的\(B\),然后对于一段,\(B\)的值应该是\(A\)的平均值.这个最优方案是可以线性构造的,也就是维护以区间平均值 ...

  6. luogu P5301 [GXOI/GZOI2019]宝牌一大堆

    传送门 wdnm又是打麻将 首先国土无双可以直接枚举哪种牌用了\(2\)次算贡献,然后\(7\)个对子可以把每种牌的对子贡献排序,取最大的\(7\)个,剩下的牌直接暴力枚举是不行的,考虑dp,设\(f ...

  7. Spring基础4

    一.Spring的JDBC模板 Spring对持久层也提供了解决方案,ORM模块和JDBC模板 提高简化JDBC或Hibernate的模板 二.JDBC模板使用入门 1)引入jar包:Spring开发 ...

  8. (转)Java代码书写规范

    0. 安装阿里代码规范的eclipse插件 https://www.cnblogs.com/caer/p/7753522.html 1.基本原则 强制性原则:     1.字符串的拼加操作,必须使用S ...

  9. C语言网 蓝桥杯 1117K-进制数

    这是一道较难的题目,我刚开始用排列组合的方式来做,并没有做出来,故运用了的深搜算法. 深搜算法的概念: 选其中一条路,遍历完成后,逐步返回直至全部遍历,最后返回起点. 解题思路 : 题目中对零的个数没 ...

  10. Prisma GraphQL 服务器 生产者 "https://www.prisma.io"

    Prisma   一个 GraphQL  服务器 生产者     "https://www.prisma.io" , 关注一下