log4cplus 在配置文件中设置文件路径,程序自动创建目录,且在日志文件前按日期创建相应的目录

 

#include <string>
#include <cstdio>

#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/appender.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/loglevel.h>
#include <log4cplus/tstring.h>
#include <log4cplus/fileappender.h>

int main(int argc, char *argv[])
{
    log4cplus::initialize();
    try
    {
        // 加载配置文件: "log4cplus.properties"
        log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));

        // 获取配置文件中logger 名为"risk" 的logger 实例
        log4cplus::Logger LogRisk = log4cplus::Logger::getInstance("risk");
        log4cplus::SharedAppenderPtrList list = LogRisk.getAllAppenders();
        for (auto &listiter : list)
        {
            // 所有配置文件中risk logger 配置 为"log4cplus::MIFileAppender" 的appender,都进行初始化。
            // 这样可以达到自动创建一个以当天为日期的目录在name.log 的上一层目录
            log4cplus::Appender *appender = listiter.get();
            if ((nullptr != appender && typeid(*appender) == typeid(log4cplus::MIFileAppender))
            {
                log4cplus::MIFileAppender *miappender = dynamic_cast<log4cplus::MIFileAppender *>(appender);
                // 这里的第一个参数用于生成的文件名。第二个参数如果小于等于0,则会使用默认的文件名"nonam-4000" 后面是PID
                miappender->init("name.log", 1);
            }
            
            LOG4CPLUS_INFO(logRisk, "risk log log4cplus info message ...");
        }
    }
    catch (...)
    {
        std::cout << LOG4CPLUS_TEXT("Exception...") << std::endl;
    }

    log4cplus::logger::shutdown();
    return 0;
}

// 另外,log4cplus::Logger 下有一个静态函数 log4cplus::Logger::getCurrentLoggers();
// 可以获取当前Logger 下的所有Logger 实例的vector

 

错了,之前搞错了,这里删除。

 

 

log4cplus 以当前日期作为日志所在目录,可以配置 TimeBasedRollingFileAppender 作为appender 的实例。同时配置CreateDirs 的值为true 自动创建不存在的目录。

该实例还有一个配置必须存在FilenamePattern,它的值指定转存文件的时间周期,以及转存的文件名。

比如,可以指定按天转存:log/%d{yyyy-MM-dd}/SQFront.mkt.log

但是TimeBasedRollingFileAppender 它有一个问题就是,若log/%d{yyyy-MM-dd}/SQFront.mkt.log 这个文件已经存在,则该文件将会被覆盖。

 

不过,还有更好的方法就是自己实现一个appender.

我自己实现了一个RollingAppender 上传到csdn 资源里面

不知道这个链接对不对:http://download.csdn.net/detail/su_787910081/9836701

 

posted on 2016-12-29 16:28  独孤酷酷  阅读(1396)  评论(0编辑  收藏  举报