#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. ubuntu安装rpm包

    ubuntu下的rpm包的安装方法 一般是不能够直接安装的,我们需要一个工具叫alien,先install它吧.然后按照下面择所需. 1.直接安装: alien -i -c filename.rpm ...

  2. HttpClient方式模拟http请求设置头

    关于HttpClient方式模拟http请求,请求头以及其他参数的设置. 本文就暂时不给栗子了,当作简版参考手册吧. 发送请求是设置请求头:header HttpClient httpClient = ...

  3. shell命令

    1:操作系统:人--使用-->shell(或应用程序)--呼叫-->kernel(核心)--->硬件2:查看shell的种类:# cat /etc/shells3:而这个登入系统的 ...

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

    问题答疑: 1.默认情况下,Apache服务器的配置文件名.MySQL服务器的配置文件名以及PHP预处理器配置文件名分别是什么?Apache默认主配置文件:根目录下config文件夹下httpd.co ...

  5. C++开发ArcGis

    以下这段时间将主要记录如何使用C++开发ArcGis,包括1.C++的学习:2.GIS的基础知识:3.如何开发三部分,9-3后开始后将持续更新

  6. 如何配置Windows 防火墙,允许SQL Server的远程连接

    一.如何找到SQL Server正在侦听的TCP端口,可以按一下步骤: 1.打开 SQL Server 配置管理器中,从开始->所有程序-> Microsoft SQL Server 20 ...

  7. Hive中的排序和分组(对map和reduce的影响,值得一看!)

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规 模较大时,需要较长的计算时间. set ...

  8. Joomla及其类似软件的说明分析

    Joomla不单单是一款免费的软件,还是在国外相当知名的及内容管理.web开发及手机应用开发等为一体的一套系统.Joomla是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux. W ...

  9. Oracle数据库导入导出命令总结

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中.利用 ...

  10. 玩转github----1

    1.svn和github的区别 svn:集成式:我们在多人开发一个项目的时候我们需要准备一个中央服务器,然后每一个人都要通过这个中央服务器进行代码的一个获取和代码的一个提交,所以说这个所有的版本控制和 ...