原文:http://blog.csdn.net/eclipser1987/article/details/6904301

log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置。

### 简介 ###
log4cplus是C++编写的开源的日志系统,前身是Java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。
  
### 下载 ###
最新的log4cplus可以从以下网址下载 http://log4cplus.sourceforge.net本文使用的版本为:1.0.4

2. windows下的配置
将"log4cplus_dll class"工程或"log4cplus_static class"工程的dsp 文件插入到你的工程中,或者直接把两个工程编译生成的库以及头文件所在目录放到你的工程的搜索路径中,如果你使用静态库,请在你的工程中"project/setting/C++"的preprocessor definitions中加入LOG4CPLUS_STATIC。

进入log4cplus-1.0.4\log4cplus-1.0.4\msvc8目录,双击log4cplus.sln使用Microsoft Visual Studio 2010打开文件。

编译生成新的动态库或者静态库:

拷贝log4cplusSD.lib(静态库)以及 log4cplusD.lib + log4cplusD.dll (动态库)

注意:使用静态链接,只需要log4cplusSD.lib即可,而使用动态链接,则需要log4cplusD.lib + log4cplusD.dll 2个文件。

3。具体配置

首先,将log4cplus 头文件,拷贝到Microsoft Visual Studio 2010安装目下的include下,如:

将,log4cplusSD.lib以及log4cplusD.lib 拷贝到Microsoft Visual Studio 2010安装目下的lib下,如:

将log4cplusD.dll拷贝到Microsoft Visual Studio 2010安装目下的bin下,如:

4。在环境配置完成后,我们可以对具体的项目环境进行配置。

我们创建一个控制台项目,并进行如下配置:

1。采用静态链接库:

右键项目->属性->

加入log4cplusSD.lib

注意:才用静态链接库,可以删除bin目录下的log4cplusD.dll 以及lib目录下的log4cplusD.lib 2个文件。

2。采用动态链接库:

右键项目->属性->

注意:才用动态链接库,需要bin目录下的log4cplusD.dll 以及lib目录下的log4cplusD.lib 2个文件。可以删除lib目录下的log4cplusSD.lib 文件

5.编写简单程序并测试

  1. #include "stdafx.h"
  2. #include <log4cplus/logger.h>
  3. #include <log4cplus/configurator.h>
  4. #include <iomanip>
  5. using namespace log4cplus;
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8. BasicConfigurator config;
  9. config.configure();
  10. Logger logger = Logger::getInstance("main");
  11. LOG4CPLUS_WARN(logger, "Hello, World!");
  12. getchar();
  13. return 0;
  14. }

注意:

log4cplus官方源码采用的“多字节字符集”,如果你项目采用“使用 Unicode 字符集”则可以将log4cplus字符集修改后重新生成对应的库文件!

以下为常用的封装好的测试实例:

VLog.h

  1. #pragma once
  2. #ifndef VLOG_H
  3. #define VLOG_H
  4. #include <log4cplus/logger.h>
  5. #include <log4cplus/layout.h>
  6. #include <log4cplus/loglevel.h>
  7. #include <log4cplus/fileappender.h>
  8. #include <log4cplus/consoleappender.h>
  9. #include <log4cplus/helpers/loglog.h>
  10. using namespace log4cplus;
  11. using namespace helpers;
  12. /**
  13. * 使用log4cplus
  14. * @param logfile 记录的文件路径,如“main.log”
  15. * @param format 格式化前缀,默认%d [%l] %-5p : %m %n
  16. * @param bebug 是否打印bebug信息,默认true
  17. * @param lv 设置日记级别
  18. * @return
  19. */
  20. void InitLog4cplus(
  21. const wchar_t* logfile,
  22. const bool console = true,
  23. const bool bebug = true,
  24. LogLevel lv = DEBUG_LOG_LEVEL,
  25. const wchar_t* format = L"%d : %m%n" /*%d %-5p [%c < %l] : %m %n*/
  26. );
  27. /**
  28. * 获得根日志
  29. * @return
  30. */
  31. Logger GetRootLogger(void);
  32. /**
  33. * 获得子日志
  34. * @param child 子日志名,如,sub;sub.sub1
  35. * @return
  36. */
  37. Logger GetSubLogger(const wchar_t* sub);
  38. /**
  39. * 关闭日志系统
  40. */
  41. void ShutdownLogger(void);
  42. #endif  /* VLOG_H */

