1. 简单介绍

log4cplus是C++编写的开源的日志系统,The
purpose of this project is to port the excellent
Log
for Java
 (log4j)logging library to C++

log4cplus具有灵活、强大、使用简单、多线程安全的特点,实在是杂牌军、游击队的福音。



2. 安装使用(Linux)

log4cplus安装使用很easy。从其官网:http://log4cplus.sourceforge.net/ 下载最新版本号

执行:

tar xvzf log4cplus-x.x.x.tar.gz

cd log4cplus-x.x.x

./configure --prefix=/where/to/install

make

make install

在安装文件夹下生成include和lib两个文件夹。分别为头文件和库文件

使用:

g++ -o server   /mnt/hgfs/work_vm/project/work_project/server/obj/main.o  
-L../..//third/log4cplus/lib/ -L../..//third/boost/lib/-llog4cplus
-lpthread -I/mnt/hgfs/work_vm/project/work_project/server/include -I../..//third/log4cplus/include/-I../..//third/boost/include/

编译參数:

-L../..//third/log4cplus/lib/

-llog4cplus 

-lpthread

-I../..//third/log4cplus/include/



3. 使用

log4cplus主要包含layout、appender、loglevel等内容。能够參考:

http://masterdog.bokee.com/153892.html

写的很nice



4. 包装

logcplus包装下用起来很方便,下面是我的包装。供參考

Log.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//
Log.h: interface for the Log class.
//
//////////////////////////////////////////////////////////////////////
 
#if
!defined(AFX_LOG_H__B87F71E3_FFAE_4CFA_A528_3F4F2FF7D69E__INCLUDED_)
#define
AFX_LOG_H__B87F71E3_FFAE_4CFA_A528_3F4F2FF7D69E__INCLUDED_
 
#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
"const.h"
#include
"common.h"
#include
"Main_config.h"
 
using

namespace

log4cplus;
using

namespace

log4cplus::helpers;
 
//日志封装
#define
TRACE(p) LOG4CPLUS_TRACE(Log::_logger, p)
#define
DEBUG(p) LOG4CPLUS_DEBUG(Log::_logger, p)
#define
NOTICE(p) LOG4CPLUS_INFO(Log::_logger, p)
#define
WARNING(p) LOG4CPLUS_WARN(Log::_logger, p)
#define
FATAL(p) LOG4CPLUS_ERROR(Log::_logger, p)
 
//
日志控制类,全局共用一个日志
class

Log
{
public:
    //
打开日志
    bool

open_log();
 
    //
获得日志实例
    static

Log& instance();
     
    static

Logger _logger;
 
private:
    Log();
 
    virtual

~Log();
 
    //log文件路径及名称
    char

_log_path[PATH_SIZE];
    char

_log_name[PATH_SIZE];
};
 
#endif
// !defined(AFX_LOG_H__B87F71E3_FFAE_4CFA_A528_3F4F2FF7D69E__INCLUDED_)

Log.cpp:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//
Log.cpp: implementation of the Log class.
//
//////////////////////////////////////////////////////////////////////
 
#include
"Log.h"
 
//////////////////////////////////////////////////////////////////////
//
Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
Logger
Log::_logger = log4cplus::Logger::getInstance(
"main_log");
 
Log::Log()
{
    snprintf(_log_path, sizeof(_log_path), "%s""../log");
    snprintf(_log_name, sizeof(_log_name), "%s/%s.%s",
_log_path, execname, 
"log");
}
 
Log::~Log()
{
}
 
Log&
Log::instance()
{
    static

Log 
log;
    return

log
;
}
 
bool

Log::open_log()
{
     
    int

Log_level = Main_config::instance().get_config().Read(
"LOG_LEVEL",
0); 
 
    /*
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));
 
    /*
step 3: Attach the layout object to the appender */
    _append->setLayout(_layout);
 
    /*
step 4: Instantiate a logger object */
 
    /*
step 5: Attach the appender object to the logger  */
    Log::_logger.addAppender(_append);
 
    /*
step 6: Set a priority for the logger  */
    Log::_logger.setLogLevel(Log_level);
 
    return

true
;
}

int Log_level = Main_config::instance().get_config().Read("LOG_LEVEL", 0);

