封装log4cp p
|
private: };
|
Demo.cpp 文件主要内容:
|
Demo::Demo() Demo::~Demo() void Demo::TestIt(int i, int j)
|
再写个例子来运行,可以看到类似输出
[INFO] - Demo::Demo() -
[INFO] - Demo::TestIt() - i=1, j=2
[INFO] - Demo::~Demo() -
最后附上完整的
LogUtils.h
LogUtils.cpp
LogTracer.h (这个文件是因为 vc 不支持可变参数的宏,所以采用的取巧方法,这方法是从网上搜来的,出处忘了,请见谅。)
LogUtils.h
|
#include <string> #if defined(_LOG4CPP) #include <log4cpp/Category.hh> namespace log4cpp #endif namespace dk void InitializeLog4cpp(const std::string & logfile); #if defined (_LOG4CPP) #if defined (_LOG4CPP) void suck(const char * fmt, ...); #if defined(_LOG4CPP) && defined(WIN32) } #endif |
LogUtils.cpp
|
#if defined(_LOG4CPP) #include <log4cpp/PropertyConfigurator.hh> // appenders #include <log4cpp/Appender.hh> #ifdef LOG4CPP_HAVE_SYSLOG // layouts #include <log4cpp/Layout.hh> #include <log4cpp/Priority.hh> #endif namespace dk // log4cpp::Appender * appender = new log4cpp::Win32DebugAppender("console"); //#else log4cpp::Appender * appender = new log4cpp::OstreamAppender("console", &std::cout); log4cpp::PatternLayout * patternLayout = new log4cpp::PatternLayout(); appender->setLayout(patternLayout); void ReleaseLog4cpp() #if defined(_LOG4CPP) return log4cpp::Category::getInstance(name); void suck(const char * fmt, ...) } |
LogTracer.h
|
#if defined(_LOG4CPP) && defined(WIN32) #include <log4cpp/Category.hh> namespace log4cpp namespace dk #include <stdarg.h> class LogTracer va_start(ap, fmt); AppendString(mMsg, fmt, ap); va_end(ap); void AppendString(std::string & message, const char * format, va_list args) if ((n > -1) && (static_cast<size_t>(n) < size)) size = (n > -1) ? size * 2; // twice the old size delete [] buffer; private: LogTracer(const LogTracer &); protected: class LogDebuger class LogInfoer class LogNoticer class LogErrorer } #endif #endif |
封装log4cp p的更多相关文章
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- CSharpGL(7)对VAO和VBO的封装
CSharpGL(7)对VAO和VBO的封装 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考 ...
随机推荐
- Makefile系列之四 :条件判断
一.示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标. libs_for_gcc = -lgnu normal_libs = foo: $(objects) i ...
- tab切换 jQuery
$('p.guidan-load1').click(function(){ $("p.guidan-load1").removeClass("guidan-load12& ...
- [Jsoi2011]柠檬
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...
- CentOS7.5安装配置Oh-My-Zsh
一.安装 首先安装zshyum -y install zsh 下载 oh-my-zsh 项目来帮我们配置 zsh,采用wget安装(需要先安装git)sh -c "$(wget https: ...
- spawn-fcgi出错处理
/usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 9002 -C 25 -f /usr/local/nginx/cgibin/lzgFastCGI 添加 ...
- Linux操作命令(三)
本次实验将介绍 Linux 命令中 more.less.head.tail 命令的用法. more less head tail 1.more ·more功能类似cat,cat命令是将整个文件的内容从 ...
- POJ 3259 Wormholes【最短路/SPFA判断负环模板】
农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径 ...
- 洛谷P1850换教室
题目传送门 理解题意:给定你一个学期的课程和教室数量以及教室之间的距离还有换教室成功的概率,求一个学期走的距离的期望最小值 题目是有够恶心的,属于那种一看就让人不想刷的题目...很明显的动规,但是那个 ...
- JavaScript函数的防抖和节流
防抖 触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 思路: 每次触发事件时都取消之前的延时调用方法 function debounce(fn) { let tim ...
- CodeForces 809D Hitchhiking in the Baltic States(FHQ-Treap)
题意 给你长度为$n$的序列,序列中的每个元素$i$有一个区间限制$[l_i,r_i]$,你从中选出一个子序列,并给它们标号$x_i$,要求满足 $,∀i<j,x_i<x_j$,且$, ∀ ...