对 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. 清北学堂Day2

    算数基本定理: 1.整数及其相关 2.唯一分解定理 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>= ...

  2. WEB-INF 目录

    WEB-INF 目录是必须的,其中包括: web.xml 文件,该 Web 基本配置,必须. classes 目录,存放 .class 文件,当然也可以将 .java 文件一并放进去. lib 目录, ...

  3. Vue(小案例_vue+axios仿手机app)_图片列表操作

    一.前言 1.让图片还没有被完全加载出来的时候给用户提示                                       2.图片查看器 二.主要内容 1.让图片还没有被完全加载出来的时候 ...

  4. EF CodeFirst系列(4)--- 数据注释属性

    EFCodeFirst模式使用的是约定大于配置的编程模式,这种模式利用默认约定根据我们的领域模型建立概念模型.然后我们也可以通过配置领域类来覆盖默认约定. 覆盖默认约定主要用两种手段: 1.数据注释属 ...

  5. HDU 5968(异或计算 暴力)

    题意是在一个数列中找到一段连续的子串使其异或值与所给值最接近,求出子串长度,若有多组结果,输出最大长度. 做题之前一定多注意数据范围,这道题就可以直接暴力,用数组 p[ i ][ j ] 表示长度为 ...

  6. PYTHON使用入门

    一 写在开头1.1 本文内容PYTHON语言的基础知识. 二 Q & A2.1 为什么选择PYTHON?软件质量:在很大程度上,PYTHON更注重可读性.一致性和软件质量,从而与脚本语言世界中 ...

  7. CSS难点 为什么height设置100%会失效,分栏目等高布局(高度自适用布局)的实现方案

    前言 相信在平时写CSS的时候大家都或多或少遇见过设置了height为百分比的时候发现不起作用.今天我们就来一探究竟 原因:父元素未设置具体高度,子元素设置height:100%是无效的. 现象以及方 ...

  8. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.2 一维反应流体力学方程组的 Lagrange 形式

    1.  一维粘性热传导反应流体力学方程组的 Lagrange 形式 $$\beex \bea \cfrac{\p \tau}{\p t'}-\cfrac{\p u}{\p m}&=0,\\ \ ...

  9. [物理学与PDEs]第3章第4节 磁流体力学方程组的数学结构

    1.  在流体存在粘性.热传导及 $\sigma\neq \infty$ 时, 磁流体力学方程组是一个拟线性对称双曲 - 抛物耦合组. 2.  在流体存在粘性.热传导但 $\sigma=\infty$ ...

  10. 你从未听说过的 JavaScript 早期特性

    最近这些年在对 JavaScript 进行考古时,发现网景时代的 JavaScipt 实现,存在一些鲜为人知的特性,我从中挑选几个有趣的说一下. Object.prototype.eval() 方法 ...