Main_config是我自己包装的一个配置类(參考:http://blog.csdn.net/yfkiss/article/details/6802451)。通过读取配置设置log level。

使用:

#inlucde "Log.h"

程序初始化的时候:

    // 打开日志

    if (!Log::instance().open_log())

    {

        std::cout << "Log::open_log() failed" << std::endl;

        return false;

    }

然后使用NOTICE、FATAL等就能够打印日志到文件。

?
1
2
3
4
5
6
7
8
9
10
11
#include
"Log.h"
....
    //
打开日志
    if

(!Log::instance().open_log())
    {
        std::cout
<< 
"Log::open_log()
failed"

<< std::endl;
        return

false
;
    }
.....
NOTICE("Server
init succ"
);
FATAL("Server
run failed"
);

转自:http://blog.csdn.net/yfkiss/article/details/6802422

log4cplus的安装与使用初步的更多相关文章

  1. php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中

    php框架中的phalcon框架的安装,及初步认识,从表单提交简单的数据到数据库中 1.phalcon框架的安装: phalcon框架在windows本地安装可以利用wamp软件,安装之后可以查看对应 ...

  2. Microsoft Visual Studio 2010下log4cplus的安装,集成,测试

    原文:http://blog.csdn.net/eclipser1987/article/details/6904301 log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工 ...

  3. drf安装与APIView初步分析

    drf安装 1. pip install djangorestframework 2. 在settings文件中注册app : INSTALLED_APPS = [..., 'rest_framewo ...

  4. windows环境安装haproxy及初步配置负载均衡使用示例

    安装HaProxy 首先需要下载windows环境下需要文件,这里下载的是一个别人编译好的一个文件,这里省去了编译的过程,使用的版本是haproxy-1.7.8. 下载后直接解压到对应的目录下.示例( ...

  5. node安装 教程 + git初步

    我的系统是win8.1   64位 这个是对应的安装包:http://files.cnblogs.com/files/zxyun/node-v0.12.5-x64.zip 安装中有不懂可以参考下面的两 ...

  6. linux下安装nginx及初步认识

    linux下安装配置nginx nginx:是一个高性能的反向代理服务器正向代理代理的是客户端,反向代理代理的是服务端. 这里以nginx-1.12.2版本为例子 1.首先去官网下载nginx-1.1 ...

  7. 全网最详细的Windows系统里Oracle 11g R2 Client客户端(64bit)安装后的初步使用(图文详解)

    不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1)   打开服务(cmd— ...

  8. 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)安装后的初步使用(图文详解)

    不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1)   打开服务(cm ...

  9. 前端新手如何安装webstorm ,初步搭建react项目

    下载安装webstorm:配置成功: 配置成功后就可以开启webstorm项目了.(存微信收藏..) 1:在webstorm下配置node环境: 2:完成之后: React官方脚手架地址: https ...

随机推荐

  1. Codeforces 1103 C. Johnny Solving

    Codeforces 1103 C. Johnny Solving 题目大意: 有一张 \(n\) 个点 \(m\) 条边的简单无向图,每个点的度数至少为 \(3\) ,你需要构造出两种情况之一 一条 ...

  2. hihocoder #1071 : 小玩具

    闻所未闻的$dp$神题(我不会的题) 令$f[S][i]$表示子集状态为$S$,且$S$中最大联通块恰好为$i$的方案数 考虑转移,我们枚举$S$中最小的元素$v$来转移,这样就能不重 $f[S][i ...

  3. session_write_close() 用法

    1.需要session控制的大文件下载,防止因为占用session文件时间太久,导致其他页面的session无法执行 session_write_close() worked as a lifesav ...

  4. 用Java实现HTTP Multipart的服务端和客户端

    今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个 ...

  5. Process ID, Process handle, Window handle

    http://forums.codeguru.com/showthread.php?392273-RESOLVED-How-to-get-window-s-HWND-from-it-s-process ...

  6. IDA设置函数类型

    http://www.2cto.com/shouce/ida/1361.htm Action name: SetType 该命令允许你指定当前条目类型. 如果光标处在函数内部,那么函数类型将会被编辑, ...

  7. 畅通工程_hdu_1232(并查集)

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. Linux 静态库与动态库搜索路径设置详解

    转载:http://blog.chinaunix.net/uid-29025972-id-3855495.html 1. 连接和运行时库文件搜索路径的设置 库文件在连接(静态库和共享库)和运行(仅限于 ...

  9. 树状数组求第K小值 (spoj227 Ordering the Soldiers &amp;&amp; hdu2852 KiKi&#39;s K-Number)

    题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...

  10. Mantis使用说明

    Mantis是一个缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务. Mantis可以帮助所有开发人员完成系统需求缺陷的有效管理,对于bug问题的状态变化将通过mail的形式由系统自动通知相 ...