`
monkeycn
  • 浏览: 43800 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

log4cxx,rapidxml,boost::format组合demo

阅读更多
强大的log4cxx,rapidxml,boost组合起来更加强大:

#include "stdafx.h"

// include log4cxx header files.
#include <log4cxx/logger.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/helpers/exception.h>
#include <rapidxml.hpp>
#include <rapidxml_print.hpp>
#include <iostream>
#include <boost/format.hpp>

log4cxx::LoggerPtr logger(log4cxx::Logger::getRootLogger());
log4cxx::LoggerPtr logger2(log4cxx::Logger::getLogger("secondlog"));
log4cxx::LoggerPtr logger3(log4cxx::Logger::getLogger("thirdlog"));

std::string rapidxml2string(const rapidxml::xml_document<>& doc)
{
    std::string doc_s;
    rapidxml::print(std::back_inserter(doc_s), doc, 0);
    return doc_s;
}


int main(int argc, char **argv)
{
    int result = EXIT_SUCCESS;
    try
    {
        LOG4CXX_INFO(logger, "Entering application.");
        for ( int i=0; i<10; i++ )
        {
            LOG4CXX_INFO(logger, "loop index:" << i);
        }
        
        for ( int j=0; j<1000; j++ )
        {
            LOG4CXX_INFO(logger2, "second loop index:" << j);
        }

        for ( int j=0; j<1000; j++ )
        {
            LOG4CXX_INFO(logger3, "third loop index:" << j);
        }

        std::string xml = "<r><name>ken</name><birth nation=\"china\">1983-11</birth></r>";
        rapidxml::xml_document<> doc;    // character type defaults to char
        doc.parse<0>((char*)xml.c_str());    // 0 means default parse flags
  
        std::cout << "Name of my first node is: " << doc.first_node()->name() << "\n";

        /// rapid xml control routine
        // access
        rapidxml::xml_node<> *node = doc.first_node()->first_node("birth");
        std::cout << "Node birth has value " << node->value() << "\n";
        for (rapidxml::xml_attribute<> *attr = node->first_attribute();
            attr; attr = attr->next_attribute())
        {
            std::cout << "Node birth has attribute " << attr->name() << " ";
            std::cout << "with value " << attr->value() << "\n";
        }

        // modify
        rapidxml::xml_node<>* new_node = doc.allocate_node(rapidxml::node_element, "a", "Google");
        doc.first_node()->append_node(new_node);
        rapidxml::xml_attribute<> *attr = doc.allocate_attribute("href", "google.com");
        new_node->append_attribute(attr);

        // print
        std::cout << "after modified:" << std::endl;
        std::string doc_s = rapidxml2string(doc);

        LOG4CXX_INFO(logger, boost::format("final xml:%s") % doc_s); // boost::format+log4cxx,powerful
        LOG4CXX_INFO(logger, "Exiting application.");
    }
    catch(log4cxx::helpers::Exception& e)
    {
        result = EXIT_FAILURE;
    }

    getchar();

    return result;
}


log4cxx的典型配置文件:
log4j.rootLogger=DEBUG, stdout, R
#log4j.rootLogger=debug, R

#log4j.rootLogger=debug, stdout
#log4j.rootLogger=debug

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log/example.log

log4j.appender.R.MaxFileSize=2KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p %t %c - %m%n


#second log
log4j.logger.secondlog=DEBUG, a2
log4j.additivity.secondlog = false

log4j.appender.a2=org.apache.log4j.RollingFileAppender
log4j.appender.a2.File=log/second2.log

log4j.appender.a2.MaxFileSize=2KB
# Keep 5 backup file
log4j.appender.a2.MaxBackupIndex=5

log4j.appender.a2.layout=org.apache.log4j.PatternLayout
log4j.appender.a2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p %t %c - %m%n

#third log
log4j.logger.thirdlog=DEBUG, a3
log4j.additivity.thirdlog = false

log4j.appender.a3=org.apache.log4j.RollingFileAppender
log4j.appender.a3.File=log/thirdlog.log

log4j.appender.a3.MaxFileSize=2KB
# Keep 5 backup file
log4j.appender.a3.MaxBackupIndex=5

log4j.appender.a3.layout=org.apache.log4j.PatternLayout
log4j.appender.a3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p %t %c - %m%n

分享到:
评论

相关推荐

    log4cxx测试工程

    1. **包含头文件**: 在源代码中引入必要的`log4cxx`头文件,如`&lt;log4cxx/logger.h&gt;`和`&lt;log4cxx/basicconfigurator.h&gt;`。 2. **初始化**: 使用`log4cxx::BasicConfigurator::configure();`进行基本配置,或者使用...

    log4cxx封装为通用LOG宏

    将log4cxx封装为LOG(level, format, content)的形式,可以使得日志的使用更加简洁,参数level代表日志级别,format定义日志输出格式,content则为要输出的具体内容。 封装LOG宏通常涉及以下步骤: 1. 定义宏:创建...

    log4cxx的demo程序

    **log4cxx简介** `log4cxx` 是一个基于 Apache 的 C++ 日志库,它为应用程序提供了灵活的日志记录功能。这个库是受到了 Java 平台上的 `log4j` 库的启发,旨在提供类似的功能,但适用于 C++ 开发环境。`log4cxx` ...

    已经编译好的动态库,log4cxx.dll和log4cxx.dll.lib都有,还有代码等

    要使用log4cxx,你需要在你的C++项目中包含相应的头文件,然后配置log4cxx的配置文件,比如log4cxx.properties或log4cxx.xml。配置文件可以定义日志级别(DEBUG、INFO、WARN、ERROR、FATAL等)、输出目的地(控制台...

    Log4cxx资源与demo

    **Log4cxx资源与demo** **一、Log4cxx简介** Log4cxx是Apache软件基金会的一个开源项目,它是Log4j的C++版本,提供了一套全面的日志记录框架,适用于C++开发者。Log4cxx的目标是为C++应用程序提供灵活、高性能且...

    日志系统log4cxx的安装过程记录

    《日志系统log4cxx的安装与使用详解》 日志系统在软件开发中起着至关重要的作用,它能够帮助开发者追踪程序运行状态,定位错误,优化性能。Apache的log4cxx是C++环境中广泛使用的一个高效日志系统,具备跨平台特性...

    使用VS2019编译log4cxx.zip

    Log4cxx是Apache软件基金会提供的一个C++版的日志框架,类似于Java中的log4j,为C++应用程序提供灵活且可扩展的日志记录功能。本文将详细介绍如何使用Visual Studio 2019(VS2019)编译并使用log4cxx库。 首先,`...

    log4cxx的VS2015版本

    **log4cxx与VS2015:构建与应用** `log4cxx`是一个流行的C++日志记录库,它是Apache软件基金会的Apache Log4j项目的一个移植版本,专为C++开发者设计。这个库提供了丰富的日志记录功能,允许程序员以灵活、可扩展和...

    log4cxx在windows下编译库文件

    描述"C++ 版本 log4cxx在windows下编译的头文件和库"意味着这个压缩包可能包含了log4cxx库的源代码头文件以及编译后的静态或动态库文件,供开发者在Windows环境下链接和使用log4cxx进行日志管理。 **C++与Windows...

    log4cxx_vs2015_x64

    《使用VS2015编译64位log4cxx:构建、配置与应用详解》 在现代软件开发中,日志记录是一项至关重要的任务,它可以帮助开发者追踪程序运行状态,定位并解决问题。log4cxx是Apache软件基金会提供的一个C++版的日志...

    apache-log4cxx-0.10.1.zip

    Apache Log4cxx是Apache软件基金会开发的一个开源C++日志框架,它为C++程序员提供了类似于Java中的Log4j的功能。这个"apache-log4cxx-0.10.1.zip"压缩包包含了Log4cxx的0.10.1版本,这是一个稳定且广泛使用的版本,...

    apache-log4cxx 在vs2010下编译通过.

    Apache Log4cxx 是一个在C++环境中用于日志记录的开源库,它是Log4j的C++版本。在Visual Studio 2010 (VS2010)下编译和使用Log4cxx,需要了解一些关键步骤和知识点。本文将深入探讨如何在VS2010中成功配置和编译...

    log4cxx开源库编译配置.doc

    Log4cxx 是一个基于 C++ 的日志记录框架,它为 C++ 开发者提供了类似于 Java 的 Log4j 的功能。这个开源库被广泛用于在 C++ 应用程序中进行日志记录,以帮助调试、性能分析和系统监控。在配置和编译 Log4cxx 时,...

    log4cxx已经编译好的库

    《深入理解log4cxx——基于VS2010的编译与应用》 在软件开发过程中,日志记录是一项至关重要的任务,它可以帮助开发者追踪程序运行状态,定位问题,优化性能。Apache的log4cxx是C++语言实现的日志框架,它模仿了...

    log4cxx库文件使用

    **log4cxx库文件使用详解** `log4cxx` 是 Apache 开源组织提供的一款 C++ 日志记录框架,它借鉴了 Java 中的 log4j 设计理念,为 C++ 程序员提供了灵活的日志记录功能。在本文中,我们将深入探讨 `log4cxx` 的核心...

    Log4cxx 使用文档

    ### Log4cxx 使用指南 #### 一、简介 Log4cxx是Apache Logging Service下的一个开源项目,它是基于Java社区著名日志工具log4j的C++版本,专门为C++应用程序提供强大的日志记录功能。通过Log4cxx,开发人员能够方便...

    C++log4cxx新手入门

    Log4cxx是Apache软件基金会开发的一个用于C++的日志框架,它是Log4j的C++版本,提供了一套高效、灵活的日志记录解决方案。本文将详细讲解如何对C++新手入门Log4cxx,帮助初学者快速掌握这一工具。 首先,我们需要...

    log4cxx编译通过版本

    标题"Log4cxx编译通过版本"指的是一个经过处理和测试的Log4cxx源代码包,确保能够成功在指定环境中编译。Log4cxx是Apache的一个项目,它是一个针对C++的日志记录框架,类似于Java中的log4j。描述中提到,原始的源码...

    log4cxx_lib.rar

    《log4cxx库的深度解析与应用指南》 在软件开发过程中,日志记录是必不可少的一个环节,它有助于我们追踪程序运行状态、定位错误及优化性能。Log4cxx,一个基于Apache的开源日志框架,为C++程序员提供了强大且灵活...

Global site tag (gtag.js) - Google Analytics