#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. Excel替换应用

    * 是通配符 ,代表任意字符 ?也是通配符, 代表单个字符替换回车 : 按住alt键不放,然后依次通过数字键盘输入1和0两个数字,放开数字键后再放开alt键.

  2. 用ajax提交form表单及乱码问题

    要求 1. form里是习题和选择的答案包含内容较多,直接用ajax获取页面元素较多,麻烦. 2. 也不能直接用form提交,form提交后会跳转页面,如果出错想在本页面获取错误信息(ajax提交)且 ...

  3. 出现( linker command failed with exit code 1)错误总结 (转)

    这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...

  4. LintCode Two Sum

    1. 数组numbers == null 及numbers.length == 0, 而不是用numbers[] 2. HashMap<Integer, Integer>而不是<in ...

  5. jQuery判断一个字符串中是否包含一个字符串(一)

    var key = 'java'; var str = "hello,javascript,welcome to my world"; if(key.indexOf(str)!=- ...

  6. 只需三步 快速完善网站Sitemap

    越来越多的SEOer把优化的重点放在了站内优化上,细心的朋友应该查看一些前辈的robots.txt的时候不难发现,他们的robots中都加 入了一句Sitemap: http://www.dewang ...

  7. python pickle 序列化类

    python pickle 序列化类 # coding:utf-8 try: import cPickle as pickle except ImportError: import pickle cl ...

  8. http://note.youdao.com/yws/public/redirect/share?id=2bc2dc6c7df6013e9f8106c005da999a&type=false

    Welcome to MarkdownPad 2 MarkdownPad is a full-featured Markdown editor for Windows. Built exclusive ...

  9. JavaScript高级程序设计-第六章面向对象的程序设计

    创建对象主要的两种形式,创建Object实例和创建对象字面量 对象包含属性和方法 数据 .属性有四个特性,特性是为了描述属性行为的,他们是: Configurable(可配置的)是否能删除或是否能修改 ...

  10. 【LINUX命令】之MV

    linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 注意: mv命 ...