在vs2008中编译log4cxx-0.10.0详细方法(从下载、编译、解决错误详细介绍)

日志库,很多都不错,glog 、log4cplus、log4cpp、log4cxx等。

因为log4cxx是apache的项目,所以情有独钟。但是编译似乎比较麻烦,于是准备用log4cplus。

log4cplus更新挺快的,但是里面只有msvc10的sln。习惯了vs08,尝试修改sln等各种方法也没折腾好。既然麻烦,那干脆还是试用log4cxx算了。呵呵。

于是google得到了一个连接 “在vs2010中编译log4cxx-0.10.0详细方法(从下载、编译、解决错误详细介绍)

 

感觉图文并茂,非常不错。

但是中途与他的又有点异同,所以也发表日志记录一下。

  编译后文件下载 https://files.cnblogs.com/lovelp/log4cxx_vs08.zip

第一部分:

首先,下载地址:

1. 下载 log4cxx 以及 apr 和 apr-util 源码:
a) http://www.apache.org/dyn/closer.cgi/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.zip
b) http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip
c) http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip

 

2. 将 3 个压缩包解压到同一个目录.

3. 将 apr-1.2.11 重命名为 apr, 将 apr-util-1.2.10 重命名为 apr-util.  不然bat运行的时候,会找不到apr-util等路径。

错误提示如下:

 

文件结构如下:

 

本来可以直接运行log4cxx下面的configure.bat,但是这个批处理没加pause,执行结果会一闪而过,不知道到底执行的怎么样了,所以还是建议在cmd里面操作。

cmd里面切换路径,其实很方便,参考博文里面的方法其实可以改进一下,具体命令行如下:

cd /d E:\log4cxx\apache-log4cxx-0.10.0

 

4、然后直接输入 configure.bat 执行

 

接下来是应该执行 "configure-aprutil.bat",但是里面用到了sed这个linux命令。windows无次命令。

我参考的博文里面,作者没去处理,这里我下载了一个sed for windows。然后把安装后的路径添加到了环境变量里面中了。

关闭cmd,再打开一个新的cmd(让环境变量在cmd里面能用),测试sed是否可用。

sed --help

 

确定无误。

5、sed准备好了后,接下来执行 configure-aprutil.bat

下面又存在不同点了:

参考博文里面提到要修改 E:\log4cxx\apr-util\include\apu.hw 里面的 #define APU_HAVE_APR_ICONV

我打开的时候发现值是0,不需要改了。可能是sed配置后脚本自动修改过了。

 

 

第二部分:

上面准备工作都做好了,现在是万事俱备只欠东风了。打开路径 E:\log4cxx\apache-log4cxx-0.10.0\projects

发现都是vc6的工程。我使用的是vs08. 转换之。

6、使用vs08打开 log4cxx.dsw ,全部转换。

7、将 log4cxx 设置为启动项,生成log4cxx。

    接下来,编译途中会出现几行错误:

  >network_io\unix\multicast.c(137): error C2079: “mip”使用未定义的struct “group_source_req”错误
  双击第一行出错输出, 将 136 和 148 行的 #if MCAST_JOIN_SOURCE_GROUP 注释, 替换为 #if defined

 

#if defined (group_source_req)
//#if MCAST_JOIN_SOURCE_GROUP
    struct group_source_req mip;
    int ip_proto;
#endif

    rv = mcast_check_type(sock);

    if (rv != APR_SUCCESS) {
        return rv;
    }

    if (source != NULL) {
//#if MCAST_JOIN_SOURCE_GROUP
#if defined (group_source_req)

再次编译,就没有任何错误了。这里我偷懒了,直接【生成】-【批生成】。几分钟后回来,一切顺利。

log4cxx - 0 个错误,0 个警告
========== 全部重新生成: 成功 8 个,失败 0 个,跳过 0 个 ==========

 

  编译后文件下载 https://files.cnblogs.com/lovelp/log4cxx_vs08.zip

配置下include路径后即可开工。

附上代码测试一下,代码来自于网络

#include <iostream>
#include <log4cxx/logger.h>  
#include <log4cxx/basicconfigurator.h>  
#include <log4cxx/helpers/exception.h>  
#include <log4cxx/propertyconfigurator.h>  

#pragma comment(lib,"log4cxx.lib")

using namespace std;
using namespace log4cxx;  
using namespace log4cxx::helpers;  


LoggerPtr logger(Logger::getLogger("R"));  
LoggerPtr logger_lib_a(Logger::getLogger("Lib_a"));  
LoggerPtr logger_lib_b(Logger::getLogger("Lib_b"));  

int main(int argc, char **argv)  
{  

    try  
    {  
        // Set up a simple configuration that logs on the console.  
        PropertyConfigurator::configure("log4cxx.properties");  
        for (int i=0 ; i<100;i++)
        {
            LOG4CXX_INFO(logger, "测试下 R")  
            LOG4CXX_DEBUG(logger_lib_a, "测试下  R.a")  
            LOG4CXX_DEBUG(logger_lib_b, "测试下 t R.b") 
        }
         
    }  
    catch(...)  
    {  
    }  

    cin.get();
    return 0;  
}  

新建一个为本文档,改名为"log4cxx.properties",作为属性配置文档,内容如下:

log4j.additivity.gather = false  
log4j.rootLogger= debug, R, stdout

#设置子logger
log4j.logger.Lib_a =debug, ap1, stdout
log4j.logger.Lib_b =debug, ap2, stdout


#设置不继承父Logger
log4j.additivity.Lib_a=false  
log4j.additivity.Lib_b=false  

log4j.appender.logfile.encoding=UTF-8  
  
#标准输出,向控制台打印
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

#Root
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./info.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%c]-[%p] %m%n 

log4j.appender.ap1=org.apache.log4j.RollingFileAppender
log4j.appender.ap1.File=./hello_a.log
log4j.appender.ap1.MaxFileSize=100KB
log4j.appender.ap1.MaxBackupIndex=10
log4j.appender.ap1.layout=org.apache.log4j.PatternLayout
log4j.appender.ap1.layout.ConversionPattern=%d{yyyy-MM-dd} [%c]-[%p] %m%n

log4j.appender.ap2=org.apache.log4j.RollingFileAppender
log4j.appender.ap2.File=./hello_b.log
log4j.appender.ap2.MaxFileSize=100KB
log4j.appender.ap2.MaxBackupIndex=10
log4j.appender.ap2.layout=org.apache.log4j.PatternLayout
log4j.appender.ap2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n 

  

 

 

 

 

 

 编译后文件下载 https://files.cnblogs.com/lovelp/log4cxx_vs08.zip

posted @ 2014-05-09 22:23  不要呵呵  阅读(876)  评论(0编辑  收藏  举报