`
yesjavame
  • 浏览: 712227 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

log4cxx配合boost::format

阅读更多
log4cpp用了多年了, 一直用得很得心应手.
现在做网游服务器, 日志类换成了log4cxx.

log4xx会自动加载工作目录下的log4j.properties, 这一点比较好, 使用更方便了.
log4j.properties应该与log4j的配置文件完全一样吧? 通用性好.

其他方面两个日志类差不多. log4cxx::Logger对应log4cpp::Category.
Appender, Layout都是相同的概念.

自从log4cxx从0.9.7升到0.10, 据说内部架构重大更改, 而且有apache的大名顶着, 好像支持者大增.
而log4cpp成熟较早, 一直以来没什么更新, 日渐衰落.

有一点重大区别, log4cxx不支持如printf格式的变参数日志:
log4cpp::Category::getRoot().info("%s %d", "test", 3);

而log4cxx只能先格式化一个字符串后再记日志.
log4cxx::Logger::getRootLogger()->info("A string");

这样log4cxx的性能会差很多. 当日志等级不需要记日志时, 就应该不要格式化字符串.

log4cxx有一组宏, 可以先判断日志等级, 然后再输出.
LOG4CXX_DEBUG(logger, message)

可以这样调用:
LOG4CXX_DEBUG(logger, "test " << 3);

可能是出于安全的考虑, 故意禁止用户使用格式化串. 因为格式化串无法检测类型.
我以前在使用log4cpp的时候, 总是要多次检查格式化串参数是否匹配.
也碰到过因为日志导致程序崩溃的例子.
因为像警告,错误类的日志几乎是不太可能出现的.
测试时, 可能无法覆盖这类日志代码.
而使用流就可以大胆放心.

但是有大半的使用情况下, 流方式输出会显得冗长, 格式控制也没有printf简洁.
只有简单的输出才会使用流.

幸好有boost::format. 它就是类型安全的printf. log4cxx配合boost::format真是绝配.
例如:
LOG4CXX_DEBUG(logger, format("%1% %2%") % "test" % 3)

想起了好用的MFC CString::Format()和Delphi的Format(),
boost::format虽然用'%'显得怪怪的, 但绝对是更安全的格式化串.

(转载请注明来源于金庆的专栏)





分享到:
评论

相关推荐

    log4cxx,rapidxml,boost::format组合demo

    标题 "log4cxx, rapidxml, boost::format 组合 demo" 提示我们这是一个关于三个特定库的集成示例,它们分别是 log4cxx(一个日志记录库)、rapidxml(一个C++ XML解析器)和 boost::format(一个灵活的格式化库)。...

    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.dll和log4cxx.dll.lib都有,还有代码等

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

    使用VS2019编译log4cxx.zip

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

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

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

    log4cxx的VS2015版本

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

    apache-log4cxx-0.10.1.zip

    Apache Log4cxx是Apache软件基金会开发的一个开源C++日志框架,它为C++程序员提供了类似于Java中的Log4j的功能。...在Linux环境下,配合合适的配置文件,Log4cxx能够帮助你更好地监控和调试你的C++应用程序。

    log4cxx_vs2015_x64

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

    log4cxx的demo程序

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

    log4cxx在windows下编译库文件

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

    apache-log4cxx 在vs2010下编译通过.

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

    Log4cxx资源与demo

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

    Log4cxx 使用文档

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

    log4cxx库文件使用

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

    log4cxx开源库编译配置.doc

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

    log4cxx已经编译好的库

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

    C++log4cxx新手入门

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

    log4cxx编译通过版本

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

    c++ window下编译好的log4cxx库(vs2013)

    这个压缩包"**c++ window下编译好的log4cxx库(vs2013)**"包含了在Windows环境下使用Visual Studio 2013编译好的Log4cxx库,方便开发者快速集成到自己的项目中。 Log4cxx的核心概念包括四个主要组件:Logger(日志...

Global site tag (gtag.js) - Google Analytics