unix下log4cplus的安装,集成,测试

unix下log4cplus的安装,集成,测试

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

 

### 安装 ###
 
1. linux下安装
tar xvzf log4cplus-x.x.x.tar.gzcd log4cplus-x.x.x./configure --prefix=/where/to/install

make

make install
这里我采用缺省安装路径:/usr/local,下文如无特别说明,均以此路径为准。

查看安装后的目录信息:

unix下log4cplus的安装,集成,测试_第1张图片

 

2.运行log4cplus实例:

unix下log4cplus的安装,集成,测试_第2张图片

官方实例运行成功。

 

3。与IDE集成测试。

这里,我使用的IDE为netbeans7.0采用samba实现linux与windows文件共享。

netbeans环境配置如下:

unix下log4cplus的安装,集成,测试_第3张图片

unix下log4cplus的安装,集成,测试_第4张图片

unix下log4cplus的安装,集成,测试_第5张图片

 

unix下log4cplus的安装,集成,测试_第6张图片

采用动态链接库

unix下log4cplus的安装,集成,测试_第7张图片

 

编写一个简单的main.c


#include  < log4cplus / logger.h >
#include 
< log4cplus / configurator.h >
#include 
< iomanip >

using   namespace  log4cplus;

int  main( void {
    BasicConfigurator config;
    config.configure();

    Logger logger 
= Logger::getInstance("main");
    LOG4CPLUS_WARN(logger, 
"Hello, World!");
    
return 0;
}
运行:

WARN - Hello, World!

运行成功(总计时间: 62毫秒)

常用的封装后的使用:

vlog.h

/**/ /* 
 * File:   vlog.h
 * Author: Vicky
 * 
 * 1.安装log4cplus。
 * 2.C++ 编译器 : 其他选项 -lpthread -llog4cplus
 * 3.C++ 连接器 : 运行时搜索目录 /usr/local/lib
 * Created on 2011年12月8日, 下午1:53
 
*/


#ifndef VLOG_H
#define     VLOG_H

#include 
< log4cplus / logger.h >
#include 
< log4cplus / layout.h >
#include 
< log4cplus / loglevel.h >
#include 
< log4cplus / fileappender.h >
#include 
< log4cplus / consoleappender.h >

#include 
< log4cplus / helpers / loglog.h >

using   namespace  log4cplus;
using   namespace  helpers;

/**/ /**
 * 使用log4cplus
 * @param logfile 记录的文件路径,如“main.log”
 * @param format 格式化前缀,默认%d [%l] %-5p : %m %n
 * @param bebug 是否打印bebug信息,默认true
 * @param lv 设置日记级别
 * @return 
 
*/

void  initLog4cplus(
        
const   char *  logfile,
        
const   bool  console  =   true ,
        
const   bool  bebug  =   true ,
        LogLevel lv 
=  DEBUG_LOG_LEVEL,
        
const   char *  format  =   " %d %-5p [%c < %l] : %m %n "
        );

/**/ /**
 * 获得根日志
 * @return 
 
*/

Logger getRootLogger(
void );

/**/ /**
 * 获得子日志
 * @param child 子日志名,如,sub;sub.sub1
 * @return 
 
*/

Logger getSubLogger(
const   char *  sub);

/**/ /**
 * 关闭日志系统
 
*/

void  shutdownLogger( void );

#endif     /* VLOG_H */


vlog.cpp

#include  " vlog.h "

void  initLog4cplus( const   char *  logfile,  const   bool  console,  const   bool  bebug,
        LogLevel lv, 
const   char *  format)
/**/ /*
NOT_SET_LOG_LEVEL               (   -1) :接受缺省的LogLevel,如果有父logger则继承它的
LogLevelALL_LOG_LEVEL           (    0) :开放所有log信息输出
TRACE_LOG_LEVEL                 (    0) :开放trace信息输出(即ALL_LOG_LEVEL)
DEBUG_LOG_LEVEL                 (10000) :开放debug信息输出
INFO_LOG_LEVEL                  (20000) :开放info信息输出
WARN_LOG_LEVEL                  (30000) :开放warning信息输出
ERROR_LOG_LEVEL                 (40000) :开放error信息输出
FATAL_LOG_LEVEL                 (50000) :开放fatal信息输出
OFF_LOG_LEVEL                   (60000) :关闭所有log信息输出
 
*/
  {
    
// 0.日志系统配置:设置显示debug信息
    LogLog::getLogLog()->setInternalDebugging(bebug);


    
// 创建屏幕输出Appender,不采用stderror流,不采用立刻写入模式
    SharedAppenderPtr pappender1(new RollingFileAppender(LOG4CPLUS_TEXT(logfile), 1024 * 102410false));
    
// 生成的日志文件名称,文件最大值(最小1M),扩展文件个数,不采用立刻写入模式

    
// 2.实例化一个layout对象
    
// 2.1创建layout布局格式
    tstring pattern = LOG4CPLUS_TEXT(format);
    std::auto_ptr
<Layout> playout1(new PatternLayout(pattern));

    
// 3.将layout对象绑定(attach)到appender对象
    
// pappender.setLayout(std::auto_ptr<Layout> layout);
    pappender1->setLayout(playout1);

    
// 4.Logger :记录器,保存并跟踪对象日志信息变更的实体,当你需要对一个对象进行记录时,就需要生成一个logger。
    Logger rootLogger = Logger::getRoot();

    
// 5.将appender对象绑定(attach)到logger对象,如省略此步骤,标准输出(屏幕)appender对象会绑定到logger
    rootLogger.addAppender(pappender1);

    
if (console) {
        
// 1.Appenders :挂接器,与布局器紧密配合,将特定格式的消息输出到所挂接的设备终端 (如屏幕,文件等等)。
        SharedAppenderPtr pappender2(new ConsoleAppender(falsefalse));
        std::auto_ptr
<Layout> playout2(new PatternLayout(pattern));
        pappender2
->setLayout(playout2);
        rootLogger.addAppender(pappender2);
    }


    
// 6.设置logger的优先级,如省略此步骤,各种有限级的消息都将被记录
    rootLogger.setLogLevel(lv);
}


Logger getRootLogger(
void {
    
return Logger::getRoot();
}


Logger getSubLogger(
const   char *  sub)  {
    
return Logger::getInstance(LOG4CPLUS_TEXT(sub));
}


void  shutdownLogger( void {
    Logger::getRoot().shutdown();
}



main.cpp

/**/ /* 
 * File:   main.cpp
 * Author: Vicky
 *
 
*/

#include 
" vlog.h "

/**/ /*
 * 
 
*/

int  main( void {

    
// 初始化log4cplus
    initLog4cplus("main.log");

    
// 日志对象:测试一
    log4cplus::Logger test1 = getSubLogger("test1");
    
// 日志对象:测试一 第一次测试
    log4cplus::Logger test1_01 = getSubLogger("test1.01");

    
// 类型日志记录
    LOG4CPLUS_DEBUG(test1_01, "you can log like this :" << "hello " << 100 << '!');

    
// 关闭日志
    shutdownLogger();
    
return 0;
}

 

OK。unix下log4cplus的安装,集成,测试!随后我将讲述Microsoft Visual Studio 2010下的安装,集成,与测试。

运行时动态链接库设置





你可能感兴趣的:(unix下log4cplus的安装,集成,测试)