zoukankan      html  css  js  c++  java
  • log4cplus入门

    转载http://wgwang.github.com/tech/misc/log4cplustutorial.html#id8

    介绍

    log4cplus是log4j的c++移植版,是c++中一个很好的打印日志的库。它与另外一个c++的log库log4cxx相比较,好处是不依赖于libapr和libaprutil,可以静态链接到程序中,便于部署。

    当前的最新稳定版本是1.04,也是下面的例子中所用到的版本。

    从这个版本中所了解到的,log4cplus并未完全实现了log4j,不少细节部分都没有实现。但这并不妨碍我们使用它。

    下面是一些log4cplus资源:

    编译

    log4cplus没有太复杂的依赖关系,编译器来很简单,一般情况下使用默认情况即可。有一点可以提一下,如果不想将编译好的库安装在默认路径下,可以在./configure的时候加入参数: –prefix=/the/path/you/want/to/install/the/log4cplus

    实例

    需求

    以一个典型的需求(笔者的经历)简单实现一个例子。需求是这样的:

    • 用文件配置
    • 自动切割日志,按小时切割
    • 保留8天日志(更长时间的日志会转移到其他专门的日志服务器上)
    • 指定输出的日志格式(便于日志分析)

    配置

    下面是整理好的配置文件,命名为:log.properties,内容如下:

    log4cplus.rootLogger=TRACE, R
    
    log4cplus.appender.R=log4cplus::DailyRollingFileAppender
    log4cplus.appender.R.File=./log/test.log
    log4cplus.appender.R.MaxBackupIndex=192 #8 * 24
    log4cplus.appender.R.Schedule=HOURLY
    log4cplus.appender.R.Append=true
    log4cplus.appender.R.layout=log4cplus::PatternLayout
    log4cplus.appender.R.layout.ConversionPattern=%p %D{%Y-%m-%d %H:%M:%S.%q} %i:%t %F:%L "%m"%n

    程序

    简单的示例程序如下:

    #include <cstdlib>
    #include <log4cplus/logger.h>
    #include <log4cplus/configurator.h>
    #include <log4cplus/helpers/loglog.h>
    #include <log4cplus/helpers/stringhelper.h>
    
    using namespace std;
    using namespace log4cplus;
    using namespace log4cplus::helpers;
    
    int main()
    {
    
        PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));
        Logger logger = Logger::getRoot();
    
    // trace
        LOG4CPLUS_TRACE(logger, "trace and get the fingerprint: " << "random integer: "<< random());
    
    // debug
        LOG4CPLUS_DEBUG(logger, "this is debug log: " << "random integer: "<< random());
    
    // info
        LOG4CPLUS_INFO(logger, "the information centry...." << "[ 1 + 1 = " << 1 + 1 << "]");
    
    // warn
        LOG4CPLUS_WARN(logger, "Writing warning messages to log....");
    
    // error
        LOG4CPLUS_ERROR(logger, "ooooooh, there is an error....");
    
    //fatal
        LOG4CPLUS_FATAL(logger, "oh, my god! the fatal error occur!!!!!!!!!");
    
        return 0;
    }

    配置说明

    • 文件配置

      log4cplus提供一个类【PropertyConfigurator】来实现从文件读取配置,参数就是文件名。其他参数采用默认。

    • 按时间切割日志,需要在配置文件中配置appender为【DailyRollingFileAppender】,对应的一个参数是文件名,可以用程序启动时的相对路径,不过绝对路径会更好。

    • 按小时切割日志,以及保留8天,体现在配置文件中为如下两个参数:

      • log4cplus.appender.R.MaxBackupIndex=192 #8 * 24
      • log4cplus.appender.R.Schedule=HOURLY
    • 最后,是一个用来配置日志输出格式的配置项,如下:

      • log4cplus.appender.R.layout=log4cplus::PatternLayout
      • log4cplus.appender.R.layout.ConversionPattern=%p %D{%Y-%m-%d %H:%M:%S.%q} %i:%t %F:%L “%m”%n

      日志格式的说明,见后面的附录资源。

    • 配置项的第一行【log4cplus.rootLogger=TRACE, R】会跟cpp代码一起来区别不同的logger和日志输出级别,分别说明如下:

      • 选择logger

        Logger logger = Logger::getRoot(); 这个用来选择rootLogger的,其他的还可以配置更多的logger,一般情况下不是很需要。

      • 日志输出级别 TRACE

        这个可以控制日志输出,如在debug环境中,输出各种debug信息,而在线上环境中,则只需要输出info和各类错误信息。log4cplus支持如下日志级别,使用方法可以看cpp代码。

        • TRACE
        • DEBUG
        • INFO
        • WARN
        • ERROR
        • FATAL

        上述各种级别中,从上往下,重要性依次递增。而在配置文件中的级别会屏蔽掉比它重要性更低的日志输出。

      • 日志文件名:当前版本不支持对后面日期格式的配置,日期格式是硬编码到程序中的。对于按小时切割日志格式的,文件为配置的文件名后附加“.yyyy-mm-dd-HH”。另外,在一个小时内多次启动程序,会在其后增加“.1”,“.2”……等,并不会append到同一个文件中,这点不是太好。

    程序说明

    使用方式见上述的示例代码即可。两点说明下:

    • 如【LOG4CPLUS_FATAL】这类的宏,可以重新用宏定义为自己熟悉的方式
    • log4cplus的日志输出是用c++的stream的方式,用<<符号输出不同的字段。对于喜欢用c string format方式的话,需要在其上封装一层。

    附录

    其他appender

    log4cplus还支持如下一些打印日志的方式(appender):

    • RollingFileAppender:按文件大小切分日志
    • SocketAppender:把日志打印到网络socket中,适合实时日志分析等。另外应该支持将日志同时打印到本地文件和socket中,这样可以实现本地正常打印日志,网络来做实时统计等。
    • ConsoleAppender: 打印日志到标准输出
  • 相关阅读:
    【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用
    【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输
    【iCore1S 双核心板_FPGA】例程八:触发器实验——触发器的使用
    【iCore4 双核心板_ARM】例程十:RTC实时时钟实验——显示时间和日期
    【iCore4 双核心板_ARM】例程九:ADC实验——电源监控
    WebBrowser的Cookie操作之流量刷新机
    网站受攻击的常用手段
    八爪鱼招标网的百度权重升为2了,独立IP也从0快速发展为1000
    网站添加数据出错,原来是MS SQL Server2008日志文件占据空间过大导致的
    当你的网站被疯狂攻击时你能做什么?
  • 原文地址:https://www.cnblogs.com/linmzh/p/2856095.html
Copyright © 2011-2022 走看看