zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mysql索引
    mysql锁机制
    mysql授权
    mysql执行计划
    mysql知识补遗
    求助:springboot调用存储过程并使用了pagehelper分页时报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
    java面试题1
    Yarn
    MapRudecer
    Hive数据倾斜和解决办法
  • 原文地址:https://www.cnblogs.com/suyunhong/p/6233565.html
Copyright © 2011-2022 走看看