#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. 用python+selenium获取北上广深成五地PM2.5数据信息并按空气质量排序

    从http://www.pm25.com/shenzhen.html抓取北京,深圳,上海,广州,成都的pm2.5指数,并按照空气质量从优到差排序,保存在txt文档里 代码如下: #coding=utf ...

  2. Spring3.0之后->Spring MVC过滤器-HiddenHttpMethodFilter

    浏览器form表单只支持GET与POST请求,而DELETE.PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET.POST.PUT ...

  3. CLR via C# 3rd - 01 - The CLR's Execution Model

    1. Assemly       A managed module is a standard 32-bit Microsoft Windoes portable executable (PE32) ...

  4. springmvc学习笔记--ueditor和springmvc的集成

    前言: 在web开发中, 富文本的编辑器真心很重要. 有电商店铺的打理, 新闻稿/博客文章/论坛帖子的编辑等等, 这种所见即所的编辑方式, 大大方便了非技术人员从事互利网相关的工作. 因为手头有个小项 ...

  5. Array.splice()理解记忆

    var arr = [0,1,2,3,4,5,6,7,8,9]; arr.splice(0,0,"添加项1"); //arr => ["添加项",0,1, ...

  6. UNITY更新到5后设置的动画无法播放了怎么办

    点击对应的animator,将 apply root motion  这个选项的勾去掉就可以了,纠结了很久最后在UNITY官方论坛找到的答案

  7. #ifndef 的用法

    背景: 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,会引起大量的声明冲突,这时候需 ...

  8. Chapter 3: Develop the user experience

    Plan for search engine optimization and accessibility 使用analytical tools分析HTML,如SEO toolkit from MS, ...

  9. JS关于时间的计算

    用javascript返回两个时间差,精确到秒:     Date.diff = function(a,b){        if(a instanceof Date && b.ins ...

  10. Sql server 2008 R2 实现远程异地备份

    1. 环境: a)两台同样的Sql Server 2008 R2 服务器 b)操作系统都是windows 2008 c)需要将102.108.0.1数据库MSGC远程备份到112.118.0.2的服务 ...