VLog.cpp

  1. /************************************************************************/
  2. /* 使用规则:                                                             */
  3. /* 需要log4cplus动态/静态链接库及头文件                                      */
  4. /* log4cplus.lib + log4cplus.dll 为动态链接库。log4cplusS.lib为静态链接库    */
  5. /************************************************************************/
  6. #include "VLog.h"
  7. void InitLog4cplus(const wchar_t* logfile, const bool console, const bool bebug,
  8. LogLevel lv, const wchar_t* format)
  9. /*
  10. NOT_SET_LOG_LEVEL               (   -1) :接受缺省的LogLevel,如果有父logger则继承它的
  11. LogLevelALL_LOG_LEVEL           (    0) :开放所有log信息输出
  12. TRACE_LOG_LEVEL                 (    0) :开放trace信息输出(即ALL_LOG_LEVEL)
  13. DEBUG_LOG_LEVEL                 (10000) :开放debug信息输出
  14. INFO_LOG_LEVEL                  (20000) :开放info信息输出
  15. WARN_LOG_LEVEL                  (30000) :开放warning信息输出
  16. ERROR_LOG_LEVEL                 (40000) :开放error信息输出
  17. FATAL_LOG_LEVEL                 (50000) :开放fatal信息输出
  18. OFF_LOG_LEVEL                   (60000) :关闭所有log信息输出
  19. */ {
  20. // 0.日志系统配置:设置显示debug信息
  21. LogLog::getLogLog()->setInternalDebugging(bebug);
  22. // 创建屏幕输出Appender,不采用stderror流,不采用立刻写入模式
  23. SharedAppenderPtr pappender1(new RollingFileAppender(logfile, 1024 * 1024 * 200, 50, false));
  24. // 生成的日志文件名称,文件最大值(最小1 * 200 M),扩展50文件个数,不采用立刻写入模式
  25. // 2.实例化一个layout对象
  26. // 2.1创建layout布局格式
  27. std::auto_ptr<Layout> playout1(new PatternLayout(format));
  28. // 3.将layout对象绑定(attach)到appender对象
  29. // pappender.setLayout(std::auto_ptr<Layout> layout);
  30. pappender1->setLayout(playout1);
  31. // 4.Logger :记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对象进行记录时,就需要生成一个logger。
  32. Logger rootLogger = Logger::getRoot();
  33. // 5.将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出(屏幕)appender对象会绑定到logger
  34. rootLogger.addAppender(pappender1);
  35. if (console) {
  36. // 1.Appenders :挂接器,与布局器紧密配合,将特定格式的消息输出到所挂接的设备终端 (如屏幕,文件等等)。
  37. SharedAppenderPtr pappender2(new ConsoleAppender(false, false));
  38. std::auto_ptr<Layout> playout2(new PatternLayout(format));
  39. pappender2->setLayout(playout2);
  40. rootLogger.addAppender(pappender2);
  41. }
  42. // 6.设置logger的优先级,如省略此步骤,各种有限级的消息都将被记录
  43. rootLogger.setLogLevel(lv);
  44. }
  45. Logger GetRootLogger(void) {
  46. return Logger::getRoot();
  47. }
  48. Logger GetSubLogger(const wchar_t* sub) {
  49. return Logger::getInstance(sub);
  50. }
  51. void ShutdownLogger(void) {
  52. Logger::getRoot().shutdown();
  53. }

Main.cpp

  1. <p>#include "VLog.h"</p><p>int _tmain(int argc, _TCHAR* argv[])
  2. {
  3. // 加入log4cplus
  4. // 初始化log4cplus
  5. InitLog4cplus(L"main.log");</p><p> // 日志对象:测试一
  6. log4cplus::Logger test1 = GetSubLogger(L"test1");
  7. // 日志对象:测试一 第一次测试
  8. log4cplus::Logger test1_01 = GetSubLogger(L"test1.01");</p><p> // 类型日志记录
  9. LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');</p><p> // 关闭日志
  10. ShutdownLogger();
  11. }
  12. </p>
 
1

