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

  • 相关阅读:
    asp.net在线压缩和解压缩的实现 VS2005
    Office组件配置
    您无权查看或编辑目前 F:\XXX 的权限设置;但是,您可以取得所有权或更改审核设置
    23条心灵寄语献给在创业一线的兄弟姐妹
    IIS 环境下 w3wp.exe 进程 CPU 占用过高的解决方案
    SQLServer修改表所有者
    走出软件作坊推荐
    Asp.net 的 服务器推技术 (Server Push)
    上海火车站售票点
    Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
  • 原文地址:https://www.cnblogs.com/suyunhong/p/6233565.html
Copyright © 2011-2022 走看看