#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

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

  1. ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案

    原文:ssis package 在调试状态中设置断点,程序 不进入断点 的解决方案 针对 SSIS intergation 项目 > 属性 > Debug >Run64bITRunt ...

  2. js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

    ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...

  3. 使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置

    mybatis – MyBatis 3 | 入门 http://www.mybatis.org/mybatis-3/zh/getting-started.html 从 XML 中构建 SqlSessi ...

  4. apache日志配置一例,包括指定存储目录与格式、自动删除过期的日志文件

    有需要的朋友可以参考下(http://www.nanke0834.com) 1.vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 添加或修改为:复 ...

  5. vs2022 如何让.net库文件参与程序调试【可以.net库文件的源代码中设置断点,单步跟踪】

    由于.net core 是开源的.所以可以让.net库文件参与程序调试.具体vs2022配置如下 1.设置VS2022 加载程序数据文件(.pdb俗称符号文件) 1)选择工具>选项>调试& ...

  6. java读取properties文件,并在配置文件中设置默认浏览器驱动

    java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properti ...

  7. Windows环境下redis 配置文件中设置的密码无效

    当我们安装了redis服务后,发现在其配置文件redis.windows.conf(或redis.conf)设置了密码:requirepass ****** 但是打开redis-cli.exe后输入命 ...

  8. 在使用jjwt时在配置文件中设置过期时间,取到的结果为0的原因

    在设置了过期时间后感觉没有起作用,打印日志查看了下为0,因为生成token的文件在一个公共模块中,而过期时间设置在服务模块 中的配置文件中. 原因是:没有为设置getter和setter方法 来自为知 ...

  9. 如果使用jsp文件,需要在配置文件中配置resources项,才能让idea识别这个jsp文件

    没有添加这一项在编译后的.class文件中的结构目录是这样子的 添加上这一个配置项,在class配置文件中的位置是这样子的: 添加的配置文件是这样子的: <resources> <r ...

随机推荐

  1. i5 6300HQ 和 i7 6700HQ

    i7 6700HQ: 四核八线程 14nm 45W 2.6-3.5GHz 支持DDR4 2133内存 三级缓存6M HD Graphics 530集显 i5 6300HQ: 四核四线程 14nm 45 ...

  2. 学android: android-studio从main开始

    android-studio 创建hello world很容易,一路next创建blank activity,再接好手机或者avd(andorid virtual device)就好了.  但是对于我 ...

  3. MySQL 重装

    由于之前第一次装MySQL,默认的datadir在启动盘中,我想要将datadir移动到更大的存储盘中.无奈网上的各种文章的方法在我这里总是不work.我决定重新用homebrew来装一遍MySQL. ...

  4. 【php学习】PHP 入门经典第一章笔记

    第一章: php在线手册:http://php.net/manual/zh/index.php 在开始学习PHP之前,先来看一个合格的PHP程序员今后应具备哪些知识,这里只是笔者的一些总结,希望对读者 ...

  5. 【转】oracle内存分配和调优总结

    转自 http://blog.itpub.net/12272958/viewspace-696834/ 一直都想总结一下oracle内存调整方面的知识,最近正好优化一个数据库内存参数,查找一些资料并且 ...

  6. 【转载】RMAN备份保留策略设置相关命令

    转自 http://blog.sina.com.cn/s/blog_7c5a82970101g4s7.html 策略有两种,一种是基于恢复窗口策略的,一种是基于冗余策略的. 基于恢复窗口策略: 定义的 ...

  7. 微软雅黑 在css里怎么写

    1.首先要了解css中是如何控制字体的. font:在一个声明中设置所有字体属性: font有以下几个属性: font-style:字体样式 font-variant:字体异体 font-weight ...

  8. angular2 - content projection-

    angular2中的内容映射: App.component: <my-day> <my-lucky> </my-lucky> </my-day> MyD ...

  9. unity对话代码

    这个是根据网上unity GUI打字机教程修改的 原教程是JS,我给改成了C#,然后增加了许多功能 这个教程能实现一段文字对话,有打字机显示效果,能写许多对话,能快进对话,总之现在RPG游戏里有的功能 ...

  10. JVM加载类的过程,双亲委派机制中的方法

    JVM加载类的过程: 1)JVM中类的整个生命周期: 加载=>验证=>准备=>解析=>初始化=>使用=>卸载  1.1.加载 类的加载阶段,主要是获取定义此类的二进 ...