Microsoft Visual Studio 2010下log4cplus的安装,集成,测试的更多相关文章

  1. Microsoft Visual Studio 2010(vs10)安装与使用

    安装1.下载软件: 云盘分享http://pan.baidu.com/s/1i4JL9GT 2.安装 打开Microsoft Visual Studio 2010目录,双击setup.exe ,运行 ...

  2. C++笔记001:Microsoft Visual Studio 2010软件的安装与建立第一个cpp文件

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 我学习C++使用软件为Microsoft Visual Studio 2010. 首先,软件的安装包 链接:https://pan.bai ...

  3. Microsoft Visual Studio 2010中文版编译SQLlite3.7.0版

    作为一名教师,没有具体项目的开发,却喜欢尝鲜,不经意间开始追星了. 换了Win7,安装了Microsoft Visual Studio 2010中文版,7月22日SQLite发布了3.7.0版.当然想 ...

  4. win8 64位操作系统 Microsoft Visual Studio 2010在IIS上调试 “此任务要求应用程序具有提升的权限”等问题

    很少在IIS上调试程序,因系统原因,所以不得不在IIS上预览项目和调试项目(因为只能在IIS上预览项目才能看到项目里的数据). 1.附加到进程(注意附加到进程前必须预览项目) 2.选择调试项 需要注意 ...

  5. Microsoft Visual Studio 2010 遇到了异常,可能是由某个扩展导致的。 转载

    问题: 今天打开好久没用的Microsoft Visual Studio 2010 ,刚才创建了一个C++工程,错误就出现了. 只要在VS2010源码编辑器中输入一个字符,它就报错 ":Mi ...

  6. Microsoft Visual Studio 2010导致系统C盘不断增大问题处理。

    一直用Microsoft Visual Studio 2010做开发,发现最近C盘空间是越来越小,一开始以为是IE或者一些系统补丁造成的临时文件,但是使用360,windows优化大师之类的软件都清过 ...

  7. SQL_server_2008_r2和visual studio 2010旗舰版的安装(2013-01-16-bd 写的日志迁移

    (以下操作是在Oracle VM virtualBox虚拟机中操作的,其实VMware Workstation 9虚拟机也挺不错的,不过用了很久的vmware想换个虚拟机用用 就暂时用Oracle V ...

  8. Microsoft Visual Studio Ultimate 2013 RC 离线安装程序

    Microsoft Visual Studio Ultimate 2013 RC 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download/d ...

  9. Windows 安装 Microsoft Visual Studio 2010

    Windows 安装 VS2010 我的电脑系统:Windows 10 x64位 我要安装的Microsoft Visual Studio 是:VS2010 注意: VS2010 没有专门的64位版. ...

随机推荐

  1. python学习,day3:函数式编程,带参数

    # coding=utf-8 # Author: RyAn Bi def test(x,y,z): print(x) print(y) print(z) test(y=2,z =3,x=1) #形参与 ...

  2. Github使用笔记

    ========================Github使用===================概念解释:远程仓库Remote:就是指保存在github网站里的代码;本地仓库Repository ...

  3. 经典DP 洛谷p1880 石子合并

    https://www.luogu.org/problemnew/show/P1880 题目 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新 ...

  4. 开源.net 混淆器ConfuserEx介绍 [转]

    今天给大家介绍一个开源.net混淆器——ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotf ...

  5. 移动端优化 && 清除移动端网站点击a标签时闪现的边框或遮罩层(CSS) && 移动端点击 && 文字不可选择

      在移动端网站,当你点击加了a标签的文字或图片时,该元素的周围会闪现一个蓝色的边框,在微信上的网站就是如此:而有的浏览器会闪现一个半透明遮罩层,比如移动端的Chrome浏览器,其实这些特效无非就是为 ...

  6. WCF系列教程之WCF服务协定

    本文参考自:http://www.cnblogs.com/wangweimutou/p/4422883.html,纯属读书笔记,加深记忆 一.服务协定简介: 1.WCF所有的服务协定层里面的服务接口, ...

  7. DIV盒子介绍

    1.盒子模型=网页布局的基石,由四部分组成: 边框(border).外边距(margin).内边距(padding).盒子中的内容(content) 2.设置顺序是顺时针:上.右.下.左. 三个值(上 ...

  8. Python 两种获取文件大小的方法

    import os r=os.path.getsize("/root/catbird1.stl") f=open("/root/catbird1.stl",&q ...

  9. Web App、Hybrid App、 Native App

    1.特点: 1. 偏交互的Native,偏浏览的Web:交互指复杂操作,输入/选择什么的2. 已稳定的Native,试错中的Web:H5页面用来做低成本验证很好3. 访问硬件Native,信息展示We ...

  10. UTF8最好不要带BOM,附许多经典评论

    UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM.所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一 ...